2.3.4. 替换安装程序置备的基础架构中失败的 Amazon EC2 节点
OpenShift Container Storage 的 Amazon EC2 I3 的临时存储可能会在实例关闭时造成数据丢失。使用此流程恢复 Amazon EC2 基础架构上的实例电源。
替换 Amazon EC2 I3 基础架构中的存储节点是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
先决条件
- 红帽建议为替换节点配置类似的基础架构和资源,以用于被替换的节点。
- 您必须登录 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>删除处于 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-
点 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=""
识别安装 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_ids_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
- 如果验证步骤失败,请联系红帽支持。