更新或取代使用 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 Foundation 4.12 版。 您必須針對您要更新的每一個節點重複這些步驟。
工人替換
如果您要更換相同修補程式版本的工作者節點,請使用此標籤步驟來完成步驟。 您必須針對要更換的每一個節點重複這些步驟。

在升級過程中跳過版本(例如從 4.8 升級至 )是不 4.12 被支援的。

請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

在更新工作者節點之前,請確保備份應用程式資料。 此外,計劃一次針對一個工作者節點完成下列步驟。 請針對每個您要更新的工作節點,重複上述步驟。

檢查您的儲存叢集狀態

重大更新 次要更新 工作人員替換

  1. 執行以下指令,列出所有 Pod。 驗證 openshift-storage 命名空間中的所有 Pod 是否處於良好狀態。 處理任何未處於「Running」或「Completed」狀態的 Pod。

    	oc get pods -n openshift-storage
    
  2. 執行下列指令,並驗證 ocs-storageclusterPhaseReady

    	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
    
  3. 執行下列指令檢查 Ceph Storage 的狀態。 確認健康是 HEALTH_OK,所有 OSD 都是 upIN,所有 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 可能會危及使用者資料。

更新叢集主節點

重大更新

  1. 如果您要將工作者節點更新為新的主要版本 (例如從 4.114.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
    
  2. 請等待主要更新完成。

決定您要更新或更換的儲存節點

重大更新 次要更新 工作人員替換

  1. 使用 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

重大更新 次要更新 工作人員替換

  1. 針對您在前一個步驟中找到的每一個工作者節點,尋找 rook-ceph-monrook-ceph-osd 部署。

    oc get pods -n openshift-storage -o wide | grep -i <node_name>
    

    若 Noobaa 莢在排水過程中卡住,您可以手動刪除這些 NooBaa 莢,使其被排程至其他節點執行。

  2. 依下列順序刪除任何剩餘的 Noobaa 儲存空間。

       noobaa-db
       noobaa-core
       noobaa-endpoint
       noobaa-operator
    
  3. 縮減您在前一個步驟中找到的部署。

    	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
    

封鎖並排除工作者節點

重大更新 次要更新 工作人員替換

  1. 封鎖節點。 封鎖節點可防止在此節點上排定任何 Pod。

    oc adm cordon NODE_NAME
    

    輸出範例

    node/10.241.0.4 cordoned
    
  2. 排除節點以移除所有 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"
    
  3. 等到排水完成後,再完成下列步驟更新 Worker 節點。

清理裸機工作節點的持久性卷

重大更新 次要更新 工作人員替換

僅限裸機工作節點:若您正在更新或更換裸機工作節點,請完成以下步驟以清理持久性卷,並為新部署做好節點準備。 如果您正在使用虛擬伺服器實例 (VSI) 工作節點,請跳過本節,並繼續進行「更新工作節點」的步驟。

開始之前,請確保您已完成先前關於將工作節點隔離並排空的步驟。

  1. 請識別您正在更新的節點上,所有處於「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
    
  2. 若任何 PV 處於「Released」狀態,請將其刪除。 請將「<persistent_volume>」替換為上一步驟中設定的 PV 名稱。

    	oc delete pv <persistent_volume>
    

    範例指令

    	oc delete pv local-pv-d6bf175b
    

    輸出範例

    	persistentvolume "local-pv-d6bf175b" deleted
    
  3. 請在裸機節點上清除 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
    
  4. 在除錯艙內,切換至主機的根目錄。

    	chroot /host
    
  5. 將 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
    
  6. 請確認磁碟已清空,且不再含有任何檔案系統的特徵。

    	for disk in /dev/nvme{0..7}n1; do
    	  echo "=== $disk ==="
    	  blkid $disk 2>&1 || echo "Clean"
    	done
    

    輸出結果中,每個磁碟應顯示「Clean」,這表示所有檔案系統簽名均已移除。

  7. 退出除錯艙。

    	exit
    	exit
    
  8. 列出 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
    
  9. 刪除您正在更新的節點所對應的 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
    

完成這些步驟後,在裸機節點重新載入後,系統將自動在該節點上建立並排程新的持久性卷。 請繼續閱讀下一節,以更新工作節點。

更新工作站

重大更新 次要更新 工作人員替換

  1. 使用 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*
    
  2. 更新 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

  1. 等待工作節點重新載入或取代,然後再列出您的工作節點。 請注意,此程序可能需要 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
    

從舊節點清除資源

重大更新 次要更新 工作人員替換

  1. 驗證 OSD Pod 已在 running 狀態下出現在被取代的節點上。 如果 pod 正在運行,請繼續執行 步驟 7。 如果 pod 發生故障,請執行下列步驟 steps.If 多個 OSD pod 不在 Running,請停止並與支援人員聯繫。 開啟 支援個案。 在案例詳細資訊中,請務必包含任何相關的記錄檔、錯誤訊息或指令輸出。

  2. 導覽至 openshift-storage 專案。

    	oc project openshift-storage
    
  3. 從叢集中移除失敗的 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

  4. 透過檢查 ocs-osd-removal-job Pod 的狀態,驗證已順利移除 OSD。

    	oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    
  5. 驗證 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
    

新增儲存節點

在新增儲存節點之前,請確定您已經完成群集中所有儲存節點的前述步驟。

重大更新 次要更新 工作人員替換

  1. 如果您在安裝期間透過指定節點名稱將 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
    
  2. 等待 OpenShift Data Foundation Pod 部署至新的工作者節點。 驗證已建立新的持續性磁區,且所有 Pod 都處於 Running 狀態。

    	oc get pv
    	oc get ocscluster
    	oc get pods -n openshift-storage
    
  3. 驗證所有其他必要的 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
    
  4. 驗證新的 OSD Pod 是否在替換節點上執行。

    	oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
    

更新 OpenShift Data Foundation 附加程式

重大更新

  1. 請檢查現有版本。

    	ibmcloud oc cluster addon ls --cluster CLUSTER
    
  2. 更新附加程式。

    	ibmcloud oc cluster addon update openshift-data-foundation --cluster CLUSTER --version VERSION
    
  3. 驗證附加程式已更新。

    	ibmcloud oc cluster addon ls --cluster CLUSTER
    

更新叢集資源

重大更新

  1. 取得 ocscluster 資源的名稱。

    	oc get ocscluster
    

    輸出範例

    	NAME             AGE
    	ocscluster-vpc   19d
    
  2. 執行下列指令,以編輯 ocscluster 資源。

    	oc edit ocscluster OCS-CLUSTER-NAME
    
  3. 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
    
  4. 儲存並關閉檔案。

  5. 請等待更新完成。

  6. 驗證 storageclustercephcluster 資源都已正確部署。

    	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