第 2 章 使用本地存储设备部署的 OpenShift Container Storage
2.1. 在裸机基础架构中替换存储节点 复制链接链接已复制到粘贴板!
- 要替换操作节点,请查看 第 2.1.1 节 “在裸机用户置备的基础架构中替换操作节点”
- 要替换出现故障的节点,请参阅 第 2.1.2 节 “在裸机用户置备的基础架构中替换失败的节点”
2.1.1. 在裸机用户置备的基础架构中替换操作节点 复制链接链接已复制到粘贴板!
先决条件
- 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
-
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建一个
LocalVolumeSet对象来启用设备的自动置备,现在请按照 本地存储支持的集群的 Post-update 配置更改 中的步骤。 -
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建
LocalVolumeDiscovery对象,现在请按照 本地存储支持的集群的 Post-update 配置更改 中所述的步骤。
步骤
确定要替换的节点上的 NODE 并获取标签。
$ 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删除节点。
$ oc delete node <node_name>- 获取具有所需基础架构的新裸机计算机。请参阅在裸机上安装集群。
- 使用新的裸机机器创建新的 OpenShift Container Platform 节点。
检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):
$ oc get csr为新节点批准所有所需的 OpenShift Container Platform CSR:
$ oc adm certificate approve <Certificate_Name>-
在 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=""
识别安装 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 节点添加到
localVolumeDiscovery和localVolumeSet。更新
localVolumeDiscovery定义,使其包含新节点并删除失败的节点。# oc edit -n $local_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...]记住在退出编辑器之前进行保存。
在上例中,
server3.example.com已被删除,newnode.example.com是新节点。决定要编辑的
localVolumeSet。# 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 [...]记住在退出编辑器之前进行保存。
在上例中,
server3.example.com已被删除,newnode.example.com是新节点。
验证新的
localblockPV 是否可用。$oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s更改到
openshift-storage项目。$ oc project openshift-storage从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -<failed_osd_id>是
rook-ceph-osd前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL值必须更改为true,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。
通过检查
ocs-osd-removal-jobpod 的状态,验证 OSD 是否已成功移除。状态为
Completed,确认 OSD 移除作业已成功。# oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage注意如果
ocs-osd-removal-job失败,且 pod 没有处于预期的Completed状态,请检查 pod 日志以获得进一步的调试。例如:# oc logs -l job-name=ocs-osd-removal-job -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 Container Storage Pod 是否都处于 Running 状态。
确保创建了新的增量
mon,并处于 Running 状态。$ oc get pod -n openshift-storage | grep mon输出示例:
rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8sOSD 和 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
- 如果验证步骤失败,请联系红帽支持。
2.1.2. 在裸机用户置备的基础架构中替换失败的节点 复制链接链接已复制到粘贴板!
先决条件
- 红帽建议为替换节点配置与被替换节点的类似基础架构、资源和磁盘。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
-
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建一个
LocalVolumeSet对象来启用设备的自动置备,现在请按照 本地存储支持的集群的 Post-update 配置更改 中的步骤。 -
如果您从以前的版本升级到 OpenShift Container Storage 4.7,且还没有创建
LocalVolumeDiscovery对象,现在请按照 本地存储支持的集群的 Post-update 配置更改 中所述的步骤。
步骤
确定要替换的节点上的 NODE 并获取标签。
$ 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>删除处于 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-local-data --ignore-daemonsets删除节点。
$ oc delete node <node_name>- 获取具有所需基础架构的新裸机计算机。请参阅在裸机上安装集群。
- 使用新的裸机机器创建新的 OpenShift Container Platform 节点。
检查与处于 Pending 状态的 OpenShift Container Platform 相关的证书签名请求(CSR):
$ oc get csr为新节点批准所有所需的 OpenShift Container Platform CSR:
$ oc adm certificate approve <Certificate_Name>-
在 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=""
识别安装 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 节点添加到
localVolumeDiscovery和localVolumeSet。更新
localVolumeDiscovery定义,使其包含新节点并删除失败的节点。# oc edit -n $local_storage_project localvolumediscovery auto-discover-devices [...] nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - server1.example.com - server2.example.com #- server3.example.com - newnode.example.com [...]记住在退出编辑器之前进行保存。
在上例中,
server3.example.com已被删除,newnode.example.com是新节点。决定要编辑的
localVolumeSet。# 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 [...]记住在退出编辑器之前进行保存。
在上例中,
server3.example.com已被删除,newnode.example.com是新节点。
验证新的
localblockPV 是否可用。$oc get pv | grep localblock | grep Available local-pv-551d950 512Gi RWO Delete Available localblock 26s更改到
openshift-storage项目。$ oc project openshift-storage从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。
$ oc process -n openshift-storage ocs-osd-removal \ -p FAILED_OSD_IDS=<failed_osd_id> FORCE_OSD_REMOVAL=false | oc create -n openshift-storage -f -<failed_osd_id>是
rook-ceph-osd前缀后立即的 pod 名称中的整数。您可以在 命令中添加以逗号分隔的 OSD ID,以删除多个 OSD,如FAILED_OSD_IDS=0,1,2。在只有三个 OSD 的集群中,
FORCE_OSD_REMOVAL值必须更改为true,或者空间不足的集群才能在 OSD 被删除后恢复所有三个数据副本。
通过检查
ocs-osd-removal-jobpod 的状态,验证 OSD 是否已成功移除。状态为
Completed,确认 OSD 移除作业已成功。# oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage注意如果
ocs-osd-removal-job失败,且 pod 没有处于预期的Completed状态,请检查 pod 日志以获得进一步的调试。例如:# oc logs -l job-name=ocs-osd-removal-job -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 Container Storage Pod 是否都处于 Running 状态。
确保创建了新的增量
mon,并处于 Running 状态。$ oc get pod -n openshift-storage | grep mon输出示例:
rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8sOSD 和 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
- 如果验证步骤失败,请联系红帽支持。