2.3.2. 替换安装程序置备的基础架构中可正常运行的 Amazon EC2 节点


使用此流程替换 Amazon EC2 I3 安装程序置备的基础架构(IPI)上的操作节点。

重要

替换 Amazon EC2 I3 基础架构中的存储节点是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

先决条件

  • 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。

步骤

  1. 登录 OpenShift Web 控制台并点击 Compute Nodes
  2. 确定需要替换的节点。记录它的机器名称。
  3. 在要替换的节点上获取标签。

    $ oc get nodes --show-labels | grep <node_name>
    Copy to Clipboard Toggle word wrap
  4. 识别要替换的节点中运行的 mon(若有)和 OSD。

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  5. 缩减上一步中确定的容器集部署。

    例如:

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    $ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name>  --replicas=0 -n openshift-storage
    Copy to Clipboard Toggle word wrap
  6. 将节点标记为不可调度。

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  7. 排空节点。

    $ oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
  8. Compute Machines。搜索所需的机器。
  9. 除了所需的机器外,点击 Action 菜单(⋮)→ Delete Machine
  10. 单击 Delete 以确认删除机器。会自动创建新机器。
  11. 等待新计算机启动并过渡到 Running 状态。

    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。

  12. 在 OpenShift Web 控制台中点 Compute Nodes。确认新节点是否处于 Ready 状态。
  13. 使用以下任一方法之一将 OpenShift Container Storage 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage 并点 Save
    使用命令行界面
    • 执行以下命令,将 OpenShift Container Storage 标签应用到新节点:
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    Copy to Clipboard Toggle word wrap
  14. 识别安装 OpenShift 本地存储 Operator 的命名空间,并将其分配给 local_storage_project 变量:

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    Copy to Clipboard Toggle word wrap

    例如:

    $ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
    echo $local_storage_project
    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  15. 将新 worker 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。

    1. 将新磁盘条目添加到 LocalVolume CR。

      编辑 LocalVolume CR.您可以删除或注释掉失败的设备 /dev/disk/by-id/{id},再添加新的 /dev/disk/by-id/{id}

      $ oc get -n $local_storage_project localvolume
      Copy to Clipboard Toggle word wrap

      输出示例:

      NAME          AGE
      local-block   25h
      Copy to Clipboard Toggle word wrap
      $ oc edit -n $local_storage_project localvolume local-block
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
          storageClassDevices:
          - devicePaths:
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441494EC
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84FE3E9
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE4
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441464EP
        #   - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84F43E7
        #   - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE8
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS6F45C01D7E84FE3E9
            - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS636BC945B4ECB9AE4
            storageClassName: localblock
            volumeMode: Block
      [...]
      Copy to Clipboard Toggle word wrap

      确保在编辑 CR 后保存更改。

      您可以看到,这个 CR 中添加了以下两个新设备,使用 by-id。

      • nvme-Amazon_EC2_NVMe_Instance_Storage_AWS6F45C01D7E84FE3E9
      • nvme-Amazon_EC2_NVMe_Instance_Storage_AWS636BC945B4ECB9AE4
    2. 显示带有本地块的 PV。

      $ oc get pv | grep localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      local-pv-3646185e   2328Gi  RWO     Delete      Available                                               localblock  9s
      local-pv-3933e86    2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-2-1-v9jp4   localblock  5h1m
      local-pv-8176b2bf   2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-0-0-nvs68   localblock  5h1m
      local-pv-ab7cabb3   2328Gi  RWO     Delete      Available                                               localblock  9s
      local-pv-ac52e8a    2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-1-0-knrgr   localblock  5h1m
      local-pv-b7e6fd37   2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-2-0-rdm7m   localblock  5h1m
      local-pv-cb454338   2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-0-1-h9hfm   localblock  5h1m
      local-pv-da5e3175   2328Gi  RWO     Delete      Bound       openshift-storage/ocs-deviceset-1-1-g97lq   localblock  5h
      ...
      Copy to Clipboard Toggle word wrap
  16. 删除与故障节点关联的存储资源。

    1. 识别与要替换的 OSD 关联的 DeviceSet。

      $ osd_id_to_remove=0
      $ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
      Copy to Clipboard Toggle word wrap

      其中,osd_id_to_remove 是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。在本例中,部署名称为 rook-ceph-osd-0

      输出示例:

      ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68
      ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68
      Copy to Clipboard Toggle word wrap
    2. 标识与 PVC 关联的 PV。

      $ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
      Copy to Clipboard Toggle word wrap

      其中,xy、和 pvc-suffix 是之前步骤中标识的 DeviceSet 中的值。

      输出示例:

      NAME                      STATUS        VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      ocs-deviceset-0-0-nvs68   Bound   local-pv-8176b2bf   2328Gi      RWO            localblock     4h49m
      Copy to Clipboard Toggle word wrap

      在本例中,关联的 PV 是 local-pv-8176b2bf

    3. 更改到 openshift-storage 项目。

      $ oc project openshift-storage
      Copy to Clipboard Toggle word wrap
    4. 从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。

      $ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} | oc create -f -
      Copy to Clipboard Toggle word wrap
    5. 通过检查 ocs-osd-removal-job pod 的状态,验证 OSD 是否已成功移除。状态为 Completed,确认 OSD 移除作业已成功。

      # oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
      Copy to Clipboard Toggle word wrap
      注意

      如果 ocs-osd-removal-job 失败,且 pod 没有处于预期的 Completed 状态,请检查 pod 日志以获得进一步的调试。例如:

      # oc logs -l job-name=ocs-osd-removal-job -n openshift-storage
      Copy to Clipboard Toggle word wrap
    6. 删除在前面的步骤中标识的 PV。在本例中,PV 名称是 local-pv-8176b2bf

      $ oc delete pv local-pv-8176b2bf
      Copy to Clipboard Toggle word wrap

      输出示例:

      persistentvolume "local-pv-8176b2bf" deleted
      Copy to Clipboard Toggle word wrap
  17. 删除在上一步中确定的 crashcollector Pod 部署。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<old_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap
    1. 删除 rook-ceph-operator

      $ oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982
      Copy to Clipboard Toggle word wrap

      输出示例:

      pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
      Copy to Clipboard Toggle word wrap
    2. 验证 rook-ceph-operator pod 是否已重启。

      $ oc get -n openshift-storage pod -l app=rook-ceph-operator
      Copy to Clipboard Toggle word wrap

      输出示例:

      NAME                                  READY   STATUS    RESTARTS   AGE
      rook-ceph-operator-6f74fb5bff-7mvrq   1/1     Running   0          66s
      Copy to Clipboard Toggle word wrap

      在操作器启动后,创建新 OSD 可能需要几分钟。

  18. 删除 ocs-osd-removal-job

    # oc delete -n openshift-storage job ocs-osd-removal-job
    Copy to Clipboard Toggle word wrap

    输出示例:

    job.batch "ocs-osd-removal-job" deleted
    Copy to Clipboard Toggle word wrap

