替换节点


Red Hat OpenShift Data Foundation 4.9

有关如何安全替换 OpenShift Data Foundation 集群中的节点的说明。

摘要

本文档介绍如何安全地替换 Red Hat OpenShift Data Foundation 集群中的节点。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请告诉我们如何让它更好。提供反馈:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. Component 部分中,选择 文档
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

前言

对于 OpenShift Data Foundation,可以为操作节点主动执行节点替换,并为以下部署针对故障节点主动执行节点:

  • 对于 Amazon Web Services(AWS)

    • 用户置备的基础架构
    • 安装程序置备的基础架构
  • 对于 VMware

    • 用户置备的基础架构
    • 安装程序置备的基础架构
  • Red Hat Virtualization

    • 安装程序置备的基础架构
  • 对于 Microsoft Azure

    • 安装程序置备的基础架构
  • 用于本地存储设备

    • 裸机
    • VMware
    • Red Hat Virtualization
    • IBM Power
  • 有关以外部模式替换存储节点,请参阅 Red Hat Ceph Storage 文档

1.1. 在 AWS 上部署的 OpenShift Data Foundation

执行此流程替换 AWS 用户置备的基础架构上的操作节点。

先决条件

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

流程

  1. 确定需要替换的节点。
  2. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  4. 使用以下命令删除节点:

    $ oc delete nodes <node_name>
    Copy to Clipboard Toggle word wrap
  5. 使用所需基础架构创建新的 AWS 机器集。请参阅平台要求
  6. 使用新的 AWS 机器集创建新的 OpenShift Container Platform 节点。
  7. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

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

    $ oc adm certificate approve <Certificate_Name>
    Copy to Clipboard Toggle word wrap
  9. ComputeNodes,确认新节点是否处于 Ready 状态
  10. 将 OpenShift 数据基础标签应用到新节点。

    使用 Web 用户界面
    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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

使用这个流程替换 AWS 安装程序置备的基础架构(IPI)上的操作节点。

流程

  1. 登录 OpenShift Web 控制台并点击 ComputeNodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  5. ComputeMachines。搜索所需的机器。
  6. 除了所需的机器外,点击 Action 菜单(⋮)Delete Machine
  7. 单击 Delete 以确认删除机器。会自动创建新机器。
  8. 等待新机器启动并过渡到 Running 状态。

    重要

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

  9. ComputeNodes,确认新节点是否处于 Ready 状态
  10. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换在 OpenShift Data Foundation 的 AWS 用户置备的基础架构(UPI)上无法正常工作的故障节点。

先决条件

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

流程

  1. 识别需要替换节点的 AWS 机器集。
  2. 登录 AWS 并终止指定的 AWS 机器实例。
  3. 使用所需基础架构创建新的 AWS 机器集。查看平台要求.
  4. 使用新的 AWS 机器集创建新的 OpenShift Container Platform 节点。
  5. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

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

    $ oc adm certificate approve <Certificate_Name>
    Copy to Clipboard Toggle word wrap
  7. ComputeNodes,确认新节点是否处于 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=""
      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. WorkloadsPods,确认新节点上的以下 pod 处于 Running 状态

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换在 OpenShift Data Foundation 的 AWS 安装程序置备的基础架构 (IPI) 上无法正常工作的故障节点。

流程

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

    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  7. ComputeNodes,确认新节点是否处于 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=""
      Copy to Clipboard Toggle word wrap
  9. [可选]:如果没有自动删除失败的 AWS 实例,从 AWS 控制台终止实例。

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

1.2. 在 VMware 上部署的 OpenShift Data Foundation

执行此流程替换 VMware 用户置备的基础架构(UPI)上的操作节点。

先决条件

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

