2.4. 替换 VMware 基础架构上的存储节点


先决条件

  • 确保将替换节点配置为与您替换的节点类似基础架构、资源和磁盘。
  • 您必须登录到 OpenShift Container Platform 集群。

流程

  1. 找出该节点,并获取您要替换的节点上的标签:

    $ oc get nodes --show-labels | grep <node_name>
    Copy to Clipboard Toggle word wrap
    <node_name>
    指定替换的节点的名称。
  2. 识别要替换的节点中运行的监控器 pod(若有)和 OSD:

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  3. 缩减上一步中标识的 pod 的部署:

    例如:

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

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

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
  6. 删除节点:

    $ oc delete node <node_name>
    Copy to Clipboard Toggle word wrap
  7. 登录到 VMware vSphere 并终止您已识别的虚拟机(VM)。
  8. 在带有所需基础架构的 VMware vSphere 上创建新虚拟机。请参阅基础架构要求
  9. 使用新虚拟机创建新的 OpenShift Container Platform worker 节点。
  10. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

    $ oc get csr
    Copy to Clipboard Toggle word wrap
  11. 批准新节点所需的所有 OpenShift Container Platform CSR:

    $ oc adm certificate approve <certificate_name>
    Copy to Clipboard Toggle word wrap
    <certificate_name>
    指定 CSR 的名称。
  12. 在 OpenShift Web 控制台中,点 Compute Nodes。确认新节点处于 Ready 状态。
  13. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage,然后点 Save
    使用命令行界面
    • 将 OpenShift Data Foundation 标签应用到新节点:
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    Copy to Clipboard Toggle word wrap
    <new_node_name>
    指定新节点的名称。
  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)
    Copy to Clipboard Toggle word wrap
    echo $local_storage_project
    Copy to Clipboard Toggle word wrap

    输出示例:

    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  15. 将新的 worker 节点添加到 localVolumeDiscoverylocalVolumeSet

    1. 更新 localVolumeDiscovery 定义,使其包含新节点,并删除故障节点:

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,删除了 server3.example.comnewnode.example.com 是新节点。

    2. 确定要编辑的 localVolumeSet

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

      输出示例:

      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    3. 更新 localVolumeSet 定义,使其包含新节点,并删除故障节点:

      # oc edit -n $local_storage_project localvolumeset localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,server3.example.com 已被删除,newnode.example.com 是新节点。

  16. 验证新的 localblock 持久性卷 (PV)是否可用:

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

    输出示例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
    Copy to Clipboard Toggle word wrap
  17. 进入 openshift-storage 项目:

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

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。

    您可以通过在命令中添加逗号分隔的 OSD ID,以移除多个 OSD,例如 FAILED_OSD_IDS=0,1,2

    FORCE_OSD_REMOVAL 值必须在有三个 OSD 的集群中更改为 true,或者有足够空间的集群在移除 OSD 后恢复所有这三个数据副本。

  19. 通过检查 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
  20. 确保 OSD 移除已完成。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    Copy to Clipboard Toggle word wrap

    输出示例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    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 --tail=-1
    Copy to Clipboard Toggle word wrap
  21. 识别与持久性卷声明 (PVC) 关联的持久性卷 (PV):

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    Copy to Clipboard Toggle word wrap

    输出示例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1
    Copy to Clipboard Toggle word wrap

    如果有一个 PV 处于 Released 状态,请删除它:

    # oc delete pv <persistent_volume>
    Copy to Clipboard Toggle word wrap

    例如:

    # oc delete pv local-pv-d6bf175b
    Copy to Clipboard Toggle word wrap

    输出示例:

    persistentvolume "local-pv-d9c5cbd6" deleted
    Copy to Clipboard Toggle word wrap
  22. 确定 crashcollector pod 部署:

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap

    如果有现有的 crashcollector pod 部署,请删除它:

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap
  23. 删除 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 数据基础容器集是否都处于 Running 状态。

    确保创建了新的 incremental mon,且处于 Running 状态:

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

    输出示例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s
    Copy to Clipboard Toggle word wrap

    OSD 和监控 pod 可能需要几分钟才能进入 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. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
      $ chroot /host
      Copy to Clipboard Toggle word wrap
    2. 显示可用块设备列表:

      $ lsblk
      Copy to Clipboard Toggle word wrap

      检查一个或多个 ocs-deviceset 名称旁的 crypt 关键字。

  6. 如果验证步骤失败,请联系红帽支持团队

先决条件

  • 确保将替换节点配置为与您替换的节点类似基础架构、资源和磁盘。
  • 您必须登录到 OpenShift Container Platform 集群。

