更新使用 OpenShift Data Foundation 的经典工作程序节点
经典基础设施
对于采用Data Foundation OpenShift 等存储解决方案的经典集群,必须依次隔离、排空并替换每个工作节点。 若您将 OpenShift 数据基础架构部署到集群中部分工作节点,则在替换工作节点后,必须编辑资源 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 不被支持。
请登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
在更新工作程序节点之前,请确保备份应用程序数据。 此外,计划一次完成一个工作程序节点的以下步骤。 对每个需要更新的工作节点,请重复上述步骤。
更新集群主节点
重大更新
- 如果要将工作程序节点更新到新的主版本 (例如,从
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.21.27 --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
缩减 OpenShift Data Foundation
重大更新 次要更新
- 对于在上一步中找到的每个工作程序节点,查找
rook-ceph-mon和rook-ceph-osd部署。oc get pods -n openshift-storage -o wide | grep -i <node_name> - 缩减在上一步中找到的部署。
oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storageoc scale deployment rook-ceph-osd-2 --replicas=0 -n openshift-storageoc 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 update -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
从旧节点清除资源
重大更新 次要更新
-
浏览至
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-removed-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 -
从旧节点标识与持久卷声明 (PVC) 关联的持久卷 (PV):
oc get pv -L kubernetes.io/hostname | grep localblock | grep Released如果存在处于“已发布”状态的 PV,请将其删除:
oc delete pv <persistent_volume>
添加新的存储节点
重大更新 次要更新
- 等待 OpenShift Data Foundation pod 部署到新的工作程序。 验证是否已创建 OSD 持久卷,并且所有 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 monrook-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 - 标识
crashcollectorpod 部署。oc get deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage - 如果存在现有
crashcollector部署,请将其删除。oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage - 删除 ocs-osd-delete-job。
示例输出:oc delete -n openshift-storage job ocs-osd-removal-jobjob.batch "ocs-osd-removal-job" deleted
更新 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 autoDiscoverDevices: true numOfOsd: 1 ocsUpgrade: true osdSize: 250Gi 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.0oc 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_OKoc 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