流程

  1. 确定需要替换的节点及其虚拟机。
  2. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  4. 使用以下命令删除节点:

    $ oc delete nodes <node_name>
    Copy to Clipboard Toggle word wrap
  5. 登录 vSphere 并终止标识的虚拟机。

    重要

    应当仅从清单中删除虚拟机,而不应从磁盘中删除虚拟机。

  6. 使用所需基础架构在 vSphere 上创建新虚拟机。请参阅平台要求
  7. 使用新虚拟机创建新的 OpenShift Container Platform worker 节点。
  8. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

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

    $ oc adm certificate approve <Certificate_Name>
    Copy to Clipboard Toggle word wrap
  10. ComputeNodes,确认新节点是否处于 Ready 状态
  11. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

使用这个流程替换 VMware 安装程序置备的基础架构(IPI)上的操作节点。

流程

  1. 登录 OpenShift Web 控制台并点击 ComputeNodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  5. ComputeMachines。搜索所需的机器。
  6. 除了所需的机器外,点击 Action 菜单(⋮)Delete Machine
  7. 单击 Delete 以确认删除机器。会自动创建新机器。
  8. 等待新机器启动并过渡到 Running 状态。

    重要

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

  9. ComputeNodes,确认新节点是否处于 Ready 状态
  10. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换 VMware 用户置备的基础架构(UPI)中的故障节点。

先决条件

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

流程

  1. 确定需要替换的节点及其虚拟机。
  2. 使用以下命令删除节点:

    $ oc delete nodes <node_name>
    Copy to Clipboard Toggle word wrap
  3. 登录 vSphere 并终止标识的虚拟机。

    重要

    应当仅从清单中删除虚拟机,而不应从磁盘中删除虚拟机。

  4. 使用所需基础架构在 vSphere 上创建新虚拟机。请参阅平台要求
  5. 使用新虚拟机创建新的 OpenShift Container Platform worker 节点。
  6. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

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

    $ oc adm certificate approve <Certificate_Name>
    Copy to Clipboard Toggle word wrap
  8. ComputeNodes,确认新节点是否处于 Ready 状态
  9. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换在 OpenShift Data Foundation 的 VMware 安装程序置备的基础架构(IPI)上无法正常工作的故障节点。

流程

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

    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  7. ComputeNodes,确认新节点是否处于 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=""
      Copy to Clipboard Toggle word wrap
  9. [可选]: 如果没有自动删除失败的虚拟机,请从 vSphere 终止虚拟机。

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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 Virtualization 安装程序置备的基础架构 (IPI) 上的操作节点。

流程

  1. 登陆到 OpenShift Web 控制台,点 Compute → Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  5. Compute → Machines。搜索所需的机器。
  6. 除了所需的机器外,点击 Action 菜单(⋮)→ Delete Machine
  7. 单击 Delete 以确认删除机器。会自动创建新机器。等待新机器启动并过渡到 Running 状态。

    重要

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

  8. Compute → Nodes,确认新节点是否处于 Ready 状态。
  9. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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 Virtualization 安装程序置备的基础架构(IPI)上无法正常工作的失败节点。

流程

  1. 登陆到 OpenShift Web 控制台,点 Compute → Nodes
  2. 确定出现故障的节点。记录其 Machine Name
  3. 登录到 Red Hat Virtualization 管理门户,并从出现故障的虚拟机中删除与 monOSD 关联的虚拟磁盘。

    此步骤是必需的,以便在虚拟机实例被删除时不会删除磁盘。

    重要

    删除磁盘时,请勿永久选择删除选项。

  4. OpenShift Web 控制台中,点 Compute → Machines。搜索所需的机器。
  5. Actions → Edit Annotations,然后点 Add More
  6. 添加 machine.openshift.io/exclude-node-draining 并点 Save
  7. Actions → Delete Machine,然后点 Delete

    新机器会自动创建,等待新机器启动。

    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  8. Compute → Nodes,确认新节点是否处于 Ready 状态。
  9. 使用以下任一方法之一将 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
  10. 可选:如果未自动删除失败的虚拟机,请从 Red Hat Virtualization 管理门户中删除虚拟机。

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

使用这个流程替换 Azure 安装程序置备的基础架构(IPI)上的操作节点。

