OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2.3.2. 替换安装程序置备的基础架构中可正常运行的 Amazon EC2 节点
使用此流程替换 Amazon EC2 I3 安装程序置备的基础架构(IPI)上的操作节点。
替换 Amazon EC2 I3 基础架构中的存储节点是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 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 排空节点。
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
识别安装 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 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。
将新磁盘条目添加到 LocalVolume CR。
编辑
LocalVolume
CR.您可以删除或注释掉失败的设备/dev/disk/by-id/{id}
,再添加新的/dev/disk/by-id/{id}
。oc get -n $local_storage_project localvolume
$ oc get -n $local_storage_project localvolume
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME AGE local-block 25h
NAME AGE local-block 25h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit -n $local_storage_project localvolume local-block
$ oc edit -n $local_storage_project localvolume local-block
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保在编辑 CR 后保存更改。
您可以看到,这个 CR 中添加了以下两个新设备,使用 by-id。
-
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS6F45C01D7E84FE3E9
-
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS636BC945B4ECB9AE4
-
显示带有
本地块
的 PV。oc get pv | grep localblock
$ oc get pv | grep localblock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除与故障节点关联的存储资源。
识别与要替换的 OSD 关联的 DeviceSet。
osd_id_to_remove=0 oc get -n openshift-storage -o yaml deployment rook-ceph-osd-${osd_id_to_remove} | grep ceph.rook.io/pvc
$ osd_id_to_remove=0 $ 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
前缀后面的整数。在本例中,部署名称为rook-ceph-osd-0
。输出示例:
ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68 ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68
ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68 ceph.rook.io/pvc: ocs-deviceset-0-0-nvs68
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 标识与 PVC 关联的 PV。
oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
$ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
x
、y
、和pvc-suffix
是之前步骤中标识的 DeviceSet 中的值。输出示例:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-nvs68 Bound local-pv-8176b2bf 2328Gi RWO localblock 4h49m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-nvs68 Bound local-pv-8176b2bf 2328Gi RWO localblock 4h49m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,关联的 PV 是
local-pv-8176b2bf
。更改到
openshift-storage
项目。oc project openshift-storage
$ oc project openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 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 通过检查
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 注意如果
ocs-osd-removal-job
失败,且 pod 没有处于预期的Completed
状态,请检查 pod 日志以获得进一步的调试。例如:oc logs -l job-name=ocs-osd-removal-job -n openshift-storage
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除在前面的步骤中标识的 PV。在本例中,PV 名称是
local-pv-8176b2bf
。oc delete pv local-pv-8176b2bf
$ oc delete pv local-pv-8176b2bf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
persistentvolume "local-pv-8176b2bf" deleted
persistentvolume "local-pv-8176b2bf" deleted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除在上一步中确定的
crashcollector
Pod 部署。oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<old_node_name> -n openshift-storage
$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<old_node_name> -n openshift-storage
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 可能需要几分钟。
删除
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 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-a-64556f7659-c2ngc 1/1 Running 0 5h1m rook-ceph-mon-b-7c8b74dc4d-tt6hd 1/1 Running 0 5h1m rook-ceph-mon-d-57fb8c657-wg5f2 1/1 Running 0 27m
rook-ceph-mon-a-64556f7659-c2ngc 1/1 Running 0 5h1m rook-ceph-mon-b-7c8b74dc4d-tt6hd 1/1 Running 0 5h1m rook-ceph-mon-d-57fb8c657-wg5f2 1/1 Running 0 27m
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
- 如果验证步骤失败,请联系红帽支持。