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 集群。
流程
找出该节点,并获取您要替换的节点上的标签:
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 <node_name>- 指定替换的节点的名称。
识别在需要替换的节点中运行的
mon(若有)和 Object Storage Device(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 缩减上一步中标识的 pod 的部署:
例如:
oc scale deployment rook-ceph-mon-a --replicas=0 -n openshift-storage
$ oc scale deployment rook-ceph-mon-a --replicas=0 -n openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale deployment rook-ceph-osd-1 --replicas=0 -n openshift-storage
$ oc scale deployment rook-ceph-osd-1 --replicas=0 -n openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storage
$ oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=<node_name> --replicas=0 -n openshift-storageCopy 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-daemonsetsCopy 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 csrCopy 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 <certificate_name>- 指定 CSR 的名称。
-
在 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 <new_node_name>- 指定新节点的名称。
识别安装 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)Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo $local_storage_project
echo $local_storage_projectCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
openshift-local-storage
openshift-local-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将新添加的 worker 节点添加到
localVolume中。确定您需要编辑的
localVolume:oc get -n $local_storage_project localvolume
# oc get -n $local_storage_project localvolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME AGE localblock 25h
NAME AGE localblock 25hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
localVolume定义,使其包含新节点,并删除故障节点:oc edit -n $local_storage_project localvolume localblock
# oc edit -n $local_storage_project localvolume localblockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记住在退出编辑器之前进行保存。
在本例中,
worker-0被删除,worker-3是新节点。
验证新的
localblock持久性卷 (PV)是否可用:oc get pv | grep localblock
$ oc get pv | grep localblockCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
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
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 25hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
openshift-storage项目:oc project openshift-storage
$ oc project openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。
识别 PVC:
osd_id_to_remove=1
$ osd_id_to_remove=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${<osd_id_to_remove>} | grep ceph.rook.io/pvc$ oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${<osd_id_to_remove>} | grep ceph.rook.io/pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
<osd_id_to_remove>是rook-ceph-osd前缀后的 pod 名字中的整数。在本例中,部署名称为
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-g2mmcceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmc ceph.rook.io/pvc: ocs-deviceset-localblock-0-data-0-g2mmcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群移除出现故障的 OSD。如果需要,您可以指定多个失败的 OSD:
oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -Copy to Clipboard Copied! Toggle word wrap Toggle overflow <failed_osd_id>是 pod 名称中的整数,位于
rook-ceph-osd前缀后。您可以在命令中添加以逗号分隔的 OSD ID,以移除多个 OSD,例如FAILED_OSD_IDS=0,1,2。在只有三个 OSD 或有空间不足的集群中,
FORCE_OSD_REMOVAL值必须改为true,以便在 OSD 被删除后恢复所有三个数据副本。
此步骤的结果是从集群中完全移除 OSD。确保提供了 osd_id_to_remove 的正确值。
通过检查
ocs-osd-removal-jobpod 的状态,验证 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-storageCopy 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 0Copy 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=-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除与故障节点关联的 PV。
识别与 PVC 关联的 PV:
oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
# oc get pv -L kubernetes.io/hostname | grep localblock | grep ReleasedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
local-pv-5c9b8982 500Gi RWO Delete Released openshift-storage/ocs-deviceset-localblock-0-data-0-g2mmc localblock 24h worker-0
local-pv-5c9b8982 500Gi RWO Delete Released openshift-storage/ocs-deviceset-localblock-0-data-0-g2mmc localblock 24h worker-0Copy to Clipboard Copied! Toggle word wrap Toggle overflow PVC 名称必须与从集群中删除故障 OSD 时获取的名称相同。
如果有一个 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-5c9b8982Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
persistentvolume "local-pv-5c9b8982" deleted
persistentvolume "local-pv-5c9b8982" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
确定
crashcollectorpod 部署: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-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果有现有的
crashcollectorpod 部署,请删除它: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-storageCopy 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-jobCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deletedCopy 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' ' -f1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点击 Workloads
Pods。确认新节点上至少以下 pod 处于 Running 状态: -
csi-cephfsplugin-* -
csi-rbdplugin-*
-
验证所有其他必需的 OpenShift 数据基础容器集是否都处于 Running 状态。
确保创建了新的 incremental
mon,且处于 Running 状态:oc get pod -n openshift-storage | grep mon
$ oc get pod -n openshift-storage | grep monCopy 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 162mCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD 和监控 pod 可能需要几分钟才能进入
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 osdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。
对于上一步中标识的每个新节点,请执行以下操作:
创建 debug pod 并为一个或多个所选主机打开 chroot 环境:
oc debug node/<node_name>
$ oc debug node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示可用块设备列表:
lsblk
$ lsblkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查一个或多个
ocs-deviceset名称旁的crypt关键字。
- 如果验证步骤失败,请联系红帽支持团队。