OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2.3. 替换 IBM Power 基础架构上的存储节点
对于 OpenShift Data Foundation,可以主动执行节点替换节点,并为 IBM Power 相关部署主动执行节点。
2.3.1. 替换 IBM Power 上的操作或失败的存储节点 复制链接链接已复制到粘贴板!
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
流程
识别节点,并在要替换的节点上获取标签。
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)pod。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-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
$ 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 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-emptydir-data=true --ignore-daemonsets
$ oc adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除节点。
oc delete node <node_name>
$ oc delete node <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 获取具有所需基础架构的新 IBM Power 机器。请参阅在 IBM Power 上安装集群。
- 使用新的 IBM Power 机器创建新的 OpenShift Container Platform 节点。
检查与处于
Pending
状态的 OpenShift Container Platform 相关的证书签名请求(CSR):oc get csr
$ oc get csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为新节点批准所有所需的 OpenShift Container Platform CSR:
oc adm certificate approve <Certificate_Name>
$ oc adm certificate approve <Certificate_Name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 OpenShift Web 控制台中点 Compute
Nodes,确认新节点是否处于 Ready 状态。 使用以下任一方法之一将 OpenShift Data Foundation 标签应用到新节点:
- 从用户界面
-
对于新节点,点击 Action Menu(⋮)
Edit Labels。 -
添加
cluster.ocs.openshift.io/openshift-storage
并点 Save。
-
对于新节点,点击 Action Menu(⋮)
- 使用命令行界面
- 执行以下命令,将 OpenShift Data Foundation 标签应用到新节点:
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
识别安装 OpenShift 本地存储 Operator 的命名空间,并将其分配给
local_storage_project
变量:local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
$ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local)
$ local_storage_project=$(oc get csv --all-namespaces | awk '{print $1}' | grep local) echo $local_storage_project openshift-local-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新添加的 worker 节点添加到 localVolume。
决定要编辑哪些
本地卷
。oc get -n $local_storage_project localvolume
# oc get -n $local_storage_project localvolume NAME AGE localblock 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
localVolume
定义,使其包含新节点并删除失败的节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记住在退出编辑器之前进行保存。
在上例中,
worker-0
已被删除,worker-3
是新节点。
验证新的
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。如果需要,您可以指定多个故障 OSD。
根据需要识别 PVC,我们需要删除与该特定 PVC 关联的 PV。
osd_id_to_remove=1 oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
$ osd_id_to_remove=1 $ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
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
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 Copied! Toggle word wrap Toggle overflow 在本例中,PVC 名称为
ocs-deviceset-localblock-0-data-0-g2mmc
。从集群移除出现故障的 OSD。如果需要,您可以指定多个失败的 OSD:
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -n openshift-storage -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -n openshift-storage -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>
是
rook-ceph-osd
前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2
。警告此步骤的结果是从集群中完全移除 OSD。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal-job
pod 的状态,验证 OSD 是否已成功移除。状态为
Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
# oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保 OSD 移除已完成。
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果
ocs-osd-removal-job
失败并且 pod 不在预期的Completed
状态,请检查 pod 日志来进一步调试。例如:
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与故障节点关联的 PV。
标识与 PVC 关联的 PV。
PVC 名称必须与从集群中删除故障 OSD 时获取的名称相同。
oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
# 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 Copied! Toggle word wrap Toggle overflow 如果有一个 PV 处于
Released
状态,请将其删除。oc delete pv <persistent-volume>
# oc delete pv <persistent-volume>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc delete pv local-pv-5c9b8982
# oc delete pv local-pv-5c9b8982 persistentvolume "local-pv-5c9b8982" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确定
crashcollector
pod 部署。oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
$ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage
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 删除
ocs-osd-removal-job
。oc delete -n openshift-storage job ocs-osd-removal-job
# oc delete -n openshift-storage job ocs-osd-removal-job
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" 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 数据基础容器集是否都处于 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-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
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 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
- 如果验证步骤失败,请联系红帽支持。