流程

  1. 登录 OpenShift Web 控制台并点击 ComputeNodes
  2. 确定需要替换的节点。记录其 Machine Name
  3. 使用以下命令将节点标记为不可调度:

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap
  4. 使用以下命令排空节点:

    $ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  5. ComputeMachines。搜索所需的机器。
  6. 除了所需的机器外,点击 Action 菜单(⋮)Delete Machine
  7. 单击 Delete 以确认删除机器。会自动创建新机器。
  8. 等待新机器启动并过渡到 Running 状态。

    重要

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

  9. ComputeNodes,确认新节点是否处于 Ready 状态
  10. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换在 OpenShift Data Foundation 的 Azure 安装程序置备的基础架构 (IPI) 上无法正常工作的故障节点。

流程

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

    重要

    此活动可能需要至少 5 到 10 分钟或更长时间。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  7. ComputeNodes,确认新节点是否处于 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=""
      Copy to Clipboard Toggle word wrap
  9. [可选]:如果没有自动删除失败的 Azure 实例,从 Azure 控制台终止实例。

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

2.1. 在裸机基础架构中替换存储节点

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 确定要替换的节点上的 NODE 并获取标签。

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

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  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
    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. 获取具有所需基础架构的新裸机计算机。请参阅在裸机上安装集群

    重要

    有关如何在三节点 OpenShift 紧凑的裸机集群中安装 OpenShift Data Foundation 时如何替换 master 节点的详情,请参阅 OpenShift Container Platform 文档中的备份和恢复指南。

  8. 使用新的裸机机器创建新的 OpenShift Container Platform 节点。
  9. 检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):

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

    $ oc adm certificate approve <Certificate_Name>
    Copy to Clipboard Toggle word wrap
  11. 在 OpenShift Web 控制台中点 Compute → Nodes,确认新节点是否处于 Ready 状态。
  12. 使用以下任一方法之一将 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
  13. 识别安装 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
  14. 将新的 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    local-pv-551d950     512Gi    RWO    Delete  Available
    localblock     26s
    Copy to Clipboard Toggle word wrap
  16. 更改到 openshift-storage 项目。

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

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

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 true,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。

  18. 通过检查 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
  19. 确保 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
  20. 删除 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 确定要替换的节点上的 NODE 并获取标签。

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

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  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
    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. 获取具有所需基础架构的新裸机计算机。请参阅在裸机上安装集群

    重要

    有关如何在三节点 OpenShift 紧凑的裸机集群中安装 OpenShift Data Foundation 时如何替换 master 节点的详情,请参阅 OpenShift Container Platform 文档中的备份和恢复指南。

  9. 使用新的裸机机器创建新的 OpenShift Container Platform 节点。
  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
  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
  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 节点添加到 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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. 删除 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

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

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

流程

  1. 登录 OpenShift Web 控制台。
  2. ComputeNodes
  3. 确定需要替换的节点。记录其 Machine Name
  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
    重要

    此活动可能至少需要 5 到 10 分钟。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  6. ComputeMachines。搜索所需的机器。
  7. 除了所需的机器外,点击 Action 菜单(⋮)Delete Machine
  8. 单击 Delete 以确认删除机器。会自动创建新机器。
  9. 等待新计算机启动并过渡到 Running 状态。

    重要

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

  10. ComputeNodes,确认新节点是否处于 Ready 状态
  11. 使用以下任一方法之一将 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

验证步骤

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

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  3. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

执行此流程替换在 OpenShift Data Foundation 的 IBM Z 或 LinuxONE 基础架构上无法正常工作的故障节点。

流程

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

    重要

    此活动可能至少需要 5 到 10 分钟。这一期间内生成的 Ceph 错误是临时的,在新节点标上并正常运行时自动解决。

  7. ComputeNodes,确认新节点是否处于 Ready 状态
  8. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    使用 Web 用户界面
    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
  9. 执行以下命令并验证输出中是否存在新节点:

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

    • csi-cephfsplugin-*
    • csi-rbdplugin-*
  11. 验证所有其他必需的 OpenShift 数据基础容器集是否都处于 Running 状态。
  12. 验证新 OSD pod 是否在替换节点上运行。

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

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

    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
  14. 如果验证步骤失败,请联系红帽支持

