更新使用 OpenShift Data Foundation 的標準工作者節點

經典基礎設施

對於採用儲存解決方案(例如 OpenShift Data Foundation)的經典叢集,您必須依序對每個工作節點執行隔離、排空及替換操作。 若您將 OpenShift Data Foundation 部署至叢集中的部分工作節點,則在替換工作節點後,必須編輯資源 ocscluster 以包含新工作節點。

下列指導教學涵蓋主要及次要工作者節點更新項目。

重大更新
使用此標籤完成步驟以套用主要更新,例如,如果您要將工作者節點更新至新的主要版本,例如從 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. 如果您要將工作者節點更新為新的主要版本 (例如從 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
    

縮減 OpenShift Data Foundation

重大更新 次要更新

  1. 針對您在前一個步驟中找到的每一個工作者節點,尋找 rook-ceph-monrook-ceph-osd 部署。
    oc get pods -n openshift-storage -o wide | grep -i <node_name>
    
  2. 縮減您在前一個步驟中找到的部署。
    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. 等待排除完成,然後完成下列步驟以取代工作者節點。

更新工作者節點

重大更新 次要更新

  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. 更新工作者節點。

    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
    
  3. 等待佈建取代節點,然後列出您的工作者節點。 請注意,此程序可能需要 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. 導覽至 openshift-storage 專案。

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

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

    oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    
  4. 驗證 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
    
  5. 從舊節點識別與持續性磁區要求 (PVC) 相關聯的持續性磁區 (PV):

    oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    

    如果有 PV 處於「已發行」狀態,請刪除它:

    oc delete pv <persistent_volume>
    

新增儲存節點

重大更新 次要更新

  1. 等待 OpenShift Data Foundation Pod 部署至新的工作者節點。 驗證已建立 OSD 持續性磁區,且所有 Pod 都處於 Running 狀態。
    oc get pv
    oc get ocscluster
    oc get pods -n openshift-storage
    
  2. 驗證所有其他必要的 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
    
  3. 驗證新的 OSD Pod 是否在替換用節點上執行:
    oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
    
  4. 識別 crashcollector Pod 部署。
    oc get deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  5. 如果有現有的 crashcollector 部署,請刪除它。
    oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  6. 刪除 ocs-osd-removal-job。
    oc delete -n openshift-storage job ocs-osd-removal-job
    
    輸出範例:
    job.batch "ocs-osd-removal-job" deleted
    

更新 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
    autoDiscoverDevices: true
    numOfOsd: 1
    ocsUpgrade: true
    osdSize: 250Gi
    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