diff --git a/docs/quick-start.md b/docs/quick-start.md
index 0d4dc4bf98fd9899ef7593f9e8b51d03f6652a31..9656fb99f353eeb40e4243615c1600e043269ba9 100644
--- a/docs/quick-start.md
+++ b/docs/quick-start.md
@@ -1,18 +1,22 @@
# 快速使用指导
-## 编译及部署
+[TOC]
-### 编译指导
+## 编译指导
* 编译环境:openEuler Linux x86/AArch64
+
* 进行编译需要以下包:
* golang(大于等于1.15版本)
* make
* git
+ * rust(大于等于1.57版本)
+ * cargo(大于等于1.57版本)
+ * openssl-devel
``` shell
- sudo yum install golang make git
- ```
+ sudo yum install golang make git rust cargo openssl-devel
+ ```
* 使用git获取本项目的源码
@@ -27,76 +31,101 @@
```shell
cd KubeOS
- sudo make
- ```
-
- * proxy及operator容器镜像构建
- * proxy及operator容器镜像构建使用docker,请先确保docker已经安装和配置完毕
- * 请用户自行编写Dockerfile来构建镜像,请注意
- * operator和proxy需要基于baseimage进行构建,用户保证baseimage的安全性
- * 需将operator和proxy拷贝到baseimage上
- * 请确保proxy属主和属组为root,文件权限为500
- * 请确保operator属主和属组为在容器内运行operator的用户,文件权限为500
- * operator和proxy的在容器内的位置和容器启动时运行的命令需与部署operator的yaml中指定的字段相对应
- * 首先指定镜像仓库地址、镜像名及版本,Dockerfile路径,然后构建并推送镜像到镜像仓库
- * Dockerfile参考如下, Dockerfile也可以使用多阶段构建:
-
- ``` dockerfile
- FROM your_baseimage
- COPY ./bin/proxy /proxy
- ENTRYPOINT ["/proxy"]
- FROM your_baseimage
- COPY --chown=6552:6552 ./bin/operator /operator
- ENTRYPOINT ["/operator"]
- ```
+ sudo make
+ # 编译生成的二进制在bin目录下,查看二进制
+ tree bin
+ bin
+ ├── operator
+ ├── os-agent
+ ├── proxy
+ ├── rust
+ │ ├── ...
+ │ └── release
+ │ ├── ...
+ │ ├── os-agent
+ │ └── proxy
+ ```
- ```shell
- # 指定proxy的镜像仓库,镜像名及版本
- export IMG_PROXY=your_imageRepository/proxy_imageName:version
- # 指定proxy的Dockerfile地址
- export DOCKERFILE_PROXY=your_dockerfile_proxy
- # 指定operator的镜像仓库,镜像名及版本
- export IMG_OPERATOR=your_imageRepository/operator_imageName:version
- # 指定operator的Dockerfile路径
- export DOCKERFILE_OPERATOR=your_dockerfile_operator
-
- # 镜像构建
- docker build -t ${IMG_OPERATOR} -f ${DOCKERFILE_OPERATOR} .
- docker build -t ${IMG_PROXY} -f ${DOCKERFILE_PROXY} .
- # 推送镜像到镜像仓库
- docker push ${IMG_OPERATOR}
- docker push ${IMG_PROXY}
- ```
+ * ```bin/proxy```、```bin/os-agent```为go语言编写的proxy和os-agent,```bin/rust/release/proxy```、```bin/rust/release/os-agent```为rust语言编写的proxy和os-agent,二者功能一致。
+
+## 镜像构建指导
+
+### proxy及operator镜像构建指导
+
+* proxy及operator容器镜像构建使用docker,请先确保docker已经安装和配置完毕
+
+* 请用户自行编写Dockerfile来构建镜像,请注意
+ * operator和proxy需要基于baseimage进行构建,用户保证baseimage的安全性
+ * 需将operator和proxy拷贝到baseimage上
+ * 请确保proxy属主和属组为root,文件权限为500
+ * 请确保operator属主和属组为在容器内运行operator的用户,文件权限为500
+ * operator和proxy的在容器内的位置和容器启动时运行的命令需与部署operator的yaml中指定的字段相对应
+
+* 首先指定镜像仓库地址、镜像名及版本,Dockerfile路径,然后构建并推送镜像到镜像仓库
+
+* Dockerfile参考如下, Dockerfile也可以使用多阶段构建:
+
+ ``` dockerfile
+ FROM your_baseimage
+ COPY ./bin/proxy /proxy
+ ENTRYPOINT ["/proxy"]
+ FROM your_baseimage
+ COPY --chown=6552:6552 ./bin/operator /operator
+ ENTRYPOINT ["/operator"]
+ ```
-* OS虚拟机镜像制作
- * 制作注意事项
- * 请确保已安装qemu-img,bc,parted,tar,yum,docker
- * 容器OS镜像制作需要使用root权限
- * 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库
- * 容器OS镜像制作之前需要先将当前机器上的selinux关闭或者设为允许模式
- * 使用默认rpmlist进行容器OS镜像制作出来的镜像默认和制作工具保存在相同路径,该分区至少有25G的剩余空间
- * 容器镜像制作时不支持用户自定义配置挂载文件
- * 容器OS镜像制作工具执行异常中断,可能会残留文件、目录或挂载,需用户手动清理,对于可能残留的rootfs目录,该目录虽然权限为555,但容器OS镜像制作在开发环境进行,不会对生产环境产生影响。
- * 请确保os-agent属主和属组为root,建议os-agent文件权限为500
- * 容器OS虚拟机镜像制作
- 进入scripts目录,执行脚本
-
- ```shell
- cd scripts
- bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0'''
- ```
-
- * 其中 xx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。
- * 容器 OS 镜像制作完成后,会在 scripts 目录下生成:
- * raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2020MiB,持久化分区<16GB。
- * qcow2 格式的系统镜像 system.qcow2。
- * 可用于升级的根文件系统分区镜像 update.img 。
- * 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景,x86 架构的虚拟机使用 legacy 启动模式启动需制作镜像时指定-l参数
- * 容器OS运行底噪<150M (不包含k8s组件及相关依赖kubernetes-kubeadm,kubernetes-kubelet, containernetworking-plugins,socat,conntrack-tools,ebtables,ethtool)
- * 本项目不提供容器OS镜像,仅提供裁剪工具,裁剪出来的容器OS内部的安全性由OS发行商保证。
- * 声明: os-agent使用本地unix socket进行通信,因此不会新增端口。下载镜像的时候会新增一个客户端的随机端口,1024~65535使用完后关闭。proxy和operator与api-server通信时作为客户端也会有一个随机端口,基于kubernetes的operator框架,必须使用端口。他们部署在容器里。
-
-### 部署指导
+ ```shell
+ # 指定proxy的镜像仓库,镜像名及版本
+ export IMG_PROXY=your_imageRepository/proxy_imageName:version
+ # 指定proxy的Dockerfile地址
+ export DOCKERFILE_PROXY=your_dockerfile_proxy
+ # 指定operator的镜像仓库,镜像名及版本
+ export IMG_OPERATOR=your_imageRepository/operator_imageName:version
+ # 指定operator的Dockerfile路径
+ export DOCKERFILE_OPERATOR=your_dockerfile_operator
+
+ # 镜像构建
+ docker build -t ${IMG_OPERATOR} -f ${DOCKERFILE_OPERATOR} .
+ docker build -t ${IMG_PROXY} -f ${DOCKERFILE_PROXY} .
+ # 推送镜像到镜像仓库
+ docker push ${IMG_OPERATOR}
+ docker push ${IMG_PROXY}
+ ```
+
+### KubeOS虚拟机镜像制作指导
+
+* 制作注意事项
+ * 请确保已安装qemu-img,bc,parted,tar,yum,docker
+ * 容器OS镜像制作需要使用root权限
+ * 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库
+ * 容器OS镜像制作之前需要先将当前机器上的selinux关闭或者设为允许模式
+ * 使用默认rpmlist进行容器OS镜像制作出来的镜像默认和制作工具保存在相同路径,该分区至少有25G的剩余空间
+ * 容器镜像制作时不支持用户自定义配置挂载文件
+ * 容器OS镜像制作工具执行异常中断,可能会残留文件、目录或挂载,需用户手动清理,对于可能残留的rootfs目录,该目录虽然权限为555,但容器OS镜像制作在开发环境进行,不会对生产环境产生影响。
+ * 请确保os-agent属主和属组为root,建议os-agent文件权限为500
+
+* 容器OS虚拟机镜像制作
+ 进入scripts目录,执行脚本
+
+ ```shell
+ cd scripts
+ bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0'''
+ ```
+
+ * 其中 xx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。
+ * 容器 OS 镜像制作完成后,会在 scripts 目录下生成:
+ * raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2020MiB,持久化分区<16GB。
+ * qcow2 格式的系统镜像 system.qcow2。
+ * 可用于升级的根文件系统分区镜像 update.img 。
+ * 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景,x86 架构的虚拟机使用 legacy 启动模式启动需制作镜像时指定-l参数
+ * 容器OS运行底噪<150M (不包含k8s组件及相关依赖kubernetes-kubeadm,kubernetes-kubelet, containernetworking-plugins,socat,conntrack-tools,ebtables,ethtool)
+ * 本项目不提供容器OS镜像,仅提供裁剪工具,裁剪出来的容器OS内部的安全性由OS发行商保证。
+
+* 声明: os-agent使用本地unix socket进行通信,因此不会新增端口。下载镜像的时候会新增一个客户端的随机端口,1024~65535使用完后关闭。proxy和operator与api-server通信时作为客户端也会有一个随机端口,基于kubernetes的operator框架,必须使用端口。他们部署在容器里。
+
+## 部署指导
+
+### os-operator和os-proxy部署指导
* 环境要求
* openEuler Linux x86/AArch64系统
@@ -142,18 +171,35 @@
kubectl get pods -A
```
-### 使用指导
+## 使用指导
#### 注意事项
-* 容器OS升级为所有软件包原子升级,默认不在容器OS内提供单包升级能力。
-* 容器OS升级为双区升级的方式,不支持更多分区数量。
-* 单节点的升级过程的日志可在节点的/var/log/message文件查看。
-* 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。
-* 使用docker镜像升级和mtls双向认证仅支持 openEuler 22.09 及之后的版本
-* 不支持跨大版本升级
-
-#### 参数说明
+* 公共注意事项
+ * 仅支持虚拟机x86和arm64 UEFI场景。
+ * 当前不支持集群节点OS多版本管理,即集群中OS的CR只能为一个。
+ * 使用kubectl apply通过YAML创建或更新OS的CR时,不建议并发apply,当并发请求过多时,kube-apiserver会无法处理请求导致失败。
+ * 如用户配置了容器镜像仓的证书或密钥,请用户保证证书或密钥文件的权限最小。
+* 升级注意事项
+ * 升级为所有软件包原子升级,默认不提供单包升级能力。
+ * 升级为双区升级的方式,不支持更多分区数量。
+ * 当前暂不支持跨大版本升级。
+ * 单节点的升级过程的日志可在节点的 /var/log/messages 文件查看。
+ * 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。
+ * 节点上containerd如需配置ctr使用的私有镜像,请将配置文件host.toml按照ctr指导放在/etc/containerd/certs.d目录下。
+
+* 配置注意事项
+ * 用户自行指定配置内容,用户需保证配置内容安全可靠 ,尤其是持久化配置(kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next),KubeOS不对参数有效性进行检验。
+ * opstype=config时,若osversion与当前集群节点的OS版本不一致,配置不会进行。
+ * 当前仅支持kernel参数临时配置(kernel.sysctl)、持久化配置(kernel.sysctl.persist)和grub cmdline配置(grub.cmdline.current和grub.cmdline.next)。
+ * 持久化配置会写入persist持久化分区,升级重启后配置保留;kernel参数临时配置重启后不保留。
+ * 配置grub.cmdline.current或grub.cmdline.next时,如为单个参数(非key=value格式参数),请指定key为该参数,value为空。
+ * 进行配置删除(operation=delete)时,key=value形式的配置需保证key、value和实际配置一致。
+ * 配置不支持回退,如需回退,请修改配置版本和配置内容,重新下发配置。
+ * 配置出现错误,节点状态陷入config时,请将配置版本恢复成上一版本并重新下发配置,从而使节点恢复至idel状态。 但是请注意:出现错误前已经配置完成的参数无法恢复。
+ * 在配置grub.cmdline.current或grub.cmdline.next时,若需要将已存在的“key=value”格式的参数更新为只有key无value格式,比如将“rd.info=0”更新成rd.info,需要先删除“key=value”,然后在下一次配置时,添加key。不支持直接更新或者更新删除动作在同一次完成。
+
+#### OS CR参数说明
在集群中创建类别为OS的定制对象,设置相应字段。类别OS来自于安装和部署章节创建的CRD对象,字段及说明如下:
@@ -163,21 +209,21 @@
| 参数 |参数类型 | 参数说明 | 使用说明 | 是否必选 |
| -------------- | ------ | ------------------------------------------------------------ | ----- | ---------------- |
- | imagetype | string | 使用的升级镜像的类型 | 需为 docker ,containerd ,或者是 disk,其他值无效,且该参数仅在升级场景有效。
**注意**:若使用containerd,agent优先使用crictl工具拉取镜像,没有crictl时才会使用ctr命令拉取镜像。使用ctr拉取镜像时,镜像如果在私有仓内,需按照[官方文档](https://github.com/containerd/containerd/blob/main/docs/hosts.md)在/etc/containerd/certs.d目录下配置私有仓主机信息,才能成功拉取镜像。|是 |
- | opstype | string | 进行的操作,升级,回退或者配置 | 需为 upgrade ,config 或者 rollback ,其他值无效 |是 |
- | osversion | string | 用于升级或回退的镜像的OS版本 | 需为 KubeOS version , 例如: KubeOS 1.0.0|是 |
- | maxunavailable | int | 同时进行升级或回退的节点数 | maxunavailable值设置为大于实际集群的节点数时也可正常部署,升级或回退时会按照集群内实际节点数进行|是 |
- | containerimage | string | 用于升级的容器镜像 | 需要为容器镜像格式:[REPOSITORY/NAME[:TAG@DIGEST]](https://docs.docker.com/engine/reference/commandline/tag/#extended-description),仅在使用容器镜像升级场景下有效|是 |
- | imageurl | string | 用于升级的磁盘镜像的地址 | imageurl中包含协议,只支持http或https协议,例如: 仅在使用磁盘镜像升级场景下有效|是 |
+ | imagetype | string | 升级镜像的类型 | 仅支持docker ,containerd ,或者是 disk,仅在升级场景有效。
**注意**:若使用containerd,agent优先使用crictl工具拉取镜像,没有crictl时才会使用ctr命令拉取镜像。使用ctr拉取镜像时,镜像如果在私有仓内,需按照[官方文档](https://github.com/containerd/containerd/blob/main/docs/hosts.md)在/etc/containerd/certs.d目录下配置私有仓主机信息,才能成功拉取镜像。 |是 |
+ | opstype | string | 操作类型:升级,回退或者配置 | 仅支持upgrade ,config 或者 rollback |是 |
+ | osversion | string | 升级/回退的目标版本 | osversion需与节点的目标os版本对应(节点上/etc/os-release中PRETTY_NAME字段或k8s检查到的节点os版本) 例如:KubeOS 1.0.0。 |是 |
+ | maxunavailable | int | 每批同时进行升级/回退/配置的节点数。 | maxunavailable值大于实际节点数时,取实际节点数进行升级/回退/配置。 |是 |
+ | containerimage | string | 用于升级的容器镜像 | 仅在imagetype是容器类型时生效,仅支持以下3种格式的容器镜像地址: repository/name repository/name@sha256:xxxx repository/name:tag |是 |
+ | imageurl | string | 用于升级的磁盘镜像的地址 | imageurl中包含协议,只支持http或https协议,例如: ,仅在使用磁盘镜像升级场景下有效 |是 |
| checksum | string | 用于升级的磁盘镜像校验的checksum(SHA-256)值或者是用于升级的容器镜像的digests值 | 仅在升级场景下有效 |是 |
| flagSafe | bool | 当imageurl的地址使用http协议表示是否是安全的 | 需为 true 或者 false ,仅在imageurl使用http协议时有效 |是 |
| mtls | bool | 用于表示与imageurl连接是否采用https双向认证 | 需为 true 或者 false ,仅在imageurl使用https协议时有效|是 |
| cacert | string | https或者https双向认证时使用的根证书文件 | 仅在imageurl使用https协议时有效| imageurl使用https协议时必选 |
| clientcert | string | https双向认证时使用的客户端证书文件 | 仅在使用https双向认证时有效|mtls为true时必选 |
| clientkey | string | https双向认证时使用的客户端公钥 | 仅在使用https双向认证时有效|mtls为true时必选 |
- | evictpodforce | bool | 用于表示升级/回退时是否强制驱逐pod | 需为 true 或者 false ,仅在升级或者回退时有效| 必选 |
- | sysconfigs | / | 需要进行配置的参数值 | 在配置或者升级或者回退机器时有效,在升级或者回退操作之后即机器重启之后起效,详细字段说明请见```配置(Settings)指导```| 可选 |
- | upgradeconfigs | / | 需要升级前进行的配置的参数值 | 在升级或者回退时有效,在升级或者回退操作之前起效,详细字段说明请见```配置(Settings)指导```| 可选 |
+ | evictpodforce | bool | 升级/回退时是否强制驱逐pod | 需为 true 或者 false ,仅在升级或者回退时有效| 必选 |
+ | sysconfigs | / | 配置设置 | 1. “opstype=config”时只进行配置。 2.“opstype=upgrade/rollback”时,代表升级/回退后配置,即在升级/回退重启后进行配置。```配置(Settings)指导``` | “opstype=config”时必选 |
+ | upgradeconfigs | / | 升级前配置设置 | 在升级或者回退时有效,在升级或者回退操作之前起效,详细字段说明请见```配置(Settings)指导```| 可选 |
#### 升级指导
@@ -271,13 +317,13 @@
sysconfigs:
version: edit.os.version
configs:
- - model: kernel.systcl
+ - model: kernel.sysctl
contents:
- key: kernel param key1
value: kernel param value1
- key: kernel param key2
value: kernel param value2
- - model: kernel.systcl.persist
+ - model: kernel.sysctl.persist
configpath: persist file path
contents:
- key: kernel param key3
@@ -287,7 +333,7 @@
upgradeconfigs:
version: 1.0.0
configs:
- - model: kernel.systcl
+ - model: kernel.sysctl
contents:
- key: kernel param key4
value: kernel param value4
@@ -311,12 +357,13 @@
kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage'
```
-* 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的 imageurl, osversion, checksum, maxunavailable, flagSafe 或者containerimage字段进行相应修改。
+* 如果后续需要再次升级,与上面相同,对upgrade_v1alpha1_os.yaml的相应字段进行修改
#### 配置(Settings)指导
* Settings参数说明:
- 以进行配置时的示例yaml为例对配置的参数进行说明,示例yaml如下:
+
+ 基于示例YAML对配置的参数进行说明,示例YAML如下,配置的格式(缩进)需和示例保持一致:
```yaml
apiVersion: upgrade.openeuler.org/v1alpha1
@@ -330,72 +377,97 @@
maxunavailable: edit.node.config.number
containerimage: ""
evictpodforce: false
- imageurl: ""
checksum: ""
- flagSafe: false
- mtls: false
sysconfigs:
- version: 1.0.0
+ version: edit.sysconfigs.version
configs:
- - model: kernel.systcl
- contents:
+ - model: kernel.sysctl
+ contents:
- key: kernel param key1
value: kernel param value1
- key: kernel param key2
value: kernel param value2
operation: delete
- - model: kernel.systcl.persist
+ - model: kernel.sysctl.persist
configpath: persist file path
contents:
- key: kernel param key3
- value: kernel param value3
+ value: kernel param value3
+ - model: grub.cmdline.current
+ contents:
+ - key: boot param key1
+ - key: boot param key2
+ value: boot param value2
+ - key: boot param key3
+ value: boot param value3
+ operation: delete
+ - model: grub.cmdline.next
+ contents:
+ - key: boot param key4
+ - key: boot param key5
+ value: boot param value5
+ - key: boot param key6
+ value: boot param value6
+ operation: delete
```
- * 配置的参数说明如下:
- * version: 配置的版本,通过版本差异触发配置,请修改配置后更新 version
- * configs: 具体配置内容
- * model: 进行的配置的类型,支持的配置类型请看[Settings 列表](#setting-列表)
- * configpath: 如为持久化配置,配置文件路径
- * contents: 配置参数的 key / value 和对参数的操作。
- * key / value: 请看[Settings 列表](#setting-列表)对支持的配置的 key / value的说明。
- * operation: 若不指定operation,则默认为添加或更新。若指定为delete,代表删除目前OS中已配置的参数。
- **注意:** 当operation为delete时,yaml中的key/value必须和OS上想删除参数的key/value**一致**,否则删除失败。
- * upgradeconfigs与sysconfig参数相同,upgradeconfig为升级前进行的配置,仅在升级/回滚场景起效,在升级/回滚操作执行前进行配置,只进行配置或者需要升级/回滚重启后执行配置,使用sysconfigs
+ 配置的参数说明如下:
+
+ | 参数 | 参数类型 | 参数说明 | 使用说明 | 配置中是否必选 |
+ | ---------- | -------- | --------------------------- | ------------------------------------------------------------ | ----------------------- |
+ | version | string | 配置的版本 | 通过version是否相等来判断配置是否触发,version为空(为""或者没有值)时同样进行判断,所以不配置sysconfigs/upgradeconfigs时,继存的version值会被清空并触发配置。 | 是 |
+ | configs | / | 具体配置内容 | 包含具体配置项列表。 | 是 |
+ | model | string | 配置的类型 | 支持的配置类型请看附录下的```Settings列表``` | 是 |
+ | configpath | string | 配置文件路径 | 仅在kernel.sysctl.persist配置类型中生效,请看附录下的```Settings列表```对配置文件路径的说明。 | 否 |
+ | contents | / | 具体key/value的值及操作类型 | 包含具体配置参数列表。 | 是 |
+ | key | string | 参数名称 | key不能为空,不能包含"=",不建议配置含空格、tab键的字符串,具体请看附录下的```Settings列表```中每种配置类型对key的说明。 | 是 |
+ | value | string | 参数值 | key=value形式的参数中,value不能为空,不建议配置含空格、tab键的字符串,具体请看附录下的```Settings列表```中对每种配置类型对value的说明。 | key=value形式的参数必选 |
+ | operation | string | 对参数进行的操作 | 仅对kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next类型的参数生效。默认为添加或更新。仅支持配置为delete,代表删除已存在的参数(key=value需完全一致才能删除)。 | 否 |
+
+
+
+ * upgradeconfigs与sysconfigs参数相同,upgradeconfigs为升级/回退前进行的配置,仅在upgrade/rollback场景起效,sysconfigs既支持只进行配置,也支持在升级/回退重启后进行配置
+
* 使用说明
+
* 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如上,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml
+
* 查看配置之前的节点的配置的版本和节点状态(NODESTATUS状态为idle)
```shell
- kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADESYSCONFIG:status.upgradesysconfigs.version'
+ kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version'
```
* 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行配置,再次查看节点状态(NODESTATUS变成config)
```shell
kubectl apply -f upgrade_v1alpha1_os.yaml
- kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADESYSCONFIG:status.upgradesysconfigs.version'
+ kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version'
```
* 再次查看节点的配置的版本确认节点是否配置完成(NODESTATUS恢复为idle)
```shell
- kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADESYSCONFIG:status.upgradesysconfigs.version'
+ kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version'
```
-* 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的相应字段进行相应修改。
+* 如果后续需要再次配置,与上面相同对 upgrade_v1alpha1_os.yaml 的相应字段进行相应修改。
#### 回退指导
* 回退场景
- * 虚拟机无法正常启动时,需要退回到上一可以启动的版本时进行回退操作,仅支持手动回退容器 OS 。
- * 虚拟机能够正常启动并且进入系统,需要将当前版本退回到老版本时进行回退操作,支持工具回退(类似升级方式)和手动回退,建议使用工具回退。
- * 配置出现错误,节点状态陷入config时,可以回退至上一个配置版本以恢复节点至idle状态。
- **注意**:在配置新版本时,出现错误前已经配置的参数无法回退。
+ * 虚拟机无法正常启动时,可在grub启动项页面手动切换启动项,使系统回退至上一版本(即手动回退)。
+ * 虚拟机能够正常启动并且进入系统时,支持工具回退和手动回退,建议使用工具回退。
+ * 工具回退有两种方式:
+ 1. rollback模式直接回退至上一版本。
+ 2. upgrade模式重新升级至上一版本
* 手动回退指导
- * 手动重启虚拟机,选择第二启动项进行回退,手动回退仅支持回退到本次升级之前的版本。
+
+ * 手动重启虚拟机,进入启动项页面后,选择第二启动项进行回退,手动回退仅支持回退到上一个版本。
* 工具回退指导
* 回退至任意版本
- * 修改 OS 的cr实例的YAML 配置文件(例如 upgrade_v1alpha1_os.yaml),设置相应字段为期望回退的老版本镜像信息。类别OS来自于安装和部署章节创建的CRD对象,字段说明及示例请见上一节升级指导。
+ * 修改 OS 的cr实例的YAML 配置文件(例如 upgrade_v1alpha1_os.yaml),设置相应字段为期望回退的老版本镜像信息。类别OS来自于安装和部署章节创建的CRD对象,字段说明及示例请见上一节升级指导。
+
* YAML修改完成后执行更新命令,在集群中更新定制对象后,节点会根据配置的字段信息进行回退
```shell
@@ -444,13 +516,13 @@
sysconfigs:
version: previous config version
configs:
- - model: kernel.systcl
+ - model: kernel.sysctl
contents:
- key: kernel param key1
value: kernel param value1
- key: kernel param key2
value: kernel param value2
- - model: kernel.systcl.persist
+ - model: kernel.sysctl.persist
configpath: persist file path
contents:
- key: kernel param key3
@@ -467,23 +539,21 @@
* 查看节点容器 OS 版本(回退OS版本)或节点config版本&节点状态为idle(回退config版本),确认回退是否成功。
```shell
- kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage'
-
- kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADESYSCONFIG:status.upgradesysconfigs.version'
+ kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version'
```
-#### Admin容器
+## Admin容器镜像制作、部署和使用
KubeOS提供一个分离的包含sshd服务和hostshell工具的Admin容器,来帮助管理员在必要情况下登录KubeOS,其中的sshd服务由[sysmaster](https://gitee.com/openeuler/sysmaster)/systemd拉起。Admin容器部署后用户可通过ssh连接到节点的Admin容器,进入Admin容器后执行hostshell命令获取host的root shell。
-##### 部署方法
+### admin容器镜像制作
-以sysmaster为例,根据系统版本和架构,获取对应的sysmaster RPM包,如获取openEuler-22.03-LTS-aarch64版本的[sysmaster](https://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/aarch64/Packages/)到scripts/admin-container目录下。
+以sysmaster为例,根据系统版本和架构,获取对应的sysmaster RPM包,如获取openEuler-22.03-LTS-SP1-aarch64版本的[sysmaster](https://repo.openeuler.org/openEuler-22.03-LTS-SP1/update/aarch64/Packages/)到scripts/admin-container目录下。
-**修改**admin-container目录下的Dockerfile,指定sysmaster RPM包的路径,其中的openeuler-22.03-lts可在[openEuler Repo](https://repo.openeuler.org/openEuler-22.03-LTS-SP2/docker_img)下载。
+修改admin-container目录下的Dockerfile,指定sysmaster RPM包的路径,其中的openeuler-22.03-lts-sp1可在[openEuler Repo](https://repo.openeuler.org/openEuler-22.03-LTS-SP1/docker_img)下载。
```Dockerfile
-FROM openeuler-22.03-lts
+FROM openeuler-22.03-lts-sp1
RUN yum -y install openssh-clients util-linux
@@ -514,7 +584,9 @@ bash -x kbimg.sh create admin-image -f admin-container/Dockerfile -d your_imageR
docker push your_imageRepository/admin_imageName:version
```
-在master节点上部署Admin容器,需要提供ssh公钥来免密登录,**修改**并应用如下示例yaml文件:
+### admin容器部署
+
+在master节点上部署Admin容器,需要提供ssh公钥来免密登录,修改并应用如下示例yaml文件:
```yaml
apiVersion: v1
@@ -583,6 +655,8 @@ spec:
control-plane: admin-container-sysmaster
```
+### admin容器使用
+
ssh到Admin容器,然后执行hostshell命令进入host root shell, 如:
```shell
@@ -590,7 +664,7 @@ ssh -p your-exposed-port root@your.worker.node.ip
hostshell
```
-##### hostshell
+#### hostshell说明
为了保证KubeOS的轻便性,许多工具或命令没有安装在KubeOS内。因此,用户可以在制作Admin容器时,将期望使用的二进制文件放在容器内的如/usr/bin目录下。hostshell工具在执行时会将容器下的/usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin路径添加到host root shell的环境变量。
@@ -605,11 +679,10 @@ hostshell
#### kernel Settings
-* kenerl.sysctl: 设置内核参数,key/value 表示内核参数的 key/value, 示例如下:
-
+* kenerl.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下:
```yaml
configs:
- - model: kernel.systcl
+ - model: kernel.sysctl
contents:
- key: user.max_user_namespaces
value: 16384
@@ -617,12 +690,10 @@ hostshell
value: 0
operation: delete
```
-
-* kernel.sysctl.persist: 设置持久化内核参数,key/value 表示内核参数的 key/value, configpath为配置修改/新建的文件路径,如不指定configpath默认修改/etc/sysctl.conf
-
+* kenerl.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下:
```yaml
configs:
- - model: kernel.systcl.persist
+ - model: kernel.sysctl.persist
configpath : /etc/persist.conf
contents:
- key: user.max_user_namespaces
@@ -637,22 +708,38 @@ hostshell
* grub.cmdline: 设置grub.cfg文件中的内核引导参数,该行参数在grub.cfg文件中类似如下示例:
```shell
- linux /boot/vmlinuz root=UUID=5b1aaf5d-5b25-4e4b-a0d3-3d4c8d2e6a6e ro consoleblank=600 console=tty0 console=ttyS0,115200n8 selinux=1 panic=3
- ```
+ linux /boot/vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3
+ ```
- key/value 表示如上示例中内核引导参数的 key=value。
- **注意:** 当该参数有多个等号,如root=UUID=some-uuid时,配置时的key为第一个等号前的所有字符,value为第一个等号后的所有字符。
- 配置方法示例如下:
+* KubeOS使用双分区,grub.cmdline支持对当前分区或下一分区进行配置:
+
+ - grub.cmdline.current:对当前分区的启动项参数进行配置。
+ - grub.cmdline.next:对下一分区的启动项参数进行配置。
+
+* 注意:升级/回退前后的配置,始终基于升级/回退操作下发时的分区位置进行current/next的区分。假设当前分区为A分区,下发升级操作并在sysconfigs(升级重启后配置)中配置grub.cmdline.current,重启后进行配置时仍修改A分区对应的grub cmdline。
+
+* grub.cmdline.current/next支持“key=value”(value不能为空),也支持单key。若value中有“=”,例如“root=UUID=some-uuid”,key应设置为第一个“=”前的所有字符,value为第一个“=”后的所有字符。 配置方法示例如下:
```yaml
configs:
- - model: grub.cmdline
- contents:
- - key: selinux
- value: 0
- - key: root
- value: UUID=e4f1b0a0-590e-4c5f-9d8a-3a2c7b8e2d94
- - key: panic
- value: 3
- operation: delete
+ - model: grub.cmdline.current
+ contents:
+ - key: selinux
+ value: "0"
+ - key: root
+ value: UUID=e4f1b0a0-590e-4c5f-9d8a-3a2c7b8e2d94
+ - key: panic
+ value: "3"
+ operation: delete
+ - key: crash_kexec_post_notifiers
+ - model: grub.cmdline.next
+ contents:
+ - key: selinux
+ value: "0"
+ - key: root
+ value: UUID=e4f1b0a0-590e-4c5f-9d8a-3a2c7b8e2d94
+ - key: panic
+ value: "3"
+ operation: delete
+ - key: crash_kexec_post_notifiers
```