IBM Cloud Docs
迁移到新的操作系统

迁移到新的操作系统

经典 VPC

完成以下步骤,将工作节点迁移到新的操作系统。

从集群版本 4.18 开始,Red Hat Enterprise Linux CoreOS (RHCOS) 为默认操作系统,RHEL 工作节点在该版本中被弃用。 对 RHEL 工作节点的支持随着 4.21 版本的发布而终止。 尽快将集群迁移到使用 RHCOS 工作节点的集群。

RHEL 淘汰时间表
里程碑 描述
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 选项。
  1. 运行 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]
    
  2. 确认工人池已创建,并记下工人池 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
    
  3. 在工人池中添加一个或多个区。 添加区域时,会将使用 --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 池了。

  1. 列出工人池,并记下要删除的工人池名称。
    ibmcloud oc worker-pool ls --cluster CLUSTER
    
  2. 运行命令删除工人池。
    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, 和操作数已准备就绪
  1. 获取 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>
    
  2. 获取 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 群集工作池

  1. 运行以下命令创建 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 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 工作负载仍可正常工作。

  1. 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
    
  2. 列出豆荚,确认标签。

    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>
    
  3. 确认 gpu-cluster-policyready

    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=truenvidia.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 安装方法。

  1. 删除 nvidia-driver-installer DaemonSet。 删除 DaemonSet, 后,不要添加或重新加载任何 RHEL 8 GPU Worker。

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. 列出 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>
    
  3. 确认 gpu-cluster-policy 已准备就绪。

    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    

    示例输出

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    
  4. 描述您的节点并确认可分配的 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)。

  1. 查看工作池操作系统,找出需要迁移的工作池。

    ibmcloud ks worker-pools -c CLUSTER
    
  2. 指定工人池的 RHEL_9_64 版本。

    ibmcloud oc worker-pool operating-system set --cluster CLUSTER --worker-pool POOL --operating-system RHEL_9_64
    
  3. 对经典群集运行 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
    
  4. 获取工人库和工人的详细信息。 在输出中,请确认您的工作节点运行的是 RHEL_9_64 操作系统。

    获取工人库的详细信息。

    ibmcloud oc worker-pools -c CLUSTER
    

    获取工作程序节点的详细信息。

    ibmcloud oc worker get --cluster CLUSTER --worker WORKER_NODE_ID