更新或取代使用 OpenShift Data Foundation 的 VPC 工作者節點
虛擬私有雲
對於使用 OpenShift Data Foundation 等儲存解決方案的 VPC 群集,您必須依序對每個工作站節點進行警戒、排空和更新。 對於裸機工作節點,現在您可以使用 worker reload 指令,取代原先的 worker replace``。 如果您將 OpenShift Data Foundation 部署到群集中的工作人員節點子集中,則在更新工作人員節點後必須編輯 ocscluster 資源,以包含新的工作人員節點。
以下教程涵蓋主要更新和次要更新,以及 Worker 節點更新。
- 重大更新
- 使用此標籤完成步驟以套用主要更新; 例如,如果您要將工作者節點更新至新的主要版本,例如從
4.11更新至4.12,以及將 OpenShift Data Foundation 從4.11更新至4.12。 - 小幅更新
- 使用此標籤完成步驟以套用修補程式更新,例如,如果您要從
4.12.15_1542_openshift更新至4.12.16_1544_openshift,同時保留 OpenShift Data Foundation4.12版。 您必須針對您要更新的每一個節點重複這些步驟。 - 工人替換
- 如果您要更換相同修補程式版本的工作者節點,請使用此標籤步驟來完成步驟。 您必須針對要更換的每一個節點重複這些步驟。
在升級過程中跳過版本(例如從 4.8 升級至 )是不 4.12 被支援的。
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
在更新工作者節點之前,請確保備份應用程式資料。 此外,計劃一次針對一個工作者節點完成下列步驟。 請針對每個您要更新的工作節點,重複上述步驟。
檢查您的儲存叢集狀態
重大更新 次要更新 工作人員替換
-
執行以下指令,列出所有 Pod。 驗證
openshift-storage命名空間中的所有 Pod 是否處於良好狀態。 處理任何未處於「Running」或「Completed」狀態的 Pod。oc get pods -n openshift-storage -
執行下列指令,並驗證
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 Storage 的狀態。 確認健康是
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.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
確定儲存群集是健康的
重大更新 次要更新 工作人員替換
執行下列指令以檢查儲存群集的健康狀況。
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 莢,使其被排程至其他節點執行。
-
依下列順序刪除任何剩餘的 Noobaa 儲存空間。
noobaa-db noobaa-core noobaa-endpoint noobaa-operator -
縮減您在前一個步驟中找到的部署。
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" -
等到排水完成後,再完成下列步驟更新 Worker 節點。
清理裸機工作節點的持久性卷
重大更新 次要更新 工作人員替換
僅限裸機工作節點:若您正在更新或更換裸機工作節點,請完成以下步驟以清理持久性卷,並為新部署做好節點準備。 如果您正在使用虛擬伺服器實例 (VSI) 工作節點,請跳過本節,並繼續進行「更新工作節點」的步驟。
開始之前,請確保您已完成先前關於將工作節點隔離並排空的步驟。
-
請識別您正在更新的節點上,所有處於「
Released」狀態且與「localblock」儲存類別相關聯的持久性卷 (PV)。oc get pv -L kubernetes.io/hostname | grep localblock | grep Released輸出範例
local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1 -
若任何 PV 處於「
Released」狀態,請將其刪除。 請將「<persistent_volume>」替換為上一步驟中設定的 PV 名稱。oc delete pv <persistent_volume>範例指令
oc delete pv local-pv-d6bf175b輸出範例
persistentvolume "local-pv-d6bf175b" deleted -
請在裸機節點上清除 ODF 磁碟,以準備建立新的持久性卷。 在您正在更新的節點上啟動一個除錯 Pod。 請將
替換為您的裸機 Worker 節點名稱。kubectl debug node/<node-name> -it --image=registry.access.redhat.com/ubi8/ubi範例指令
kubectl debug node/kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 -it --image=registry.access.redhat.com/ubi8/ubi -
在除錯艙內,切換至主機的根目錄。
chroot /host -
將 ODF 曾使用過的每顆 NVMe 硬碟進行擦除。 請根據您的配置中的磁碟數量,調整磁碟範圍(
nvme{0..7}n1)。for disk in /dev/nvme{0..7}n1; do echo "Wiping $disk..." wipefs -af $disk dd if=/dev/zero of=$disk bs=1M count=100 sgdisk --zap-all $disk 2>/dev/null || true done -
請確認磁碟已清空,且不再含有任何檔案系統的特徵。
for disk in /dev/nvme{0..7}n1; do echo "=== $disk ===" blkid $disk 2>&1 || echo "Clean" done輸出結果中,每個磁碟應顯示「Clean」,這表示所有檔案系統簽名均已移除。
-
退出除錯艙。
exit exit -
列出
localvolumediscoveryresults中的資源,以查找您正在更新的節點對應的條目。kubectl get localvolumediscoveryresults -n openshift-local-storage輸出範例
NAME AGE discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 5d discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000004a1 5d -
刪除您正在更新的節點所對應的
localvolumediscoveryresults資源。 請將「<discovery-result-name>」替換為上一步驟中的名稱。kubectl delete localvolumediscoveryresults <discovery-result-name> -n openshift-local-storage範例指令
kubectl delete localvolumediscoveryresults discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 -n openshift-local-storage
完成這些步驟後,在裸機節點重新載入後,系統將自動在該節點上建立並排程新的持久性卷。 請繼續閱讀下一節,以更新工作節點。
更新工作站
重大更新 次要更新 工作人員替換
-
使用
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* -
更新 Worker 節點。 對於裸金屬工作節點,請使用
worker reload指令。 對於虛擬伺服器實體 (VSI) 工作節點,請使用worker replace指令。
裸金屬工作站節點:使用 worker reload 指令重新載入 Worker 節點。 此指令適用於 VPC 裸機工作節點。
sh {: pre} ibmcloud oc worker reload --worker kube-***
VSI 工作節點:Minor update 更換工作者節點並應用最新修補程式更新的範例指令。
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker kube-*** --update
VSI 工作節點:Worker replace 不套用最新修補程式更新而更換 Worker 節點的範例指令。
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker kube-*** 更換 VSI 工作節點的輸出範例:
sh {: screen} 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值是 Pod 名稱中緊接在rook-ceph-osd字首之後的整數。 在只有三個 OSD 的叢集中,或在移除 OSD 之後,空間不足無法還原所有三個資料抄本的叢集中,FORCE_OSD_REMOVAL值必須變更為true。 -
透過檢查
ocs-osd-removal-jobPod 的狀態,驗證已順利移除 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 部署限制為工作者節點子集,則必須更新
ocsclusterCRD 以包括新名稱。如果您沒有將設定僅限制於某些工作站節點,就不需要更新
ocsclusterCRD。oc edit ocsclusterapiVersion: 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.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