流程

  1. 登录 OpenShift Web 控制台,再点 Compute Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 获取节点上的标签:

    $ oc get nodes --show-labels | grep <node_name>
    Copy to Clipboard Toggle word wrap
    <node_name>
    指定替换的节点的名称。
  4. 识别在节点上运行的 mon(若有)和对象存储设备 (OSD) pod:

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

    例如:

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    Copy to Clipboard Toggle word wrap
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    Copy to Clipboard Toggle word wrap
    $ 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-emptydir-data=true --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. 向节点物理地添加新设备。
  14. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage,然后点 Save
    使用命令行界面
    • 将 OpenShift Data Foundation 标签应用到新节点:
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    Copy to Clipboard Toggle word wrap
    <new_node_name>
    指定新节点的名称。
  15. 识别安装 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)
    Copy to Clipboard Toggle word wrap
    echo $local_storage_project
    Copy to Clipboard Toggle word wrap

    输出示例:

    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  16. 将新的 worker 节点添加到 localVolumeDiscoverylocalVolumeSet

    1. 更新 localVolumeDiscovery 定义,使其包含新节点并删除失败的节点。

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,删除了 server3.example.comnewnode.example.com 是新节点。

    2. 确定您需要编辑的 localVolumeSet

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

      输出示例:

      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    3. 更新 localVolumeSet 定义,使其包含新节点并删除失败的节点:

      # oc edit -n $local_storage_project localvolumeset localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,删除了 server3.example.comnewnode.example.com 是新节点。

  17. 验证新的 localblock 持久性卷 (PV)是否可用:

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

    输出示例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
    Copy to Clipboard Toggle word wrap
  18. 进入 openshift-storage 项目:

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

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。

    您可以通过在命令中添加逗号分隔的 OSD ID,以移除多个 OSD,例如 FAILED_OSD_IDS=0,1,2

    FORCE_OSD_REMOVAL 值必须在有三个 OSD 的集群中更改为 true,或者有足够空间的集群在移除 OSD 后恢复所有这三个数据副本。

  20. 通过检查 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
  21. 确保 OSD 移除已完成。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    Copy to Clipboard Toggle word wrap

    输出示例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    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 --tail=-1
    Copy to Clipboard Toggle word wrap
  22. 识别与持久性卷声明(PVC)关联的 PV:

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    Copy to Clipboard Toggle word wrap

    输出示例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1
    Copy to Clipboard Toggle word wrap

    如果有一个 PV 处于 Released 状态,请删除它:

    # oc delete pv <persistent_volume>
    Copy to Clipboard Toggle word wrap

    例如:

    # oc delete pv local-pv-d6bf175b
    Copy to Clipboard Toggle word wrap

    输出示例:

    persistentvolume "local-pv-d9c5cbd6" deleted
    Copy to Clipboard Toggle word wrap
  23. 确定 crashcollector pod 部署:

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap

    如果有现有的 crashcollector pod 部署,请删除它:

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap
  24. 删除 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 数据基础容器集是否都处于 Running 状态。

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

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

    输出示例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s
    Copy to Clipboard Toggle word wrap

    OSD 和监控 pod 可能需要几分钟才能进入 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. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
      $ chroot /host
      Copy to Clipboard Toggle word wrap
    2. 显示可用块设备列表:

      $ lsblk
      Copy to Clipboard Toggle word wrap

      检查一个或多个 ocs-deviceset 名称旁的 crypt 关键字。

  6. 如果验证步骤失败,请联系红帽支持团队

先决条件

  • 确保将替换节点配置为与您替换的节点类似基础架构、资源和磁盘。
  • 您必须登录到 OpenShift Container Platform 集群。