2.3. 替换 IBM Power 基础架构上的存储节点

对于 OpenShift Data Foundation,可以主动执行节点替换节点,并为 IBM Power 相关部署主动执行节点。

先决条件

  • 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 4.9,且还没有创建 LocalVolumeDiscovery 对象,请按照由本地存储支持的集群的 Post-update 配置更改中所述的步骤进行操作。

流程

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

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

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

    例如:

    $ oc scale deployment rook-ceph-mon-a --replicas=0 -n openshift-storage
    $ oc scale deployment rook-ceph-osd-1 --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
  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. 获取具有所需基础架构的新 IBM Power 机器。请参阅在 IBM Power 上安装集群
  9. 使用新的 IBM Power 机器创建新的 OpenShift Container Platform 节点。
  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
  12. 在 OpenShift Web 控制台中点 ComputeNodes,确认新节点是否处于 Ready 状态。
  13. 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage 并点 Save
    使用命令行界面
    1. 执行以下命令,将 OpenShift Data Foundation 标签应用到新节点:
    $ 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 节点添加到 localVolumeDiscovery

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

      # oc edit -n $local_storage_project localvolumediscovery auto-discover-devices
      [...]
         nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  #- worker-0
                  - worker-1
                  - worker-2
                  - worker-3
      [...]
      Copy to Clipboard Toggle word wrap

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

      在上例中,worker-0 已被删除,worker-3 是新节点。

  16. 将新添加的 worker 节点添加到 localVolume。

    1. 决定要编辑哪些本地卷

      # oc get -n $local_storage_project localvolume
      NAME           AGE
      localblock    25h
      Copy to Clipboard Toggle word wrap
    2. 更新 localVolume 定义,使其包含新节点并删除失败的节点。

      # oc edit -n $local_storage_project localvolume localblock
      [...]
          nodeSelector:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  #- worker-0
                  - worker-1
                  - worker-2
                  - worker-3
      [...]
      Copy to Clipboard Toggle word wrap

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

      在上例中,worker-0 已被删除,worker-3 是新节点。

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

    $ oc get pv | grep localblock
    NAME              CAPACITY   ACCESSMODES RECLAIMPOLICY STATUS     CLAIM             STORAGECLASS                 AGE
    local-pv-3e8964d3    500Gi    RWO         Delete       Bound      ocs-deviceset-localblock-2-data-0-mdbg9  localblock     25h
    local-pv-414755e0    500Gi    RWO         Delete       Bound      ocs-deviceset-localblock-1-data-0-4cslf  localblock     25h
    local-pv-b481410    500Gi     RWO        Delete       Available                                            localblock     3m24s
    local-pv-5c9b8982    500Gi    RWO         Delete       Bound      ocs-deviceset-localblock-0-data-0-g2mmc  localblock     25h
    Copy to Clipboard Toggle word wrap
  18. 更改到 openshift-storage 项目。

    $ oc project openshift-storage
    Copy to Clipboard Toggle word wrap
  19. 从集群移除出现故障的 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
      Copy to Clipboard Toggle word wrap

      其中,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
      Copy to Clipboard Toggle word wrap

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

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

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

      在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 true,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。

      警告

      此步骤的结果是从集群中完全移除 OSD。确保提供了 osd_id_to_remove 的正确值。

  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. 删除与故障节点关联的 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
      Copy to Clipboard Toggle word wrap
    2. 如果有一个 PV 处于 Released 状态,请将其删除。

      # oc delete pv <persistent-volume>
      Copy to Clipboard Toggle word wrap

      例如:

      # oc delete pv local-pv-5c9b8982
      persistentvolume "local-pv-5c9b8982" 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. WorkloadsPods,确认新节点上的以下 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-b-74f6dc9dd6-4llzq                                   1/1     Running     0          6h14m
    rook-ceph-mon-c-74948755c-h7wtx                                    1/1     Running     0          4h24m
    rook-ceph-mon-d-598f69869b-4bv49                                   1/1     Running     0          162m
    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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

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

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 确定要替换的节点上的 NODE 并获取标签。

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

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  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
    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. 登录 vSphere 并终止标识的虚拟机。
  8. 使用所需基础架构在 VMware 上创建一个新虚拟机。请参阅支持的基础架构和平台
  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
  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
  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 节点添加到 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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. 删除 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 登录 OpenShift Web 控制台并点击 Compute → Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  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-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
  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)
    echo $local_storage_project
    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  16. 将新的 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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
    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
    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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 确定要替换的节点上的 NODE 并获取标签。

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

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
    Copy to Clipboard Toggle word wrap
  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
    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. 登录 vSphere 并终止标识的虚拟机。
  9. 使用所需基础架构在 VMware 上创建一个新虚拟机。请参阅支持的基础架构和平台
  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
  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
  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)
    echo $local_storage_project
    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  16. 将新的 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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. 删除 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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. 如果验证步骤失败,请联系红帽支持

