搜索

第 13 章 替换存储节点

download PDF

13.1. 在 Red Hat Virtualization 安装程序置备的基础架构中替换操作节点

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

先决条件

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

流程

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

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

    $ oc get pods -n openshift-storage -o wide | grep -i <node_name>
  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
  6. 将节点标记为不可调度。

    $ oc adm cordon <node_name>
  7. 排空节点。

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

    重要

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

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

    从用户界面
    1. 对于新节点,点击 Action Menu(⋮)→ Edit Labels
    2. 添加 cluster.ocs.openshift.io/openshift-storage 并点 Save
    使用命令行界面
    • 执行以下命令,将 OpenShift Container Storage 标签应用到新节点:
    $ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
  14. 将 worker 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。

    1. 决定要编辑的 localVolumeSet

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

      # oc get -n local-storage-project localvolumeset
      NAME          AGE
      localblock   25h
    2. 将新节点添加到 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
      [...]

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

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

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

    $ oc project openshift-storage
  17. 从集群移除出现故障的 OSD。

    $ oc process -n openshift-storage ocs-osd-removal \
    -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
  18. 通过检查 ocs-osd-removal pod 的状态,验证 OSD 是否已成功移除。

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

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

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

    # oc logs -l job-name=ocs-osd-removal-failed-osd_id -n openshift-storage --tail=-1
  19. 删除与故障节点关联的 PV。

    1. 标识与 PVC 关联的 PV。

      # oc get -n openshift-storage pvc claim-name

      例如:

      # oc get -n openshift-storage pvc ocs-deviceset-0-0-nvs68
                                                  ACCESS STORAGE
      NAME           STATUS    VOLUME    CAPACITY MODES  CLASS      AGE
      ocs-deviceset- Released  local-pv- 931Gi    RWO    localblock 24h
      0-0-nvs68                d9c5cbd6
    2. 删除 PV:

      # oc delete pv <persistent-volume>

      例如:

      # oc delete pv local-pv-d9c5cbd6
      persistentvolume "local-pv-d9c5cbd6" deleted
  20. 删除 crashcollector pod 部署。

    $ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
  21. 通过重启 rook-ceph-operator 来强制 Operator 协调,从而部署新的 OSD。

    # oc get -n openshift-storage pod -l app=rook-ceph-operator

    输出示例:

    NAME                                  READY   STATUS    RESTARTS   AGE
    rook-ceph-operator-6f74fb5bff-2d982   1/1     Running   0          1d20h
    1. 删除 rook-ceph-operator

      # oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982

      输出示例:

      pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
    2. 验证 rook-ceph-operator pod 是否已重启。

      # oc get -n openshift-storage pod -l app=rook-ceph-operator

      输出示例:

      NAME                                  READY   STATUS    RESTARTS   AGE
      rook-ceph-operator-6f74fb5bff-7mvrq   1/1     Running   0          66s

      创建新 OSD 和 mon 可能需要几分钟时间,然后再重新启动 operator。

  22. 删除 ocs-osd-removal 任务。

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

    输出示例:

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

验证步骤

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

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

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

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

    $ oc get pod -n openshift-storage | grep mon

    输出示例:

    rook-ceph-mon-c-64556f7659-c2ngc                                  1/1     Running     0          6h14m
    rook-ceph-mon-d-7c8b74dc4d-tt6hd                                  1/1     Running     0          4h24m
    rook-ceph-mon-e-57fb8c657-wg5f2                                   1/1     Running     0          162m

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

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

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

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

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

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.