鲲鹏社区首页
中文
注册
开发者
容器OS升级用户指南(一)——安装与部署

容器OS升级用户指南(一)——安装与部署

openEuler

发表于 2025/12/09

0

认识容器 OS 升级

概述

在云场景中,容器和 kubernetes 的应用越来越广泛。然而,当前对容器和 OS 进行独立管理的方式,往往面临功能冗余、两套调度系统协同困难的问题。另外,OS 的版本管理比较困难,相同版本的 OS 在使用过程中会各自安装、更新、删除软件包,一段时间后 OS 版本变得不一致,导致版本分裂,并且 OS 可能和业务紧耦合,造成大版本升级等比较困难。为了应对上述问题,openEuler 推出了基于openEuler的容器 OS 升级工具。

容器 OS 针对业务以容器的形式运行的场景,专门设计的一种轻量级操作系统。基于openEuler的容器 OS 升级工具将容器 OS 作为组件接入 kubernetes,使容器 OS 和业务处于同等地位,通过 kubernetes 集群统一管理容器和容器 OS,实现一套系统管理容器和OS。

openEuler 容器 OS 升级工具通过 kubernetes operator 扩展机制控制容器 OS 的升级流程,对容器 OS 进行整体升级,从而实现 OS 管理器和业务协同,该升级方式会在容器 OS 升级前,将业务迁移到其他非升级节点,减少 OS 升级、配置过程中对业务的影响。该升级方式是对容器 OS 进行原子升级,使 OS 一直向预想的状态同步,保证集群里的 OS 版本一致,避免版本分裂问题。

架构介绍

容器 OS 升级架构

图1 容器 OS 升级架构

如图所示,容器 OS 主要包含三个组件 os-operator,os-proxy 和 os-agent 。os-operator 和 os-proxy 运行在容器中,部署在 kubernetes 集群内;os-agent 不属于集群,直接作为进程运行在 Worker Node 中。

  • os-operator:全局的容器 OS 管理器,持续查看所有节点的容器 OS 版本信息,并根据用户配置的信息控制同时进行升级的节点个数,并标记准备升级的节点。
  • os-proxy:单节点的 OS 管理器,持续查看当前节点的容器 OS 版本信息。如果当前节点被 os-operator 标记为准备升级的节点后,锁定节点并驱逐 pod,转发升级信息到 os-agent 。
  • os-agent:接收来自 proxy 的信息,从 OSImage Server 下载用于更新的容器 OS 镜像,然后进行升级并重启节点。

容器 OS 文件系统

图 2 容器 OS 文件系统布局

如图所示,容器 OS 包含四个分区:

  • boot 分区:grub2文件分区
  • Persist 分区:用于存放持久性用户数据,容器 OS 升级时,该分区的数据也会保留。
  • 两个 root 分区:容器 OS 采用双分区模式,将 root 分区划分为 rootA 和 rootB。假定初始化时,系统运行在 rootA 分区上,当进行系统更新时,会下载新系统到 rootB 分区,grub会有两个启动项分别为A,B,将 grub 默认启动项设置为B,最后会重启虚拟机。虚拟机启动后容器 OS 将运行在刚更新过的 rootB 分区上。

容器OS的root文件系统为只读,用户的持久化数据存放在Persist持久化数据分区。

安装与部署

软硬件要求

硬件要求

  • 当前仅支持 x86和 AArch64 架构

软件要求

  • 操作系统:openEuler 25.03

环境准备

  • 安装 openEuler 系统,安装方法参考《安装指南
  • 安装 qemu-img,bc,parted,tar,yum,docker,dosfstools

安装容器OS升级工具

安装容器 OS 升级工具的操作步骤如下:

  1. 配置 openEuler 25.03 yum 源:
  2. 使用 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来构建镜像 ,Dockfile编写请注意以下几项: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镜像制作指导》。
  • 制作容器OS 镜像需要使用 root 权限。
  • 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库。
  • 使用默认 rpmlist 制作的容器OS虚拟机镜像,默认保存在调用kbimg路径下的scripts-auto文件夹内,该分区至少有 25GiB 的剩余磁盘空间。
  • 制作容器 OS 镜像时,不支持用户自定义配置挂载文件。

操作步骤

制作容器OS 虚拟机镜像使用 kbimg,命令详情请见《容器OS镜像制作指导》。

制作容器OS 虚拟机镜像的步骤如下:

  • 进入执行目录:
cd /opt/kubeOS/scripts
  • 执行 kbming 制作容器OS,参考命令如下:
./kbimg create -f ./kbimg.toml vm-img

容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts/scripts-auto 目录下生成:raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2560MiB,持久化分区<15GB。qcow2 格式的系统镜像 system.qcow2。可用于升级的根文件系统 kubeos.tar。制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景,不支持 x86 架构的虚拟机使用 legacy 启动模式启动。

部署CRD,operator和proxy

注意事项

  • 请先部署 Kubernetes 集群,部署方法参考《openEuler 25.03 Kubernetes 集群部署指南》。
  • 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见《openEuler 25.03 虚拟化用户指南》,Master节点目前不支持容器 OS 升级,请用openEuler 24.03-LTS-SP1部署Master节点。
  • 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。
  • operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为daemonset。
  • 尽量部署好 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


本页内容