更新或取代使用 OpenShift Data Foundation 的 VPC 工作者節點
Virtual Private Cloud
對於使用 OpenShift Data Foundation 等儲存解決方案的 VPC 群集,您必須依序對每個工作站節點進行警戒、排空和更新。 對於裸機工作節點,現在您可以使用 worker reload 指令,取代原先的 worker replace``。 如果您將 OpenShift Data Foundation 部署到群集中的工作人員節點子集中,則在更新工作人員節點後必須編輯 ocscluster 資源,以包含新的工作人員節點。
以下教程涵蓋主要更新和次要更新,以及 Worker 節點更新。
- Major update
- 使用此標籤完成步驟以套用主要更新; 例如,如果您要將工作者節點更新至新的主要版本,例如從
4.11更新至4.12,以及將 OpenShift Data Foundation 從4.11更新至4.12。 - Minor update
- 使用此標籤完成步驟以套用修補程式更新,例如,如果您要從
4.12.15_1542_openshift更新至4.12.16_1544_openshift,同時保留 OpenShift Data Foundation4.12版。 您必須針對您要更新的每一個節點重複這些步驟。 - Worker replace
- 如果您要更換相同修補程式版本的工作者節點,請使用此標籤步驟來完成步驟。 您必須針對要更換的每一個節點重複這些步驟。
在升級過程中跳過版本(例如從 4.8 升級至 )是不 4.12 被支援的。
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
在更新工作者節點之前,請確保備份應用程式資料。 此外,計劃一次針對一個工作者節點完成下列步驟。 請針對每個您要更新的工作節點,重複上述步驟。
檢查儲存叢集的狀態
Major update Minor update Worker replace
-
執行以下指令以列出 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 可能會危及使用者資料。
更新叢集主節點
Major update
-
如果您要將工作者節點更新為新的主要版本 (例如從
4.11到4.12),請先更新叢集主節點。ibmcloud oc cluster master update --cluster CLUSTER_NAME --version MAJOR.MINOR.PATCH --force-update範例指令:
ibmcloud oc cluster master update --cluster mycluster --version 4.21.31 --force-update -
請等待幾分鐘,然後確認主伺服器的更新是否已完成。
ibmcloud oc cluster ls
決定您要更新或更換的儲存節點
Major update Minor update Worker replace
使用 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
確定儲存群集是健康的
Major update Minor update Worker replace
執行下列指令以檢查儲存群集的健康狀況。
oc get storagecluster -n openshift-storage
oc get cephcluster -n openshift-storage
繼續之前,請確定儲存群集是健康的。
對 OpenShift 資料基礎架構進行區隔與縮減規模
Major update Minor update Worker replace
在進行清空操作之前,先縮減「rook-ceph-mon」、「rook-ceph-osd」以及「crashcollector」的部署規模,可確保這些儲存程序能正常關閉,而非被強制終止。 執行 OSD 和監控 Pod 時,必須以正常方式關閉,以便 Ceph 能在節點離線期間安全地停止 I/O 並維持資料完整性。 當更新或更換後的節點重新加入叢集後,Rook-Ceph 操作員會自動將這些部署的副本數量擴展回原始數量。
-
封鎖節點。 將節點封鎖可防止在您縮減 ODF 部署規模期間,有任何 Pod 被排程至該節點。
oc adm cordon NODE_NAME輸出範例
node/10.241.0.4 cordoned -
找出正在您要更新的節點上執行的
rook-ceph-mon和rook-ceph-osd容器。 請注意輸出中的 pod 名稱——您在下一步驟會需要它們。oc get pods -n openshift-storage -o wide | grep NODE_NAME部署名稱即為 Pod 名稱,不包含末尾的 ReplicaSet 哈希符號及 Pod ID 後綴。 例如,名為
rook-ceph-osd-1-6d9f99c68f-pgvxt的 Pod 屬於部署rook-ceph-osd-1,而名為rook-ceph-mon-e-85fbb8bcc-kttbt的 Pod 則屬於部署rook-ceph-mon-e。 -
請縮減前一步驟中找到的 Pod 的部署規模。 請將
ROOK_CEPH_MON_DEPLOYMENT和ROOK_CEPH_OSD_DEPLOYMENT替換為您根據 Pod 名稱推導出的部署名稱。 如果前一個指令顯示此節點上沒有任何rook-ceph-mon或rook-ceph-osdpod,請跳過這兩個指令,並繼續執行 crashcollector 指令。oc scale deployment ROOK_CEPH_MON_DEPLOYMENT --replicas=0 -n openshift-storageoc scale deployment ROOK_CEPH_OSD_DEPLOYMENT --replicas=0 -n openshift-storageoc scale deployment --selector=app=rook-ceph-crashcollector,node_name=NODE_NAME --replicas=0 -n openshift-storage若該指令執行後回傳
error: no objects passed to scale,請執行oc get pods -n openshift-storage -o wide | grep NODE_NAME | grep crashcollector,以確認此節點上沒有任何 crashcollector Pod 正在運行。 如果未返回任何 pod,您可以安全地跳過此指令並繼續操作。
釋放工作節點
Major update Minor update Worker replace
-
排除節點以移除所有 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" -
如果任何 NooBaa 匣在排空過程中卡住,請依照以下順序刪除它們,以便將其重新排程至其他節點。
oc delete pod -n openshift-storage -l app=noobaa-dboc delete pod -n openshift-storage -l app=noobaa-coreoc delete pod -n openshift-storage -l app=noobaa-endpointoc delete pod -n openshift-storage -l app=noobaa-operator -
等到排水完成後,再完成下列步驟更新 Worker 節點。
清理裸機工作節點的持久性卷
Major update Minor update Worker replace
僅限裸機工作節點:若您正在更新或更換裸機工作節點,請完成以下步驟以清除 ODF 磁碟,並為新部署做好節點準備。 如果您正在使用虛擬伺服器實例 (VSI) 工作節點,請跳過本節,並繼續進行「更新工作節點」的步驟。
開始之前,請確保您已完成先前關於將工作節點隔離並排空的步驟。
-
請在裸機節點上清除 ODF 磁碟,以準備建立新的持久性卷。 在您正在更新的節點上啟動一個除錯 Pod。 請將
NODE_NAME替換為您的裸機 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
完成這些步驟後,請繼續閱讀下一節以更新工作節點。 裸機節點重新載入後,系統會自動在該節點上建立並排程新的持久性卷。
更新工作站
Major update Minor update Worker replace
-
使用
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 NODE_NAME
VSI 工作節點:Major update Minor update 以下為替換工作節點並套用最新修補程式更新的範例指令。
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker NODE_NAME --update
VSI 工作節點:Worker replace 以下為不套用最新修補程式更新的工作節點替換範例指令。
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker NODE_NAME 更換 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
從舊節點清除資源
Major update Minor update Worker replace
當節點重新加入叢集後,Rook-Ceph 操作員會自動將 rook-ceph-mon、rook-ceph-osd 以及 crashcollector 的部署規模恢復至原先狀態。 在繼續之前,請確認 ODF Pod 是否正在運行。
-
請確認先前已縮減規模的
rook-ceph-mon和rook-ceph-osdPod 已於更新後的節點上恢復至Running狀態。 請將「NODE_NAME」替換為已更新或已替換的節點名稱。oc get pods -n openshift-storage -o wide | grep NODE_NAME請確認輸出結果顯示有
rook-ceph-mon及rook-ceph-osd兩個 Pod,且狀態為Running。 如果仍有任何 Pod 尚未出現,或尚未完成「Running」,請等待幾分鐘,並再次執行該指令,然後再繼續。 -
請確認 OSD Pod 已在更換後的節點上以「
Running」狀態啟動。 請將NODE_NAME替換為新節點的名稱。oc get pods -n openshift-storage -o wide | grep NODE_NAME | grep osd如果 Pod 正在執行中,請繼續將 OcsCluster 資源更新為新的節點。 若 pod 發生故障,請執行以下步驟。 若有超過一個 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 -
僅限裸機工作節點:移除 OSD 後,請識別所有處於「
Released」狀態且與「localblock」儲存類別相關聯的持久性卷 (PV)。 移除 OSD 會使這些 PV 進入「Released」狀態,因此此步驟必須在移除 OSD 之後才能完成。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 -
僅限裸機工作節點:若存在任何處於
Released狀態的 PV,請將其刪除。 請將「PERSISTENT_VOLUME」替換為上一步驟中 PV 的名稱。oc delete pv PERSISTENT_VOLUME範例指令
oc delete pv local-pv-d6bf175b輸出範例
persistentvolume "local-pv-d6bf175b" deleted
使用新節點更新 OcsCluster 資源
在繼續執行後續步驟之前,請務必確認您已針對此儲存節點完成前幾個步驟,再轉往叢集中的下一個節點。
Major update Minor update Worker replace
-
如果您在安裝期間透過指定節點名稱將 ODF 部署限制為工作者節點子集,則必須更新
ocsclusterCRD 以包括新名稱。 若您已將 ODF 套用至所有工作節點,且未將部署範圍限制在部分節點上,請跳過此步驟,並繼續進行 「OpenShift Data Foundation」附加元件的更新。如果您沒有將設定僅限制於某些工作站節點,就不需要更新
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 附加程式
Major update
-
請檢查現有版本。
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
更新叢集資源
Major update
-
取得
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