OpenShift Data Foundation을 사용하는 Classic 워커 노드 업데이트

클래식 인프라

클래식 클러스터에서 Data OpenShift Foundation과 같은 스토리지 솔루션을 사용하는 경우 각 워커 노드를 순차적으로 격리, 드레인 및 교체해야 합니다. OpenShift Data Foundation을 클러스터에 있는 작업자 노드의 서브세트에 배치한 경우 작업자 노드를 대체한 후 새 작업자 노드를 포함하도록 ocscluster 리소스를 편집해야 합니다.

다음 튜토리얼에서는 주 작업자 노드 및 부 작업자 노드 업데이트를 모두 다룹니다.

주요 업데이트
이 레이블이 있는 단계를 완료하여 주요 업데이트를 적용하십시오. 예를 들어, 작업자 노드를 새 주요 버전 (예: 4.11 에서 4.12 로, 그리고 4.11 에서 4.12 로 OpenShift Data Foundation) 으로 업데이트하는 경우입니다.
소규모 업데이트
이 레이블이 있는 단계를 완료하여 패치 업데이트를 적용하십시오. 예를 들어, OpenShift Data Foundation 버전 4.12 을 유지하면서 4.12.15_1542_openshift 에서 4.12.16_1544_openshift 로 업데이트하는 경우입니다.

업그레이드 과정에서 버전을 건너뛰는 행위(예: 에서 4.8 로 4.12 )는 지원되지 않습니다.

계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

작업자 노드를 업데이트하기 전에 앱 데이터를 백업해야 합니다. 또한 한 번에 하나의 작업자 노드에 대해 다음 단계를 완료하도록 계획하십시오. 업데이트하려는 각 작업자 노드에 대해 단계를 반복하십시오.

클러스터 마스터 업데이트

주요 업데이트

  1. 작업자 노드를 새 주 버전으로 업데이트하는 경우 (예: 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
    
  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. 노드를 cordon하십시오. 노드를 cordon하면 이 노드에서 팟(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 값은 rook-ceph-osd 접두부 바로 뒤에 있는 팟 (Pod) 이름의 정수입니다. OSD가 세 개만 있는 클러스터 또는 OSD가 제거된 후 데이터의 세 복제본을 모두 복원하기에 공간이 충분하지 않은 클러스터에서 FORCE_OSD_REMOVAL 값을 true 로 변경해야 합니다.

  3. OSD가 제거되었는지 확인하려면 ocs-osd-removal-job팟 (Pod) 의 상태를 확인하십시오.

    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