OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2.2. 替换 IBM Z 或 LinuxONE 基础架构中的存储节点
您可以选择以下步骤之一来替换存储节点:
2.2.1. 替换 IBM Z 或 LinuxONE 基础架构上的操作节点 复制链接链接已复制到粘贴板!
使用此流程替换 IBM zSystems 或 LinuxONE 基础架构中的操作节点。
流程
识别节点,并在要替换的节点上获取标签。记录 rack 标签。
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-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-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 zSystem 存储节点作为替换。
检查与处于
Pending
状态的 OpenShift Data Foundation 相关的证书签名请求(CSR):oc get csr
$ oc get csr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 批准新节点所需的所有 OpenShift Data Foundation 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-storage
标签应用到新节点:- 从用户界面
-
对于新节点,点击 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
将新的 worker 节点添加到
localVolumeDiscovery
和localVolumeSet
。更新
localVolumeDiscovery
定义,使其包含新节点并删除失败的节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记住在退出编辑器之前进行保存。
在上例中,
server3.example.com
已被删除,newnode.example.com
是新节点。决定要编辑的
localVolumeSet
。在以下命令中,将 local-storage-project 替换为您的本地存储项目的名称。默认项目名称是 OpenShift Data Foundation 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 记住在退出编辑器之前进行保存。
在上例中,
server3.example.com
已被删除,newnode.example.com
是新节点。
验证新的
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。
oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} |oc create -f -
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} |oc create -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过在 命令中添加逗号分隔的 OSD ID 来移除多个 OSD。(例如:FAILED_OSD_IDS=0,1,2)
警告这一步会导致 OSD 完全从集群中移除。确保提供了
osd_id_to_remove
的正确值。
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为
Completed
,确认 OSD 移除作业已成功。oc get pod -l job-name=ocs-osd-removal-osd_id_to_remove -n openshift-storage
# oc get pod -l job-name=ocs-osd-removal-osd_id_to_remove -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-osd_id_to_remove -n openshift-storage --tail=-1
# oc logs -l job-name=ocs-osd-removal-osd_id_to_remove -n openshift-storage --tail=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可能需要手动清理删除的 OSD,如下所示:
ceph osd crush remove osd.osd_id_to_remove ceph osd rm osd_id_to_remove ceph auth del osd.osd_id_to_remove ceph osd crush rm osd_id_to_remove
ceph osd crush remove osd.osd_id_to_remove ceph osd rm osd_id_to_remove ceph auth del osd.osd_id_to_remove ceph osd crush rm osd_id_to_remove
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
任务。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 Data Foundation 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 osd
Copy 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示可用块设备列表:
lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查一个或多个
ocs-deviceset
名称旁的crypt
关键字。
- 如果验证步骤失败,请联系红帽支持团队。
2.2.2. 在 IBM Z 或 LinuxONE 基础架构中替换失败的节点 复制链接链接已复制到粘贴板!
流程
-
登录 OpenShift Web 控制台,再点击 Compute
Nodes。 - 确定有故障的节点,再单击其 Machine Name。
- 点击 Actions → Edit Annotations,然后点 Add More。
-
添加
machine.openshift.io/exclude-node-draining
并点 Save。 -
点 Actions
Delete Machine,然后点 Delete。 会自动创建新机器。等待新机器启动。
重要此活动可能至少需要 5 到 10 分钟或更多。Ceph 周期内生成的 Ceph 错误是临时的,当您标记新节点并且可以正常工作时,会自动解决。
-
点 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>
- 指定新节点的名称。
验证步骤
验证输出中是否存在新节点:
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 Data Foundation 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 osd
Copy 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示可用块设备列表:
lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查一个或多个
ocs-deviceset
名称旁的crypt
关键字。
- 如果验证步骤失败,请联系红帽支持团队。