2.2. 替换 IBM Z 或 LinuxONE 基础架构中的存储节点


您可以选择以下步骤之一来替换存储节点:

2.2.1. 替换 IBM Z 或 LinuxONE 基础架构上的操作节点

使用这个流程替换 IBM zSystem 或 LinuxONE 基础架构上的操作节点。

流程

  1. 识别节点,并在要替换的节点上获取标签。记录机架标签。

    $ oc get nodes --show-labels | grep <node_name>
  2. 识别要替换的节点中运行的 mon (如果有)和对象存储设备(OSD)pod。

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

    例如:

    $ 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
  4. 将节点标记为不可调度。

    $ oc adm cordon <node_name>
  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 ")}'
  6. 排空节点。

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
  7. 删除节点。

    $ oc delete node <node_name>
  8. 获取一个新的 IBM zSystem 存储节点作为替换。
  9. 检查与处于 Pending 状态的 OpenShift Data Foundation 相关的证书签名请求 (CSR):

    $ oc get csr
  10. 批准新节点所需的所有 OpenShift Data Foundation CSR:

    $ oc adm certificate approve <Certificate_Name>
  11. 在 OpenShift Web 控制台中点 Compute Nodes,确认新节点是否处于 Ready 状态。
  12. 使用以下任一方法之一将 openshift-storage 标签应用到新节点:

    从用户界面
    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=""
  13. 将新的 worker 节点添加到 localVolumeDiscoverylocalVolumeSet

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

      # oc edit -n local-storage-project localvolumediscovery auto-discover-devices
      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

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

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

    2. 决定要编辑的 localVolumeSet

      在以下命令中,将 local-storage-project 替换为您的本地存储项目的名称。默认项目名称是 OpenShift Data Foundation 4.6 及之后的版本中的 openshift-local-storage。之前的版本默认使用 local-storage

      # oc get -n local-storage-project localvolumeset
      NAME          AGE
      localblock   25h
    3. 更新 localVolumeSet 定义,使其包含新节点并删除失败的节点。

      # oc edit -n local-storage-project localvolumeset localblock
      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - server1.example.com
                  - server2.example.com
                  #- server3.example.com
                  - newnode.example.com
      [...]

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

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

  14. 验证新的 localblock PV 是否可用。

    $ oc get pv | grep localblock
              CAPA- ACCESS RECLAIM                                STORAGE
    NAME      CITY  MODES  POLICY  STATUS     CLAIM               CLASS       AGE
    local-pv- 931Gi  RWO   Delete  Bound      openshift-storage/  localblock  25h
    3e8964d3                                  ocs-deviceset-2-0
                                              -79j94
    local-pv- 931Gi  RWO   Delete  Bound      openshift-storage/  localblock  25h
    414755e0                                  ocs-deviceset-1-0
                                              -959rp
    local-pv- 931Gi RWO Delete Available localblock 3m24s b481410
    local-pv- 931Gi  RWO   Delete  Bound      openshift-storage/  localblock  25h
    d9c5cbd6                                  ocs-deviceset-0-0
                                              -nvs68
  15. 更改到 openshift-storage 项目。

    $ oc project openshift-storage
  16. 从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。

    1. 根据需要识别 PVC,我们需要删除与该特定 PVC 关联的 PV。

      $ osd_id_to_remove=1
      $ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc

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

      输出示例:

      ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmc
          ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmc

      在本例中,PVC 名称为 ocs-deviceset-localblock-0-data-0-g2mmc

    2. 从集群移除出现故障的 OSD。

      $ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} |oc create -f -

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

      警告

      这一步会导致 OSD 完全从集群中移除。确保提供了 osd_id_to_remove 的正确值。

  17. 通过检查 ocs-osd-removal pod 的状态,验证 OSD 是否已成功移除。

    状态为 Completed,确认 OSD 移除作业已成功。

    # oc get pod -l job-name=ocs-osd-removal-osd_id_to_remove -n openshift-storage
    注意

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

    # oc logs -l job-name=ocs-osd-removal-osd_id_to_remove -n openshift-storage --tail=-1

    可能需要手动清理移除的 OSD,如下所示:

    ceph osd crush remove osd.osd_id_to_remove
    ceph osd rm osd_id_to_remove
    ceph auth del osd.osd_id_to_remove
    ceph osd crush rm osd_id_to_remove
  18. 删除与故障节点关联的 PV。

    1. 标识与 PVC 关联的 PV。

      PVC 名称必须与从集群中删除故障 OSD 时获取的名称相同。

      # oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
      local-pv-5c9b8982  500Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-localblock-0-data-0-g2mmc  localblock  24h  worker-0
    2. 如果有一个 PV 处于 Released 状态,请将其删除。

      # oc delete pv <persistent-volume>

      例如:

      # oc delete pv local-pv-5c9b8982
      persistentvolume "local-pv-5c9b8982" deleted
  19. 确定 crashcollector pod 部署。

    $ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage

    如果已存在 crashcollector pod 部署,请将其删除。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
  20. 删除 ocs-osd-removal 任务。

    # oc delete job ocs-osd-removal-${osd_id_to_remove}

    输出示例:

    job.batch "ocs-osd-removal-0" deleted

验证步骤

  1. 验证输出中是否存在新节点:

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他所需的 OpenShift Data Foundation pod 是否处于 Running 状态。
  4. 验证新的对象存储设备(OSD)pod 是否在替换节点上运行:

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. 可选:如果在集群中启用了数据加密,请验证新 OSD 设备是否已加密。

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

    1. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      $ chroot /host
    2. 显示可用块设备列表:

      $ lsblk

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

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

2.2.2. 在 IBM Z 或 LinuxONE 基础架构中替换失败的节点

流程

  1. 登录 OpenShift Web 控制台,再点击 Compute Nodes
  2. 确定有故障的节点,再单击其 Machine Name
  3. 点击 Actions → Edit Annotations,然后点 Add More
  4. 添加 machine.openshift.io/exclude-node-draining 并点 Save
  5. Actions Delete Machine,然后点 Delete
  6. 会自动创建新机器。等待新机器启动。

    重要

    此活动可能至少需要 5 到 10 分钟或更多。Ceph 周期内生成的 Ceph 错误是临时的,当您标记新节点并且可以正常工作时,会自动解决。

  7. Compute Nodes。确认新节点处于 Ready 状态。
  8. 使用以下任一方法之一将 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=""
    <new_node_name>
    指定新节点的名称。

验证步骤

  1. 验证输出中是否存在新节点:

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他所需的 OpenShift Data Foundation pod 是否处于 Running 状态。
  4. 验证新的对象存储设备(OSD)pod 是否在替换节点上运行:

    $ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
  5. 可选:如果在集群中启用了数据加密,请验证新 OSD 设备是否已加密。

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

    1. 创建 debug pod 并为一个或多个所选主机打开 chroot 环境:

      $ oc debug node/<node_name>
      $ chroot /host
    2. 显示可用块设备列表:

      $ lsblk

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.