安装与部署
本章介绍如何安装和部署容器 OS 升级工具。
软硬件要求
硬件要求
- 当前仅支持 x86和 AArch64 架构
软件要求
- 操作系统:openEuler 22.03 LTS
环境准备
- 安装 openEuler 系统,安装方法参考《openEuler 22.03 LTS 安装指南》
- 安装 qemu-img,bc,parted,tar,yum,docker,dosfstools
安装容器OS升级工具
安装容器 OS 升级工具的操作步骤如下:
配置 yum 源:openEuler 22.03 LTS 和 openEuler 22.03 LTS EPOL
[openEuler22.03LTS] # openEuler 22.03 LTS 官方发布源 name=openEuler22.03 LTS baseurl=http://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/ enabled=1 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler
[Epol] # openEuler 22.03 LTS:Epol 官方发布源 name=Epol baseurl=http://repo.openeuler.org/openEuler-22.03-LTS/EPOL/main/$basearch/ enabled=1 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
使用 root 帐户安装容器 OS 升级工具:
# yum install KubeOS KubeOS-scripts -y
说明:
容器 OS 升级工具会安装在 /opt/kubeOS 目录下,包括os-operator,os-proxy,os-agent二进制,制作容器 OS 工具及相应配置文件 。
部署容器OS升级工具
容器OS升级工具安装完成后,需要对此进行配置部署,本章介绍如何配置和部署容器OS升级工具。
制作os-operator和os-proxy镜像
环境准备
使用 Docker 制作容器镜像,请先确保 Docker 已经安装和配置完成。
操作步骤
进入工作目录。
cd /opt/kubeOS
指定 proxy 的镜像仓库、镜像名及版本。
export IMG_PROXY=your_imageRepository/os-proxy_imageName:version
指定 operator 的镜像仓库、镜像名及版本。
export IMG_OPERATOR=your_imageRepository/os-operator_imageName:version
请用户自行编写Dockerfile来构建镜像 ,Dockerfile编写请注意以下几项
- os-operator和os-proxy镜像需要基于baseimage进行构建,请用户保证baseimage的安全性
- 需将os-operator和os-proxy二进制文件分别拷贝到对应的镜像中
- 请确保os-proxy镜像中os-proxy二进制文件属主和属组为root,文件权限为500
- 请确保os-operator镜像中os-operator二进制文件属主和属组为容器内运行os-operator进程的用户,文件权限为500
- os-operator和os-proxy的二进制文件在镜像内的位置和容器启动时运行的命令需与部署的yaml中指定的字段相对应。
Dockerfile示例如下
FROM your_baseimage COPY ./bin/proxy /proxy ENTRYPOINT ["/proxy"]
FROM your_baseimage COPY --chown=6552:6552 ./bin/operator /operator ENTRYPOINT ["/operator"]
Dockerfile也可以使用多阶段构建。
构建容器镜像(os-operator 和 os-proxy 镜像)。
# 指定proxy的Dockerfile地址 export DOCKERFILE_PROXY=your_dockerfile_proxy # 指定operator的Dockerfile路径 export DOCKERFILE_OPERATOR=your_dockerfile_operator # 镜像构建 docker build -t ${IMG_OPERATOR} -f ${DOCKERFILE_OPERATOR} . docker build -t ${IMG_PROXY} -f ${DOCKERFILE_PROXY} .
将容器镜像 push 到镜像仓库。
docker push ${IMG_OPERATOR} docker push ${IMG_PROXY}
制作容器OS镜像
注意事项
- 制作容器 OS 镜像需要使用 root 权限
- 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库
- 使用默认 rpmlist 制作的容器OS镜像,默认和制作工具保存在相同路径,该分区至少有 25GiB 的剩余磁盘空间
- 制作容器 OS 镜像时,不支持用户自定义配置挂载文件
操作步骤
制作容器OS的命令格式为:
generate.sh REPO_PATH VERSION AGENT_PATH ENCRYPTED_PASSWD
其中各参数含义为:
- REPO_PATH :repo 文件 路径
- AGENT_PATH:os-agent 二进制路径
VERSION :制作的容器 OS 镜像的版本
ENCRYPTED_PASSWD:容器 OS 镜像的 root 用户密码,加密后的带盐值的密码,可以用 openssl、kiwi 等命令生成
制作容器OS的步骤如下:
进入执行目录:
cd /opt/kubeOS/scripts
执行 generate.sh 制作容器 OS,参考命令如下:
bash generate.sh xx.repo v1 ../bin/os-agent '''$1$xyz$RdLyKTL32WEvK3lg8CXID0'''
其中 xx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。
容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成:
- raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2020MiB,持久化分区<16GB。
- qcow2 格式的系统镜像 system.qcow2。
- 可用于升级的根文件系统分区镜像 update.img 。
制作出来的容器 OS 镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景。
部署CRD、operator和proxy
注意事项
- 请先部署 Kubernetes 集群,部署方法参考《openEuler 22.03 LTS Kubernetes 集群部署指南》
- 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见《openEuler 22.03 LTS 虚拟化用户指南》,Master节点目前不支持容器 OS 升级,请用openEuler 22.03 LTS部署Master节点
- 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。
- operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为damonset
- 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等
操作步骤
准备 YAML 文件,包括用于部署 OS 的CRD、RBAC 机制、os- operator 和os- proxy 的 YAML 文件,可参考yaml-example。假设分别为 crd.yaml、rbac.yaml、manager.yaml 。
部署 CRD、RBAC、os-operator 和 os-proxy。假设 crd.yaml、rbac.yaml、manager.yaml 文件分别存放在当前目录的 config/crd、config/rbac、config/manager 目录下 ,参考命令如下:
kubectl apply -f config/crd kubectl apply -f config/rbac kubectl apply -f config/manager
部署完成后,执行以下命令,确认各个组件是否正常启动。如果所有组件的 STATUS 为 Running,说明组件已经正常启动。
kubectl get pods -A