迁移到新的操作系统
经典 VPC
完成以下步骤,将工作节点迁移到新的操作系统。
从集群版本 4.18 开始,Red Hat Enterprise Linux CoreOS (RHCOS) 为默认操作系统,RHEL 工作节点在该版本中被弃用。 对 RHEL 工作节点的支持随着 4.21 版本的发布而终止。 尽快将集群迁移到使用 RHCOS 工作节点的集群。
里程碑 | 描述 |
---|---|
4.18 释放:2025 年 5 月 23 日 | 从集群版本 4.18 开始,Red Hat Enterprise Linux CoreOS (RHCOS) 为默认操作系统,RHEL 工作节点在该版本中被弃用。 4.18 版本中仍提供 RHEL Worker,仅用于完成向 RHCOS Worker 的迁移。 |
4.21 释放 | 群集版本 4.21 仅支持 RHCOS 工作节点。 在更新到 4.21 版本之前,将 RHEL 9 工作节点迁移到 RHCOS。 |
根据您的使用情况,迁移到 RHCOS 的步骤有所不同。 查看以下链接,了解适用于您的使用案例的步骤。
- 将工作节点迁移到 RHCOS
- 大多数情况下,请按照以下步骤操作。
- 将 GPU 工作节点迁移到 RHCOS
- 如果有 GPU 工作节点,请按照以下步骤迁移到 RHCOS。
寻找 Terraform 步骤? 有关更多信息,请参阅本博文,了解如何使用 Terraform 迁移到 RHCOS。
将工作节点迁移到 RHCOS
完成以下步骤,将工作节点迁移到 RHCOS。
要迁移到 RHCOS,必须配置一个新的工作池,然后删除以前的 RHEL 工作池。 新工人池必须与前一个工人池位于同一区域。
第 1 步:升级群集主服务器
运行以下命令更新主控程序
ibmcloud ks cluster master update --cluster <clusterNameOrID> --version 4.18_openshift
步骤 2:创建新的 RHCOS 工人池
- 确保指定
RHCOS
作为新池的--operating-system
。 - 确保使用
--size-per-zone
选项指定的节点数与 RHEL 工人池每个区域的工人数一致。 要列出工人池的区域和每个区域的工人数量,请运行ibmcloud oc worker-pool get --worker-pool WORKER_POOL --cluster CLUSTER
。 - 如果您享有 Cloud Pak 权利,请确保包含
--entitlement ocp_entitled
选项。
-
运行
ibmcloud oc worker-pool create
命令创建新的 Worker 池。VPC:创建 RHCOS 工人池的示例命令。 有关
worker pool create vpc-gen2
命令的更多信息,请参阅 CLI 参考以 了解命令详情。 在 VPC 集群中添加工作节点。ibmcloud oc worker-pool create vpc-gen2 --name <worker_pool_name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_workers_per_zone> --operating-system RHCOS [--entitlement ocp_entitled]
Satellite:创建 RHCOS 工人池的示例命令。 请注意,对于 Satellite 群集,您必须先 将主机连接到您的位置,然后才能创建 Worker 池。
ibmcloud oc worker-pool create satellite --cluster CLUSTER --host-label "os=RHCOS" --name NAME --size-per-zone SIZE --operating-system RHCOS --zone ZONE [--label LABEL]
-
确认工人池已创建,并记下工人池 ID。
ibmcloud oc worker-pool ls --cluster <cluster_name_or_ID>
示例输出
Name ID Flavor OS Workers my_workerpool aaaaa1a11a1aa1aaaaa111aa11 b3c.4x16.encrypted REDHAT_8_64 0
-
在工人池中添加一个或多个区。 添加区域时,会将使用
--size-per-zone
选项指定的工作节点数量添加到区域中。 这些工作节点运行 RHCOS 操作系统。 建议添加到 RHCOS 工人池中的区段与添加到要替换的 RHEL 工人池中的区段相匹配。 要查看附加到工人池的区段,请运行ibmcloud oc worker-pool zones --worker-pool WORKER_POOL --cluster CLUSTER
。 如果您添加的区域与 RHEL Worker Pool 的区域不匹配,请确保将工作负载转移到新区域不会对其造成影响。 请注意,跨区不支持文件或块存储。
第 3 步:向 RHCOS 工人池添加工人节点
请参阅 将区域添加到 VPC 集群中的工作池。
步骤 4:迁移工作负载
如果您使用软件定义存储 (SDS) 解决方案(如 OpenShift Data Foundation 或 Portworx ),请更新您的存储配置以包含新的工作节点,并在移除 RHEL 工作节点之前验证您的工作负载。
有关重新安排工作负载的更多信息,请参阅 Kubernetes 文档中的 “安全排出 Node 或 Red Hat OpenShift 文档中的 “了解如何撤离节点上的 pod”。
-
通过封锁节点和删除单个 pod 来迁移每个 pod。
oc adm cordon no/<nodeName> oc delete po -n <namespace> <podName>
-
通过排空节点,按 Node 进行迁移。 有关更多信息,请参阅 安全排空节点。
-
删除整个 RHEL 工人池,按工人池进行迁移。
ibmcloud ks worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
步骤 5:删除 RHEL 工作节点
删除包含 RHEL 工人的工人池。
考虑缩小 RHEL 工人池的规模,并在移除前将其保留几天。 这样,如果您的工作负载在迁移过程中出现中断,您就可以轻松地重新扩展工人池。 在确定工作负载稳定并正常运行后,就可以安全地移除 RHEL Worker 池了。
- 列出工人池,并记下要删除的工人池名称。
ibmcloud oc worker-pool ls --cluster CLUSTER
- 运行命令删除工人池。
ibmcloud oc worker-pool rm --worker-pool WORKER_POOL --cluster CLUSTER
可选步骤 5:卸载并重新安装 Object Storage 插件
如果在群集中使用 COS 插件,从 RHEL 迁移到 RHCOS 后,必须卸载并重新安装,因为两个操作系统的 kube-driver
路径不同。 如果不这样做,可能会出现类似 Error: failed to mkdir /usr/libexec/kubernetes: mkdir /usr/libexec/kubernetes: read-only file system
的错误。
将 NVIDIA GPU 资源迁移到 RHCOS 工作节点
查看以下步骤,了解如何将 NVIDIA GPU 操作员资源从 RHEL 8 GPU 工作节点迁移到 RHCOS 工作节点。
NVIDIA GPU 运算器由以下资源组成:
gpu-feature-discovery
nvidia-container-toolkit-daemonset
nvidia-cuda-validator
nvidia-dcgm
nvidia-dcgm-exporter
nvidia-device-plugin-daemonset
nvidia-driver-daemonset
nvidia-node-status-exporter
nvidia-operator-validator
人们感兴趣的主要成分是 nvidia-driver-daemonset
。 该组件负责将 GPU 驱动程序安装到 GPU 工作节点中。 在针对 RHEL 8 和 RHCOS 工作节点时,这些驱动程序的安装方式不同。
NVIDIA GPU 操作员的官方声明:Kubernetes 集群中运行 GPU 工作负载的所有工作节点或节点组必须运行相同的操作系统版本,才能使用 NVIDIA GPU 驱动程序容器。 另外,如果在节点上预先安装 NVIDIA GPU 驱动程序,则可以运行不同的操作系统。 更多信息,请参阅 安装 NVIDIA GPU 操作员。
NVIDIA GPU 操作员无法同时管理不同工作节点操作系统上的驱动程序安装。 这一限制意味着,如果 GPU 驱动程序的安装完全由 NVIDIA GPU 操作员管理,那么在更换工作节点操作系统时,需要对驱动程序的安装进行全面迁移。
- 将带有 RHEL 8 工作节点的 VPC 上的 Red Hat OpenShift on IBM Cloud 4.17 版本迁移到带有 RHCOS 工作节点的 4.18 版本。
- 4.17 版本不支持 RHCOS 工作节点。
- 4.17 版本支持 RHEL 8 和 RHEL 9(适用例外情况)。
- 4.18 版本不支持 RHEL 8 工作节点。
- 版本仅支持 RHCOS 和 RHEL 9。
- NVIDIA GPU 操作员不支持 RHEL 9 操作系统。
完成以下步骤,将 NVIDIA GPU 运算符驱动程序安装从 RHEL 8 迁移到 RHCOS 工作节点。 本示例具体介绍了以下群集配置的迁移步骤:
初始环境详情
- Red Hat OpenShift on IBM Cloud 4.17 VPC 集群
- RHEL 8 工作节点,使用 NVIDIA GPU 版本
- NVIDIA 已安装 GPU 操作员
- NVIDIA 已安装 GPU 操作员 ClusterPolicy
- 操作符、ClusterPolicy, 和操作数已准备就绪
- 获取
nvidia-gpu-operator
的详细信息。
示例输出oc get po -n nvidia-gpu-operator -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-ng7zn 1/1 Running 0 6m6s 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 45h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 6m6s 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 2m28s 172.23.145.236 10.240.0.15 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 6m7s 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 6m6s 172.23.145.172 10.240.0.15 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 6m6s 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-mjqls 1/1 Running 0 7m1s 172.23.145.145 10.240.0.15 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 7m16s 172.23.145.235 10.240.0.15 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 6m7s 172.23.145.153 10.240.0.15 <none> <none>
- 获取
gpu-cluster-policy
的详细信息,并确保它是ready
。
示例输出oc get clusterpolicies.nvidia.com gpu-cluster-policy
NAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z
第 1 步:更新群集主控程序
运行以下命令更新主控程序
ibmcloud oc cluster master update --cluster <clusterNameOrID> --version 4.18_openshift
此时,不要将工人节点升级到 4.18。 目前,请将您的 RHEL 8 Worker 保留在 4.17 上。
第 2 步:创建 RHCOS 群集工作池
-
运行以下命令创建 RHCOS 工人池。
ibmcloud oc worker-pool create vpc-gen2 \ --cluster <clusterNameOrID> \ --name <workerPoolName> \ --flavor <workerNodeFlavor> \ --size-per-zone <sizePerZoneCount> \ --operating-system RHCOS
不要在 RHCOS 工人池中添加区域。 这个工人库里不应该有工人。
第 3 步:为 RHCOS 工人池添加工人池标签
在 RHCOS 工人池中添加以下标签。
nvidia.com/gpu.deploy.operands=false
.如需了解更多信息,请参阅 阻止在某些节点上安装操作数nvidia.com/gpu.deploy.driver=false
.如需了解更多信息,请参阅“防止在某些节点上安装 NVIDIA GPU 驱动程序”
将标签添加到工人池后,节点标签就可以在工人节点可用于集群之前存在。 这样可以确保 NVIDIA GPU 资源不会从一开始就被自动调度。 如果在无法安装驱动程序的工作节点上调度 NVIDA GPU 资源,则会降低 ClusterPolicy 资源的状态。 由于 NVIDIA GPU 操作员被配置为使用 RHEL 8 安装方法,因此还无法在 RHCOS 工作节点上安装驱动程序。
运行以下命令将标签添加到工人池。
ibmcloud oc worker-pool label set \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--label nvidia.com/gpu.deploy.operands=false \
--label nvidia.com/gpu.deploy.driver=false
第 4 步:向群集添加 RHCOS 工作节点
为群集增加容量,以便迁移工作负载。 将区添加到工作者池会触发工作者节点开始配置并加入群集。 请注意,NVIDIA GPU 资源尚未部署到 RHCOS 工作节点上。
ibmcloud oc zone add vpc-gen2 \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--subnet-id <vpcSubnetID> \
--zone <vpcZone>
此时,群集中的 RHCOS 工作节点可用,可以开始迁移。
第 5 步:将 RHEL 8 工作节点上的驱动程序安装程序更改为非托管型
在 RHEL 8 工作节点上添加 nvidia.com/gpu.deploy.driver=false
标签。 此标签会从 RHEL 8 Worker 中取消对现有驱动程序安装 pod 的调度。 驱动程序不能卸载。 其他操作数(包括设备插件)仍保留在 RHEL 8 工作人员中。 ClusterPolicy
状态保持就绪。 由于驱动程序仍在安装,设备插件仍在运行,因此 GPU 工作负载仍可正常工作。
-
将
nvidia.com/gpu.deploy.driver=false
添加到 RHEL 8 工作节点。给单个工作节点贴标签
oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=false"
标记整个工人池:
ibmcloud oc worker-pool label set \ --cluster <clusterNameOrID> \ --worker-pool <workerPoolNameOrID> \ --label nvidia.com/gpu.deploy.driver=false
-
列出豆荚,确认标签。
oc get po -n nvidia-gpu-operator -o wide
示例输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-ng7zn 1/1 Running 0 4h27m 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 2d2h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 4h27m 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 4h24m 172.23.145.236 10.240.0.15 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 4h27m 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 4h27m 172.23.145.172 10.240.0.15 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 4h27m 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-mjqls 1/1 Terminating 0 4h28m 172.23.145.145 10.240.0.15 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 4h28m 172.23.145.235 10.240.0.15 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 4h27m 172.23.145.153 10.240.0.15 <none> <none>
-
确认
gpu-cluster-policy
是ready
。oc get clusterpolicies.nvidia.com gpu-cluster-policy
示例输出
NAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z
第 6 步:为 RHCOS 工作节点安排驱动程序安装程序和其他操作数
将 nvidia.com/gpu.deploy.driver=true
和 nvidia.com/gpu.deploy.operands=true
添加到您的 RHCOS 工人中。
添加这些标签会尝试将驱动程序安装程序、设备插件和其他操作安排到 RHCOS 工作节点。 由于驱动程序安装失败,大多数 pod 处于 init
状态。 驱动程序安装程序失败,因为它试图使用 RHEL 8 方法安装驱动程序。
运行 label nodes
命令添加标签。
给单个工作节点贴标签
oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=true"
oc label nodes <nodeName> "nvidia.com/gpu.deploy.operands=true"
标记整个工人池:
ibmcloud oc worker-pool label set \
--cluster <clusterNameOrID> \
--worker-pool <workerPoolNameOrID> \
--label nvidia.com/gpu.deploy.driver=true
添加标签后,继续下一步。
第 7 步:将驱动程序安装程序从 RHEL 8 转换为 RHCOS 安装方法
删除 nvidia-driver-installer
DaemonSet。 DaemonSet 专为 RHEL 8 而设,已不再需要。 GPU 操作员对账并检测到集群中存在一个 RHCOS 工作节点。 GPU 操作员重新创建驱动程序安装程序 DaemonSet,,但现在使用的是基于 OpenShift Driver Toolkit 的 RHCOS 安装方法。
-
删除
nvidia-driver-installer
DaemonSet。 删除 DaemonSet, 后,不要添加或重新加载任何 RHEL 8 GPU Worker。oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
-
列出 pod 并确认 GPU 驱动程序已安装在 RHCOS 工作节点上,其余操作数为
ready
。oc get po -n nvidia-gpu-operator -o wide
示例输出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-h4bhx 1/1 Running 0 18m 172.23.137.119 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> gpu-feature-discovery-ng7zn 1/1 Running 0 4h58m 172.23.145.152 10.240.0.15 <none> <none> gpu-operator-678b489684-7zgkq 1/1 Running 0 2d2h 172.23.145.135 10.240.0.15 <none> <none> nvidia-container-toolkit-daemonset-79j86 1/1 Running 0 18m 172.23.137.115 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-container-toolkit-daemonset-j4dzs 1/1 Running 0 4h58m 172.23.145.143 10.240.0.15 <none> <none> nvidia-cuda-validator-l44mz 0/1 Completed 0 4h55m 172.23.145.236 10.240.0.15 <none> <none> nvidia-cuda-validator-xgscz 0/1 Completed 0 15m 172.23.137.121 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-dcgm-7sfvn 1/1 Running 0 4h58m 172.23.145.180 10.240.0.15 <none> <none> nvidia-dcgm-9rpnz 1/1 Running 0 18m 172.23.137.117 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-dcgm-exporter-s5k48 1/1 Running 0 4h58m 172.23.145.172 10.240.0.15 <none> <none> nvidia-dcgm-exporter-x8vlc 1/1 Running 2 (14m ago) 18m 172.23.137.116 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-device-plugin-daemonset-7g5hz 1/1 Running 0 18m 172.23.137.120 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-device-plugin-daemonset-xhds2 1/1 Running 0 4h58m 172.23.145.191 10.240.0.15 <none> <none> nvidia-driver-daemonset-416.94.202502260030-0-dkcmh 2/2 Running 0 19m 172.23.137.107 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-node-status-exporter-5kvs4 1/1 Running 0 5h 172.23.145.235 10.240.0.15 <none> <none> nvidia-node-status-exporter-94v9f 1/1 Running 0 19m 172.23.137.110 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-operator-validator-4wk6z 1/1 Running 0 18m 172.23.137.118 test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8 <none> <none> nvidia-operator-validator-pz7wm 1/1 Running 0 4h58m 172.23.145.153 10.240.0.15 <none> <none>
-
确认
gpu-cluster-policy
已准备就绪。oc get clusterpolicies.nvidia.com gpu-cluster-policy
示例输出
NAME STATUS AGE gpu-cluster-policy ready 2025-03-07T03:07:00Z
-
描述您的节点并确认可分配的 GPU。
oc describe no
示例输出
... Capacity: nvidia.com/gpu: 1 ... Allocatable: nvidia.com/gpu: 1
第 8 步:将依赖 GPU 的工作负载迁移到 RHCOS 工作节点上
现在,RHCOS GPU 工作节点已安装 GPU 驱动程序并可进行调度,请将依赖 GPU 的工作负载迁移到 RHCOS 工作节点。
-
通过封锁节点和删除单个 pod 来迁移每个 pod。
oc adm cordon no/<nodeName> oc delete po -n <namespace> <podName>
-
通过排空节点,按 Node 进行迁移。 有关更多信息,请参阅 安全排空节点。
-
删除整个 RHEL 工人池,按工人池进行迁移。
ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
第 9 步:从 RHCOS 工人池中删除标签
删除上一步中添加的工人池标签。 删除这些标签可确保之后配置的新 RHCOS 工作节点不会带有这些标签,并且 NVIDIA GPU 组件会自动安装。
第 10 步缩减或删除 RHEL 8 工人池
至此,NVIDIA GPU 驱动程序的迁移工作完成。 您可以缩减或删除 RHEL Worker 池。
ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
迁移到 Red Hat Enterprise Linux 9
对于 RHEL 9,“/tmp
目录是一个单独的分区,其中设置了”nosuid
、“noexec
和”nodev
选项。 如果您的应用程序安装到并运行 "/tmp
目录下的脚本或二进制文件,它们可能会失败。 更新应用程序,使用“/var/tmp
目录而不是”/tmp
目录运行临时脚本或二进制文件。
cgroup
的默认实现是 cgroup
v2。 RHEL 9 不支持 cgroup
v1。 请查看 Kubernetes 迁移文档,了解 cgroup
v2,并确认您的应用程序完全支持 cgroup
v2。 已知旧版本的 Java 存在一些问题,可能会导致工作负载内存不足(OOM)。
-
查看工作池操作系统,找出需要迁移的工作池。
ibmcloud ks worker-pools -c CLUSTER
-
指定工人池的
RHEL_9_64
版本。ibmcloud oc worker-pool operating-system set --cluster CLUSTER --worker-pool POOL --operating-system RHEL_9_64
-
对经典群集运行
ibmcloud oc worker update
,对 VPC 群集运行ibmcloud oc worker replace
,更新工人池中的每个工人节点。确保在更新或更换相关工作节点时,有足够的工作节点支持工作负载。 有关更多信息,请参阅 更新 VPC 工作节点 或 更新传统工作节点。
更新经典工作节点的示例命令。
ibmcloud oc worker update --cluster CLUSTER --worker WORKER1_ID [--worker WORKER2_ID]
替换 VPC 工作节点的示例命令。
ibmcloud oc worker replace --cluster CLUSTER --worker WORKER_ID
-
获取工人库和工人的详细信息。 在输出中,请确认您的工作节点运行的是
RHEL_9_64
操作系统。获取工人库的详细信息。
ibmcloud oc worker-pools -c CLUSTER
获取工作程序节点的详细信息。
ibmcloud oc worker get --cluster CLUSTER --worker WORKER_NODE_ID