OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
13.2. 在 Red Hat Virtualization 安装程序置备的基础架构中替换失败的节点
当实例关闭时,Red Hat Virtualization 用于 OpenShift Container Storage 的临时存储可能会导致数据丢失。使用这个流程从 Red Hat Virtualization 平台上关闭的实例电源中恢复。
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
流程
-
登录 OpenShift Web 控制台并点击 Compute
Nodes。 - 确定需要替换的节点。记录它的机器名称。
获取要替换节点上的标签。
oc get nodes --show-labels | grep <node_name>
$ oc get nodes --show-labels | grep <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别要替换的节点中运行的 mon(若有)和 OSD。
oc get pods -n openshift-storage -o wide | grep -i <node_name>
$ oc get pods -n openshift-storage -o wide | grep -i <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 缩减上一步中确定的容器集部署。
例如:
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
$ 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 Copied! Toggle word wrap Toggle overflow 将节点标记为不可调度。
oc adm cordon <node_name>
$ oc adm cordon <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除处于 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 ")}'
$ 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 Copied! Toggle word wrap Toggle overflow 排空节点。
oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
$ oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
点 Compute
Machines。搜索所需的机器。 - 除了所需的机器外,点击 Action 菜单(⋮)→ Delete Machine。
- 单击 Delete 以确认删除机器。会自动创建新机器。
等待新计算机启动并过渡到 Running 状态。
重要此活动可能需要至少 5 到 10 分钟或更长时间。
-
在 OpenShift Web 控制台中点 Compute
Nodes。确认新节点是否处于 Ready 状态。 使用以下任一方法之一将 OpenShift Container Storage 标签应用到新节点:
- 从用户界面
- 对于新节点,点击 Action Menu(⋮)→ Edit Labels。
-
添加
cluster.ocs.openshift.io/openshift-storage
并点 Save。
- 使用命令行界面
- 执行以下命令,将 OpenShift Container Storage 标签应用到新节点:
oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
$ oc label node <new_node_name> cluster.ocs.openshift.io/openshift-storage=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 将新 worker 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。
将 worker 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。
决定要编辑的
localVolumeSet
。在以下命令中,将 local-storage-project 替换为您的本地存储项目的名称。在 OpenShift Container Storage 4.6 及更高版本中,默认项目名称为
openshift-local-storage
。之前的版本默认使用local-storage
。oc get -n local-storage-project localvolumeset
# oc get -n local-storage-project localvolumeset NAME AGE localblock 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新节点添加到
localVolumeSet
定义中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记住在退出编辑器之前进行保存。
验证新的
localblock
PV 是否可用。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群移除出现故障的 OSD。
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为
Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-failed-osd-id -n openshift-storage
# oc get pod -l job-name=ocs-osd-removal-failed-osd-id -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:oc logs -l job-name=ocs-osd-removal-failed-osd_id -n openshift-storage --tail=-1
# oc logs -l job-name=ocs-osd-removal-failed-osd_id -n openshift-storage --tail=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与故障节点关联的 PV。
标识与 PVC 关联的 PV。
oc get -n openshift-storage pvc claim-name
# oc get -n openshift-storage pvc claim-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get -n openshift-storage pvc ocs-deviceset-0-0-nvs68
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 PV:
oc delete pv <persistent-volume>
# oc delete pv <persistent-volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc delete pv local-pv-d9c5cbd6
# oc delete pv local-pv-d9c5cbd6 persistentvolume "local-pv-d9c5cbd6" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除
crashcollector
pod 部署。oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过重启
rook-ceph-operator
来强制 Operator 协调,从而部署新的 OSD。oc get -n openshift-storage pod -l app=rook-ceph-operator
# oc get -n openshift-storage pod -l app=rook-ceph-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-2d982 1/1 Running 0 1d20h
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-2d982 1/1 Running 0 1d20h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
rook-ceph-operator
。oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982
# oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
rook-ceph-operator
pod 是否已重启。oc get -n openshift-storage pod -l app=rook-ceph-operator
# oc get -n openshift-storage pod -l app=rook-ceph-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-7mvrq 1/1 Running 0 66s
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-7mvrq 1/1 Running 0 66s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新 OSD 和
mon
可能需要几分钟时间,然后再重新启动 operator。
删除 'ocs-osd-removal' 任务。
oc delete job ocs-osd-removal-${osd_id_to_remove}
# oc delete job ocs-osd-removal-${osd_id_to_remove}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-0" deleted
job.batch "ocs-osd-removal-0" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
执行以下命令并验证输出中是否存在新节点:
oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
$ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点 Workloads
Pods,确认新节点上的以下 pod 处于 Running
状态:-
csi-cephfsplugin-*
-
csi-rbdplugin-*
-
验证所有其他所需的 OpenShift Container Storage Pod 是否都处于 Running 状态。
确保创建了新的增量
mon
,并处于 Running 状态。oc get pod -n openshift-storage | grep mon
$ oc get pod -n openshift-storage | grep mon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD 和 Mon 可能需要几分钟才能进入
Running
状态。验证新 OSD pod 是否在替换节点上运行。
oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
$ oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果在集群中启用了数据加密,请验证新 OSD 设备是否已加密。
对于上一步中标识的每个新节点,请执行以下操作:
创建调试 pod,并为所选主机打开 chroot 环境。
oc debug node/<node name> chroot /host
$ oc debug node/<node name> $ chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 "lsblk" 并检查
ocs-deviceset
名旁边的 "crypt" 关键字。lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 如果验证步骤失败,请联系红帽支持。