流程

  1. 找出该节点,并获取您要替换的节点上的标签:

    $ oc get nodes --show-labels | grep <node_name>
    Copy to Clipboard Toggle word wrap
    <node_name>
    指定替换的节点的名称。
  2. 识别要替换的节点中运行的监控器 pod(若有)和 OSD:

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  3. 缩减上一步中标识的 pod 的部署:

    例如:

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

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  5. 删除处于 Terminating 状态的 pod:

    $ oc get pods -A -o wide | grep -i <node_name> |  awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2  " --grace-period=0 " " --force ")}'
    Copy to Clipboard Toggle word wrap
  6. 排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
  7. 删除节点:

    $ oc delete node <node_name>
    Copy to Clipboard Toggle word wrap
  8. 登录到 VMware vSphere 并终止您已识别的虚拟机(VM)。
  9. 在带有所需基础架构的 VMware vSphere 上创建新虚拟机。请参阅基础架构要求
  10. 使用新虚拟机创建新的 OpenShift Container Platform worker 节点。
  11. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

    $ oc get csr
    Copy to Clipboard Toggle word wrap
  12. 批准新节点所需的所有 OpenShift Container Platform CSR:

    $ oc adm certificate approve <certificate_name>
    Copy to Clipboard Toggle word wrap
    <certificate_name>
    指定 CSR 的名称。
  13. 在 OpenShift Web 控制台中,点 Compute Nodes。确认新节点处于 Ready 状态。
  14. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage,然后点 Save
    使用命令行界面
    • 将 OpenShift Data Foundation 标签应用到新节点:
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
    Copy to Clipboard Toggle word wrap
    <new_node_name>
    指定新节点的名称。
  15. 识别安装 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)
    Copy to Clipboard Toggle word wrap
    echo $local_storage_project
    Copy to Clipboard Toggle word wrap

    输出示例:

    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  16. 将新的 worker 节点添加到 localVolumeDiscoverylocalVolumeSet

    1. 更新 localVolumeDiscovery 定义,使其包含新节点,并删除故障节点:

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,删除了 server3.example.comnewnode.example.com 是新节点。

    2. 确定要编辑的 localVolumeSet

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

      输出示例:

      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    3. 更新 localVolumeSet 定义,使其包含新节点,并删除故障节点:

      # oc edit -n $local_storage_project localvolumeset localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,server3.example.com 已被删除,newnode.example.com 是新节点。

  17. 验证新的 localblock 持久性卷 (PV)是否可用:

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

    输出示例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
    Copy to Clipboard Toggle word wrap
  18. 进入 openshift-storage 项目:

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

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。

    您可以通过在命令中添加逗号分隔的 OSD ID,以移除多个 OSD,例如 FAILED_OSD_IDS=0,1,2

    FORCE_OSD_REMOVAL 值必须在有三个 OSD 的集群中更改为 true,或者有足够空间的集群在移除 OSD 后恢复所有这三个数据副本。

  20. 通过检查 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
  21. 确保 OSD 移除已完成。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    Copy to Clipboard Toggle word wrap

    输出示例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    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 --tail=-1
    Copy to Clipboard Toggle word wrap
  22. 识别与持久性卷声明 (PVC) 关联的持久性卷 (PV):

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    Copy to Clipboard Toggle word wrap

    输出示例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1
    Copy to Clipboard Toggle word wrap

    如果有一个 PV 处于 Released 状态,请删除它:

    # oc delete pv <persistent_volume>
    Copy to Clipboard Toggle word wrap

    例如:

    # oc delete pv local-pv-d6bf175b
    Copy to Clipboard Toggle word wrap

    输出示例:

    persistentvolume "local-pv-d9c5cbd6" deleted
    Copy to Clipboard Toggle word wrap
  23. 确定 crashcollector pod 部署:

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap

    如果有现有的 crashcollector pod 部署,请删除它:

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
    Copy to Clipboard Toggle word wrap
  24. 删除 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 数据基础容器集是否都处于 Running 状态。

    确保创建了新的 incremental mon,且处于 Running 状态:

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

    输出示例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s
    Copy to Clipboard Toggle word wrap

    OSD 和监控 pod 可能需要几分钟才能进入 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. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
      $ chroot /host
      Copy to Clipboard Toggle word wrap
    2. 显示可用块设备列表:

      $ lsblk
      Copy to Clipboard Toggle word wrap

      检查一个或多个 ocs-deviceset 名称旁的 crypt 关键字。

  6. 如果验证步骤失败,请联系红帽支持团队

先决条件

  • 确保将替换节点配置为与您替换的节点类似基础架构、资源和磁盘。
  • 您必须登录到 OpenShift Container Platform 集群。

