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><node_name>- 指定替换的节点的名称。
识别在需要替换的节点中运行的
mon(若有)和 Object Storage Device(OSD)pod:$ oc get pods -n openshift-storage -o wide | grep -i <node_name>缩减上一步中标识的 pod 的部署:
例如:
$ 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 adm cordon <node_name>删除处于
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 adm drain <node_name> --force --delete-emptydir-data=true --ignore-daemonsets删除节点:
$ oc delete node <node_name>- 使用所需基础架构获取新的 IBM Power 机器。请参阅在 IBM Power 上安装集群。
- 使用新的 IBM Power 机器创建新的 OpenShift Container Platform 节点。
检查与处于
Pending状态的 OpenShift Container Platform 相关的证书签名请求(CSR):$ oc get csr批准新节点所需的所有 OpenShift Container Platform CSR:
$ oc adm certificate approve <certificate_name><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=''<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)echo $local_storage_project输出示例:
openshift-local-storage将新添加的 worker 节点添加到
localVolume中。确定您需要编辑的
localVolume:# oc get -n $local_storage_project localvolume输出示例:
NAME AGE localblock 25h更新
localVolume定义,使其包含新节点,并删除故障节点:# oc edit -n $local_storage_project localvolume localblock输出示例:
[...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: #- worker-0 - worker-1 - worker-2 - worker-3 [...]记住在退出编辑器之前进行保存。
在本例中,
worker-0被删除,worker-3是新节点。
验证新的
localblock持久性卷 (PV)是否可用:$ oc get pv | grep localblock输出示例:
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进入
openshift-storage项目:$ oc project openshift-storage从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。
识别 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其中,
<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-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 -f -<failed_osd_id>是 pod 名称中紧接在
rook-ceph-osd前缀后面的整数。您可以通过在命令中添加逗号分隔的 OSD ID,以移除多个 OSD,例如FAILED_OSD_IDS=0,1,2。FORCE_OSD_REMOVAL值必须在有三个 OSD 的集群中更改为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确保 OSD 移除已完成。
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'输出示例:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0重要如果
ocs-osd-removal-job失败,并且 pod 不在预期的Completed状态,请检查 pod 日志以进一步调试。例如:
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1删除与故障节点关联的 PV。
识别与 PVC 关联的 PV:
# 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-0PVC 名称必须与从集群中删除故障 OSD 时获取的名称相同。
如果有一个 PV 处于
Released状态,请删除它:# oc delete pv <persistent_volume>例如:
# oc delete pv local-pv-5c9b8982输出示例:
persistentvolume "local-pv-5c9b8982" deleted
确定
crashcollectorpod 部署:$ oc get deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage如果有现有的
crashcollectorpod 部署,请删除它:$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<failed_node_name> -n openshift-storage删除
ocs-osd-removal-job:# oc delete -n openshift-storage job ocs-osd-removal-job输出示例:
job.batch "ocs-osd-removal-job" deleted
验证步骤
验证输出中是否存在新节点:
$ oc get nodes --show-labels | grep cluster.ocs.openshift.io/openshift-storage= |cut -d' ' -f1点击 Workloads
Pods。确认新节点上至少以下 pod 处于 Running 状态: -
csi-cephfsplugin-* -
csi-rbdplugin-*
-
验证所有其他必需的 OpenShift 数据基础容器集是否都处于 Running 状态。
确保创建了新的 incremental
mon,且处于 Running 状态:$ oc get pod -n openshift-storage | grep mon输出示例:
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 162mOSD 和监控 pod 可能需要几分钟才能进入
Running状态。验证新 OSD pod 是否在替换节点上运行:
$ oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd可选:如果在集群中启用了集群范围的加密,请验证新 OSD 设备是否已加密。
对于上一步中标识的每个新节点,请执行以下操作:
创建 debug pod 并为一个或多个所选主机打开 chroot 环境:
$ oc debug node/<node_name>$ chroot /host显示可用块设备列表:
$ lsblk检查一个或多个
ocs-deviceset名称旁的crypt关键字。
- 如果验证步骤失败,请联系红帽支持团队。