第 13 章 替换存储节点
- 要替换正常运行的节点,请参阅 第 13.1 节 “在 Red Hat Virtualization 安装程序置备的基础架构中替换操作节点”
- 要替换失败的节点,请参阅 第 13.2 节 “在 Red Hat Virtualization 安装程序置备的基础架构中替换失败的节点”
13.1. 在 Red Hat Virtualization 安装程序置备的基础架构中替换操作节点
使用这个流程替换 Red Hat Virtualization 安装程序置备的基础架构 (IPI) 上的操作节点。
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
流程
-
登录 OpenShift Web 控制台并点击 Compute
Nodes。 - 确定需要替换的节点。记录它的机器名称。
在要替换的节点上获取标签。
$ oc get nodes --show-labels | grep <node_name>
识别要替换的节点中运行的 mon(若有)和 OSD。
$ oc get pods -n openshift-storage -o wide | grep -i <node_name>
缩减上一步中确定的容器集部署。
例如:
$ 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 adm cordon <node_name>
排空节点。
$ oc adm drain <node_name> --force --delete-local-data --ignore-daemonsets
-
点 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=""
将 worker 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。
决定要编辑的
localVolumeSet
。在以下命令中,将 local-storage-project 替换为您的本地存储项目的名称。在 OpenShift Container Storage 4.6 及更高版本中,默认项目名称为
openshift-local-storage
。之前的版本默认使用local-storage
。# oc get -n local-storage-project localvolumeset NAME AGE localblock 25h
将新节点添加到
localVolumeSet
定义中。# oc edit -n local-storage-project localvolumeset localblock [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com # - server3.example.com - newnode.example.com [...]
记住在退出编辑器之前进行保存。
验证新的
localblock
PV 是否可用。$ oc get pv | grep localblock CAPA- ACCESS RECLAIM STORAGE NAME CITY MODES POLICY STATUS CLAIM CLASS AGE local-pv- 931Gi RWO Delete Bound openshift-storage/ localblock 25h 3e8964d3 ocs-deviceset-2-0 -79j94 local-pv- 931Gi RWO Delete Bound openshift-storage/ localblock 25h 414755e0 ocs-deviceset-1-0 -959rp local-pv- 931Gi RWO Delete Available localblock 3m24s b481410 local-pv- 931Gi RWO Delete Bound openshift-storage/ localblock 25h d9c5cbd6 ocs-deviceset-0-0 -nvs68
更改到
openshift-storage
项目。$ oc project openshift-storage
从集群移除出现故障的 OSD。
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=failed-osd-id1,failed-osd-id2 | oc create -f -
通过检查
ocs-osd-removal
pod 的状态,验证 OSD 是否已成功移除。状态为
Completed
,确认 OSD 移除作业已成功。# oc get pod -l job-name=ocs-osd-removal-failed-osd-id -n openshift-storage
注意如果
ocs-osd-removal
失败且 pod 不处于预期的Completed
状态,请检查 pod 日志以进一步调试。例如:# oc logs -l job-name=ocs-osd-removal-failed-osd_id -n openshift-storage --tail=-1
删除与故障节点关联的 PV。
标识与 PVC 关联的 PV。
# oc get -n openshift-storage pvc claim-name
例如:
# oc get -n openshift-storage pvc ocs-deviceset-0-0-nvs68 ACCESS STORAGE NAME STATUS VOLUME CAPACITY MODES CLASS AGE ocs-deviceset- Released local-pv- 931Gi RWO localblock 24h 0-0-nvs68 d9c5cbd6
删除 PV:
# oc delete pv <persistent-volume>
例如:
# oc delete pv local-pv-d9c5cbd6 persistentvolume "local-pv-d9c5cbd6" deleted
删除
crashcollector
pod 部署。$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=failed-node-name -n openshift-storage
通过重启
rook-ceph-operator
来强制 Operator 协调,从而部署新的 OSD。# oc get -n openshift-storage pod -l app=rook-ceph-operator
输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-2d982 1/1 Running 0 1d20h
删除
rook-ceph-operator
。# oc delete -n openshift-storage pod rook-ceph-operator-6f74fb5bff-2d982
输出示例:
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
验证
rook-ceph-operator
pod 是否已重启。# oc get -n openshift-storage pod -l app=rook-ceph-operator
输出示例:
NAME READY STATUS RESTARTS AGE rook-ceph-operator-6f74fb5bff-7mvrq 1/1 Running 0 66s
创建新 OSD 和
mon
可能需要几分钟时间,然后再重新启动 operator。
删除
ocs-osd-removal
任务。# oc delete job ocs-osd-removal-${osd_id_to_remove}
输出示例:
job.batch "ocs-osd-removal-0" 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 Container Storage Pod 是否都处于 Running 状态。
确保创建了新的增量
mon
,并处于 Running 状态。$ oc get pod -n openshift-storage | grep mon
输出示例:
rook-ceph-mon-c-64556f7659-c2ngc 1/1 Running 0 6h14m rook-ceph-mon-d-7c8b74dc4d-tt6hd 1/1 Running 0 4h24m rook-ceph-mon-e-57fb8c657-wg5f2 1/1 Running 0 162m
OSD 和 Mon 可能需要几分钟才能进入
Running
状态。验证新 OSD pod 是否在替换节点上运行。
$ oc get pods -o wide -n openshift-storage| egrep -i new-node-name | egrep osd
(可选)如果在集群中启用了数据加密,请验证新 OSD 设备是否已加密。
对于上一步中标识的每个新节点,请执行以下操作:
创建调试 pod,并为所选主机打开 chroot 环境。
$ oc debug node/<node name> $ chroot /host
运行 "lsblk" 并检查
ocs-deviceset
名旁边的 "crypt" 关键字。$ lsblk
- 如果验证步骤失败,请联系红帽支持。