流程

  1. 登录 OpenShift Web 控制台,再点 Compute Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 获取节点上的标签:

    $ oc get nodes --show-labels | grep _<node_name>_
    Copy to Clipboard Toggle word wrap
    <node_name>
    指定替换的节点的名称。
  4. 识别在节点上运行的 mon(若有)和对象存储设备 (OSD) pod:

    $ oc get pods -n openshift-storage -o wide | grep -i _<node_name>_
    Copy to Clipboard Toggle word wrap
  5. 缩减上一步中标识的 pod 的部署:

    例如:

    $ oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    Copy to Clipboard Toggle word wrap
    $ oc scale deployment rook-ceph-osd-0 --replicas=0 -n openshift-storage
    Copy to Clipboard Toggle word wrap
    $ 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. 删除处于 Terminating 状态的 pod:

    $ oc get pods -A -o wide | grep -i _<node_name>_ |  awk '{if ($4 == "Terminating") system ("oc -n " $1 " delete pods " $2  " --grace-period=0 " " --force ")}'
    Copy to Clipboard Toggle word wrap
  8. 排空节点:

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

    重要

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

  13. 在 OpenShift Web 控制台中,点 Compute Nodes。确认新节点处于 Ready 状态。
  14. 向节点物理地添加新设备。
  15. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage,然后点 Save
    使用命令行界面
    • 将 OpenShift Data Foundation 标签应用到新节点:
    $ oc label node _<new_node_name>_ cluster.ocs.openshift.io/openshift-storage=""
    Copy to Clipboard Toggle word wrap
    <new_node_name>
    指定新节点的名称。
  16. 识别安装 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)
    Copy to Clipboard Toggle word wrap
    echo $local_storage_project
    Copy to Clipboard Toggle word wrap

    输出示例:

    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  17. 将新的 worker 节点添加到 localVolumeDiscoverylocalVolumeSet

    1. 更新 localVolumeDiscovery 定义,使其包含新节点,并删除故障节点:

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - **newnode.example.com**
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,server3.example.com 已被删除,newnode.example.com 是新节点。

    2. 确定您需要编辑的 localVolumeSet

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

      输出示例:

      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    3. 更新 localVolumeSet 定义,使其包含新节点并删除失败的节点:

      # oc edit -n $local_storage_project localvolumeset localblock
      Copy to Clipboard Toggle word wrap

      输出示例:

      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - **newnode.example.com**
      [...]
      Copy to Clipboard Toggle word wrap

      记住在退出编辑器之前进行保存。

      在本例中,server3.example.com 已被删除,newnode.example.com 是新节点。

  18. 验证新的 localblock PV 是否可用:

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

    输出示例:

    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
    Copy to Clipboard Toggle word wrap
  19. 进入 openshift-storage 项目:

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

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    是 pod 名称中紧接在 rook-ceph-osd 前缀后面的整数。

    您可以通过在命令中添加逗号分隔的 OSD ID,以移除多个 OSD,例如 FAILED_OSD_IDS=0,1,2

    FORCE_OSD_REMOVAL 值必须在有三个 OSD 的集群中更改为 true,或者有足够空间的集群在移除 OSD 后恢复所有这三个数据副本。

  21. 通过检查 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
  22. 确保 OSD 移除已完成。

    $ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    Copy to Clipboard Toggle word wrap

    输出示例:

    2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    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 --tail=-1
    Copy to Clipboard Toggle word wrap
  23. 识别与持久性卷声明(PVC)关联的 PV:

    # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    Copy to Clipboard Toggle word wrap

    输出示例:

    local-pv-d6bf175b  1490Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  compute-1
    Copy to Clipboard Toggle word wrap

    如果有一个 PV 处于 Released 状态,请删除它:

    # oc delete pv _<persistent_volume>_
    Copy to Clipboard Toggle word wrap

    例如:

    # oc delete pv local-pv-d6bf175b
    Copy to Clipboard Toggle word wrap

    输出示例:

    persistentvolume "local-pv-d9c5cbd6" deleted
    Copy to Clipboard Toggle word wrap
  24. 确定 crashcollector pod 部署:

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=_<failed_node_name>_ -n openshift-storage
    Copy to Clipboard Toggle word wrap

    如果有现有的 crashcollector pod 部署,请删除它:

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=_<failed_node_name>_ -n openshift-storage
    Copy to Clipboard Toggle word wrap
  25. 删除 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 数据基础容器集是否都处于 Running 状态。

    确保创建了新的 incremental mon,且处于 Running 状态:

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

    输出示例:

    rook-ceph-mon-a-cd575c89b-b6k66         2/2     Running
    0          38m
    rook-ceph-mon-b-6776bc469b-tzzt8        2/2     Running
    0          38m
    rook-ceph-mon-d-5ff5d488b5-7v8xh        2/2     Running
    0          4m8s
    Copy to Clipboard Toggle word wrap

    OSD 和监控 pod 可能需要几分钟才能进入 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. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
      $ chroot /host
      Copy to Clipboard Toggle word wrap
    2. 显示可用块设备列表:

      $ lsblk
      Copy to Clipboard Toggle word wrap

      检查一个或多个 ocs-deviceset 名称旁的 crypt 关键字。

  6. 如果验证步骤失败,请联系红帽支持团队
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat