2.3. 替换 Amazon EC2 基础架构上的存储节点
要替换用户置备的 Amazon EC2 节点以及安装程序置备的基础架构中,请参阅:
要替换用户置备的 Amazon EC2 节点失败,请参阅:
2.3.1. 替换用户置备的基础架构上的操作 Amazon EC2 节点 复制链接链接已复制到粘贴板!
执行此流程替换 Amazon EC2 I3 用户置备的基础架构(UPI)上的操作节点。
替换 Amazon EC2 I3 基础架构中的存储节点是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 OpenShift Container Platform (RHOCP) 集群。
步骤
识别节点,并在要替换的节点上获取标签。
$ 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>- 使用所需基础架构创建新的 Amazon EC2 I3 机器实例。请参阅支持的基础架构和平台。
- 使用新的 Amazon EC2 I3 机器实例来创建新的 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。
-
对于新节点,点击 Action Menu(⋮)
- 使用命令行界面
- 执行以下命令,将 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 节点上可用的本地存储设备添加到 OpenShift Container Storage StorageCluster。
将新磁盘条目添加到 LocalVolume CR。
编辑
LocalVolumeCR.您可以删除或注释掉失败的设备/dev/disk/by-id/{id},再添加新的/dev/disk/by-id/{id}。$ oc get -n $local_storage_project localvolume输出示例:
NAME AGE local-block 25h$ oc edit -n $local_storage_project localvolume local-block输出示例:
[...] storageClassDevices: - devicePaths: - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441494EC - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84FE3E9 - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE4 - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS10382E5D7441464EP # - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS1F45C01D7E84F43E7 # - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS136BC945B4ECB9AE8 - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS6F45C01D7E84FE3E9 - /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_AWS636BC945B4ECB9AE4 storageClassName: localblock volumeMode: Block [...]确保在编辑 CR 后保存更改。
您可以看到,这个 CR 中添加了以下两个新设备,使用 by-id。
-
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS6F45C01D7E84FE3E9 -
nvme-Amazon_EC2_NVMe_Instance_Storage_AWS636BC945B4ECB9AE4
-
显示带有
本地块的 PV。$ oc get pv | grep localblock输出示例:
local-pv-3646185e 2328Gi RWO Delete Available localblock 9s local-pv-3933e86 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-2-1-v9jp4 localblock 5h1m local-pv-8176b2bf 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-0-0-nvs68 localblock 5h1m local-pv-ab7cabb3 2328Gi RWO Delete Available localblock 9s local-pv-ac52e8a 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-1-0-knrgr localblock 5h1m local-pv-b7e6fd37 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-2-0-rdm7m localblock 5h1m local-pv-cb454338 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-0-1-h9hfm localblock 5h1m local-pv-da5e3175 2328Gi RWO Delete Bound openshift-storage/ocs-deviceset-1-1-g97lq localblock 5h ...
删除与故障节点关联的存储资源。
识别与要替换的 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是 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标识与 PVC 关联的 PV。
$ oc get -n openshift-storage pvc ocs-deviceset-<x>-<y>-<pvc-suffix>其中,
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在本例中,关联的 PV 是
local-pv-8176b2bf。更改到
openshift-storage项目。$ oc project openshift-storage从集群移除出现故障的 OSD。如果需要,您可以指定多个故障 OSD。
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} | oc create -f -通过检查
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删除在前面的步骤中标识的 PV。在本例中,PV 名称是
local-pv-8176b2bf。$ oc delete pv local-pv-8176b2bf输出示例:
persistentvolume "local-pv-8176b2bf" deleted
删除在上一步中确定的
crashcollectorPod 部署。$ oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=<old_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 Container Storage Pod 是否都处于 Running 状态。
另外,确保新的增量 mon 已创建并处于 Running 状态。
$ oc get pod -n openshift-storage | grep mon输出示例:
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 27mOSD 和 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
- 如果验证步骤失败,请联系红帽支持。