先决条件

  • 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 登录 OpenShift Web 控制台并点击 Compute → Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  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. 删除处于 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
  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)
    echo $local_storage_project
    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  17. 将新的 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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
    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
    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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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 Virtualization 安装程序置备的基础架构 (IPI) 上的操作节点。

先决条件

  • 红帽建议为替换节点配置类似的基础架构、资源和磁盘,以用于被替换的节点。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 登录 OpenShift Web 控制台并点击 Compute → Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  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-emptydir-data=true --ignore-daemonsets
    Copy to Clipboard Toggle word wrap
  8. Compute → Machines。搜索所需的机器。
  9. 除了所需的机器外,点击 Action 菜单(⋮)→ Delete Machine
  10. 单击 Delete 以确认删除机器。会自动创建新机器。等待新计算机启动并过渡到 Running 状态。

    重要

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

  11. 在 OpenShift Web 控制台中点 ComputeNodes。确认新节点是否处于 Ready 状态。
  12. 物理向节点添加新设备。
  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
  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 节点添加到 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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>_ FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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
    local-pv-d6bf175b  512Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  server3.example.com
    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
    persistentvolume "local-pv-d6bf175b" 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 任务。

    # 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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 Virtualization 安装程序置备的基础架构(IPI)上无法正常工作的失败节点。

先决条件

  • 红帽建议为替换节点配置类似的基础架构、资源和磁盘,以用于被替换的节点。
  • 您必须登录 OpenShift Container Platform (RHOCP) 集群。
  • 如果您从以前的版本升级到 OpenShift Data Foundation 版本 4.8,且还没有创建 LocalVolumeDiscoveryLocalVolumeSet 对象,现在请按照本地存储支持的集群的更新后配置更改中所述的步骤进行。

流程

  1. 登录 OpenShift Web 控制台并点击 Compute → Nodes
  2. 确定需要替换的节点。记录其 Machine Name
  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. 删除处于 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 以确认删除机器。会自动创建新机器。等待新计算机启动并过渡到 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
  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)
    echo $local_storage_project
    openshift-local-storage
    Copy to Clipboard Toggle word wrap
  16. 将新的 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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

    2. 决定要编辑的 localVolumeSet

      # oc get -n $local_storage_project localvolumeset
      NAME          AGE
      localblock   25h
      Copy to Clipboard Toggle word wrap
    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
      [...]
      Copy to Clipboard Toggle word wrap

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

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

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

    $oc get pv | grep localblock | grep Available
    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>_ FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -
    Copy to Clipboard Toggle word wrap
    <failed_osd_id>

    rook-ceph-osd 前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如 FAILED_OSD_IDS=0,1,2

    在只有三个 OSD 的集群中,FORCE_OSD_REMOVAL 值必须更改为 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
    local-pv-d6bf175b  512Gi  RWO  Delete  Released  openshift-storage/ocs-deviceset-0-data-0-6c5pw  localblock  2d22h  server3.example.com
    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
    persistentvolume "local-pv-d6bf175b" 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 任务。

    # 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 Data Foundation pod 是否都处于 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 和 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. 创建调试 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