验证步骤

  1. 执行以下命令并验证输出中是否存在新节点:

    $ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
    Copy to Clipboard Toggle word wrap
  2. Workloads Pods,确认新节点上至少以下 pod 处于 Running 状态:

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他所需的 OpenShift Container Storage Pod 是否都处于 Running 状态。

    另外,确保新的增量 mon 已创建并处于 Running 状态。

    $ oc get pod -n openshift-storage | grep mon
    Copy to Clipboard Toggle word wrap

    输出示例:

    rook-ceph-mon-a-64556f7659-c2ngc    1/1     Running     0   5h1m
    rook-ceph-mon-b-7c8b74dc4d-tt6hd    1/1     Running     0   5h1m
    rook-ceph-mon-d-57fb8c657-wg5f2     1/1     Running     0   27m
    Copy to Clipboard Toggle word wrap

    OSD 和 mon 可能需要几分钟才能进入 Running 状态。

  4. 验证新 OSD pod 是否在替换节点上运行。

    $ oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
    Copy to Clipboard Toggle word wrap
  5. (可选)如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。

    1. 对于上一步中标识的每个新节点,请执行以下操作:

      1. 创建调试 pod,并为所选主机打开 chroot 环境。

        $ oc debug node/<node name>
        $ chroot /host
        Copy to Clipboard Toggle word wrap
      2. 运行 "lsblk" 并检查 ocs-deviceset 名旁边的 "crypt" 关键字。

        $ lsblk
        Copy to Clipboard Toggle word wrap
  6. 如果验证步骤失败,请联系红帽支持
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat