更新或替换使用 OpenShift Data Foundation 的 VPC 工作程序节点
虚拟私有云
对于具有存储解决方案 (例如 OpenShift Data Foundation) 的 VPC 集群,必须按顺序封锁,排出和更换每个工作程序节点。 如果已将 OpenShift Data Foundation 部署到集群中的工作程序节点子集,那么在替换工作程序节点之后,必须编辑 ocscluster
资源以包含新的工作程序节点。
以下教程涵盖了主要更新和次要更新以及工作程序替换。
- 主要更新
- 完成带有此标签的步骤以应用主要更新; 例如,如果要将工作程序节点更新到新的主要版本 (例如,从
4.11
到4.12
以及从4.11
到4.12
的 OpenShift Data Foundation)。 - 次要更新
- 完成带有此标签的步骤以应用补丁更新,例如,如果要在保持 OpenShift Data Foundation 为 V
4.12
的情况下从4.12.15_1542_openshift
更新到4.12.16_1544_openshift
。 必须对每个要更新的节点重复这些步骤。 - 工作程序替换
- 如果要更换同一补丁版本的工作程序节点,请使用此标签步骤完成这些步骤。 必须对要替换的每个节点重复这些步骤。
不支持在升级期间跳过版本,例如从 4.8 到 4.12。
登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
在更新工作程序节点之前,请确保备份应用程序数据。 此外,计划一次完成一个工作程序节点的以下步骤。 对每个要更新的工作节点重复上述步骤。
检查存储群集的状态
主要更新 次要更新 工作程序替换
-
运行以下命令列出 pod。 验证
openshift-storage
命名空间中的所有 pod 是否处于良好状态。 处理任何未处于“运行”或“已完成”状态的 pod。oc get pods -n openshift-storge
-
运行以下命令并验证
ocs-storagecluster
的Phase
为Ready
。oc get storagecluster -n openshift-storage
示例输出
NAME AGE PHASE EXTERNAL CREATED AT VERSION ocs-storagecluster 3m49s Ready 2025-04-06T09:37:49Z 4.16.9
-
运行以下命令检查 Ceph 存储的状态。 验证健康状况为
HEALTH_OK
,所有 OSD 均为up
和IN
,所有pgs
均为active+clean
。 如果任何检查失败,请打开 支持案例。 在案件详情中,请确保包含任何相关日志文件、错误信息或命令输出。 解决任何问题后再继续。oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) ceph status -c /var/lib/rook/openshift-storage/openshift-storage.config
示例输出
health: HEALTH_OK # Verify health is HEALTH_OK services: mon: 3 daemons, quorum a,b,c (age 3h) mgr: a(active, since 6h) mds: ocs-storagecluster-cephfilesystem:1 {0=ocs-storagecluster-cephfilesystem-b=up:active} 1 up:standby-replay osd: 27 osds: 27 up (since 2h), 27 in (since 111m) # Verify OSDs are “up” and “in” rgw: 2 daemons active (ocs.storagecluster.cephobjectstore.a, ocs.storagecluster.cephobjectstore.b) data: pools: 10 pools, 1136 pgs objects: 5.50M objects, 3.3 TiB usage: 9.9 TiB used, 43 TiB / 53 TiB avail pgs: 1136 active+clean # Verify psgs are active+clean io: client: 93 KiB/s rd, 2.0 MiB/s wr, 5 op/s rd, 29 op/s wr
在对其他节点重复更新程序之前,请重复这些健康检查。 同时关闭多个 OSD pod 可能会危及用户数据。
更新集群主节点
主要更新
-
如果要将工作程序节点更新到新的主版本 (例如,从
4.11
到4.12
),请首先更新集群主节点。ibmcloud oc cluster master update --cluster CLUSTER [--version MAJOR.MINOR.PATCH] [--force-update] [-f] [-q]
示例命令:
ibmcloud oc cluster master update --cluster mycluster --version 4.17.28 --force-update
-
等待主更新完成。
决定要更新或替换哪些存储节点
主要更新 次要更新 工作程序替换
-
使用
oc get nodes
列出工作程序节点,并确定要更新的存储节点。oc get nodes
示例输出
NAME STATUS ROLES AGE VERSION 10.241.0.4 Ready master,worker 106s v1.21.6+4b61f94 10.241.128.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.64.4 Ready master,worker 22d v1.21.6+bb8d50a
确保存储群集健康
主要更新 次要更新 工作程序替换
运行以下命令检查存储群集的健康状况。
oc get storagecluster -n openshift-storage
oc get cephcluster -n openshift-storage
继续之前,请确保存储群集是健康的。
缩减 OpenShift Data Foundation
主要更新 次要更新 工作程序替换
-
对于在上一步中找到的每个工作程序节点,查找
rook-ceph-mon
和rook-ceph-osd
部署。oc get pods -n openshift-storage -o wide | grep -i <node_name>
在某些情况下,排空 Noobaa 豆荚时可能会卡住。 在这种情况下,可以手动删除 NooBaa pod,这样它们就会被调度到不同的节点上。
-
按以下顺序删除剩余的 Noobaa 豆荚。
noobaa-db noobaa-core noobaa-endpoint noobaa-operator
-
缩减在上一步中找到的部署。
oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
oc scale deployment rook-ceph-osd-2 --replicas=0 -n openshift-storage
oc scale deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME --replicas=0 -n openshift-storage
封锁并排出工作程序节点
主要更新 次要更新 工作程序替换
-
节点上的警戒线。 封锁节点将阻止在此节点上调度任何 Pod。
oc adm cordon NODE_NAME
示例输出
node/10.241.0.4 cordoned
-
清空节点以除去所有 pod。 在排出工作程序节点时,pod 会移至其他工作程序节点,以确保没有停机时间。 排水还可确保不会中断 pod 中断预算。
oc adm drain NODE_NAME --force --delete-emptydir-data --ignore-daemonsets
示例输出
evicting pod "managed-storage-validation-webhooks-7fd79bc9f7-pdpv6" evicting pod "calico-kube-controllers-647dbbd685-fmrp9" evicting pod "certified-operators-2v852" evicting pod "csi-snapshot-controller-77fbf474df-47ddt" evicting pod "calico-typha-8574d89b8c-7f2cc" evicting pod "dns-operator-6d48cbff67-vrrsw" evicting pod "router-default-6fc798b98b-9m6kh" evicting pod "prometheus-adapter-5b77ffdd5f-hzqrp" evicting pod "alertmanager-main-1" evicting pod "prometheus-k8s-0" evicting pod "network-check-source-66c7fbb86-2r78z"
-
等待直到排水完成,然后完成以下步骤以更换工作程序节点。
更换工作程序节点
主要更新 次要更新 工作程序替换
-
使用
ibmcloud oc worker ls
命令列出工作程序节点,并查找在上一步中封锁和排出的工作程序节点。ibmcloud oc worker ls -c CLUSTER
示例输出
ID Primary IP Flavor State Status Zone Version kube-c85ra07w091uv4nid9ug-vpcoc-default-000001c1 10.241.128.4 bx2.4x16 normal Ready us-east-3 4.8.29_1544_openshift* kube-c85ra07w091uv4nid9ug-vpcoc-default-00000288 10.241.0.4 bx2.4x16 normal Ready us-east-1 4.8.29_1544_openshift* kube-c85ra07w091uv4nid9ug-vpcoc-default-00000352 10.241.64.4 bx2.4x16 normal Ready us-east-2 4.8.29_1544_openshift*
-
替换工作程序节点。
次要更新 用于替换工作程序节点并应用最新补丁更新的示例命令。
ibmcloud oc worker replace -c CLUSTER --worker kube-*** --update
工作程序替换 用于在不应用最新补丁更新的情况下替换工作程序节点的示例命令。
ibmcloud oc worker replace -c CLUSTER --worker kube-***
示例输出
The replacement worker node is created in the same zone with the same flavor, but gets new public or private IP addresses. During the replacement, all pods might be rescheduled onto other worker nodes and data is deleted if not stored outside the pod. To avoid downtime, ensure that you have enough worker nodes to handle your workload while the selected worker nodes are being replaced. Replace worker node kube-c85ra07w091uv4nid9ug-cluster-default-00000288? [y/N]> y Deleting worker node kube-c85ra07w091uv4nid9ug-cluster-default-00000288 and creating a new worker node in cluster
-
等待供应替换节点,然后列出工作程序节点。 请注意,此过程可能需要 20 分钟或更长时间。
oc get nodes
示例输出
NAME STATUS ROLES AGE VERSION 10.241.0.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.128.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.64.4 Ready master,worker 22d v1.21.6+bb8d50a
从旧节点清除资源
主要更新 次要更新 工作程序替换
-
验证 OSD pod 是否以
running
状态出现在被替换的节点上。 如果 pod 正在运行,请继续执行 步骤 7。 如果 pod 出现故障,请执行以下操作 steps.If 多个 OSD pod 未Running
,请停止并联系支持人员。 打开 支持案例。 在案例详细信息中,请务必包含任何相关日志文件、错误信息或命令输出。 -
浏览至
openshift-storage
项目。oc project openshift-storage
-
从集群中除去发生故障的 OSD。 如有需要,您可以指定多个失败的 OSD。
oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
FAILED_osd_id
值是紧跟在rook-ceph-osd
前缀之后的 pod 名称中的整数。 在只有三个 OSD 的集群中,必须将FORCE_OSD_REMOVAL
值更改为true
,或者在除去 OSD 之后,空间不足的集群无法复原所有三个数据副本。 -
通过检查
ocs-osd-removal-job
pod 的状态,验证是否已成功除去 OSD。oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
-
验证 OSD 移除是否已完成。
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
示例输出
2023-03-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
添加新的存储节点
在添加新的存储节点之前,请确保已为群集中的所有存储节点完成了前面的步骤。
主要更新 次要更新 工作程序替换
-
如果在安装期间通过指定节点名将 ODF 部署限制为一部分工作程序节点,那么必须更新
ocscluster
CRD 以包含新名称。如果您没有将配置仅限于某些工作节点,则无需更新
ocscluster
CRD。oc edit ocscluster
apiVersion: ocs.ibm.io/v1 kind: OcsCluster metadata: name: ocscluster-auto spec: . . . osdSize: 250Gi osdStorageClassName: ibmc-vpc-block-metro-10iops-tier workerNodes: - NODE-NAME # Example 10.248.128.42 - NODE-NAME - NODE-NAME
-
等待 OpenShift Data Foundation pod 部署到新的工作程序。 验证是否已创建新的持久卷,以及所有 pod 是否处于
Running
状态。oc get pv oc get ocscluster oc get pods -n openshift-storage
-
验证所有其他必需的 OpenShift Data Foundation pod 是否处于“正在运行”状态。
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 4m8s
-
验证新的 OSD pod 是否在替换节点上运行。
oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
更新 OpenShift Data Foundation 附加组件
主要更新
-
请检查现有版本。
ibmcloud oc cluster addon ls --cluster CLUSTER
-
更新附加组件。
ibmcloud oc cluster addon update openshift-data-foundation --cluster CLUSTER --version VERSION
-
验证是否更新了附加组件。
ibmcloud oc cluster addon ls --cluster CLUSTER
更新集群资源
主要更新
-
获取
ocscluster
资源的名称。oc get ocscluster
示例输出
NAME AGE ocscluster-vpc 19d
-
运行以下命令编辑
ocscluster
资源。oc edit ocscluster OCS-CLUSTER-NAME
-
将
ocsUpgrade
参数设置为true
。... spec: billingType: hourly monSize: 20Gi monStorageClassName: ibmc-vpc-block-10iops-tier numOfOsd: 1 ocsUpgrade: true osdSize: 250Gi osdStorageClassName: ibmc-vpc-block-10iops-tier status: storageClusterStatus: Decreasing the capacity not allowed
-
保存并关闭该文件。
-
等待更新完成。
-
验证是否正确部署了
storagecluster
和cephcluster
资源。oc get storagecluster -n openshift-storage NAME AGE PHASE EXTERNAL CREATED AT VERSION ocs-storagecluster 43h Ready 2023-06-21T09:22:00Z 4.11.0
oc get cephcluster -n openshift-storage NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH EXTERNAL ocs-storagecluster-cephcluster /var/lib/rook 3 43h Ready Cluster created successfully HEALTH_OK
oc get csv -n openshift-storage NAME DISPLAY VERSION REPLACES PHASE mcg-operator.v4.11.8 NooBaa Operator 4.11.8 mcg-operator.v4.11.7 Succeeded ocs-operator.v4.11.8 OpenShift Container Storage 4.11.8 ocs-operator.v4.11.7 Succeeded odf-csi-addons-operator.v4.11.8 CSI Addons 4.11.8 odf-csi-addons-operator.v4.11.7 Succeeded odf-operator.v4.11.8 OpenShift Data Foundation 4.11.8 odf-operator.v4.11.7 Succeeded