OpenShift Data Foundation을 사용하는 VPC 워커 노드 업데이트 또는 교체

가상 사설 클라우드

OpenShift Data Foundation과 같은 스토리지 솔루션이 있는 VPC 클러스터의 경우 각 작업자 노드를 순차적으로 묶고, 비우고, 업데이트해야 합니다. 베어 메탈 워커 노드의 경우, 이제 worker replace`` 대신 worker reload 명령어를 사용할 수 있습니다. OpenShift Data Foundation을 클러스터 내 일부 워커 노드에 배포한 경우, 워커 노드를 업데이트한 후에는 ocscluster 리소스를 편집하여 새로운 워커 노드를 포함시켜야 합니다.

다음 튜토리얼에서는 메이저 및 마이너 업데이트와 워커 노드 업데이트를 모두 다룹니다.

주요 업데이트
이 레이블이 있는 단계를 완료하여 주요 업데이트를 적용하십시오. 예를 들어, 작업자 노드를 새 주요 버전 (예: 4.11 에서 4.12 로, 그리고 OpenShift Data Foundation에서 4.11 에서 4.12 로) 으로 업데이트하는 경우입니다.
소규모 업데이트
이 레이블이 있는 단계를 완료하여 패치 업데이트를 적용하십시오. 예를 들어, 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. 다음 명령을 실행하여 포드를 나열하십시오. openshift-storage 네임스페이스의 모든 파드가 정상 상태인지 확인합니다. "실행 중" 또는 "완료" 상태가 아닌 모든 파드를 처리합니다.

    	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 스토리지의 상태를 확인하십시오. 상태가 HEALTH_OK, 모든 OSD가 upIN, 모든 pgsactive+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 포드를 다운시키면 사용자 데이터가 위험에 처할 수 있습니다.

클러스터 마스터 업데이트

주요 업데이트

  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
    

스토리지 클러스터의 상태가 정상인지 확인하십시오

주요 업데이트 소규모 업데이트 작업자 교체

다음 명령을 실행하여 스토리지 클러스터 상태를 확인합니다.

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 수동으로 삭제하여 다른 노드에서 스케줄링되도록 할 수 있습니다.

  2. 남은 누바 파드는 다음 순서대로 삭제합니다.

       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. 노드를 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. 배출이 완료될 때까지 기다린 다음, 다음 단계를 수행하여 워커 노드를 업데이트하십시오.

베어 메탈 워커 노드의 영구 볼륨 정리

주요 업데이트 소규모 업데이트 작업자 교체

베어 메탈 워커 노드만 해당: 베어 메탈 워커 노드를 업데이트하거나 교체하는 경우, 다음 단계를 수행하여 영구 볼륨을 정리하고 새 배포를 위해 노드를 준비하십시오. 가상 서버 인스턴스(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. Released 상태인 PV가 있다면 이를 삭제하십시오. <persistent_volume> 을 이전 단계에서 확인한 PV의 이름으로 바꾸십시오.

    	oc delete pv <persistent_volume>
    

    명령 예

    	oc delete pv local-pv-d6bf175b
    

    출력 예

    	persistentvolume "local-pv-d6bf175b" deleted
    
  3. 새로운 영구 볼륨 생성을 준비하기 위해 베어 메탈 노드의 ODF 디스크를 초기화하십시오. 업데이트 중인 노드에서 디버그 포드를 시작합니다. <node-name> 을 사용자의 베어 메탈 워커 노드 이름으로 바꾸십시오.

    	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 reload 명령을 사용합니다. 가상 서버 인스턴스(VSI) 워커 노드의 경우 worker replace 명령을 사용합니다.

베어 메탈 워커 노드: worker reload 명령을 사용하여 워커 노드를 다시 로드합니다. 이 명령어는 VPC 베어 메탈 워커에서 지원됩니다. sh {: pre} ibmcloud oc worker reload --worker kube-*** VSI 워커 노드: 마이너 업데이트 워커 노드를 교체하고 최신 패치 업데이트를 적용하는 예제 명령어입니다. sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker kube-*** --update VSI 워커 노드: 작업자 교체 최신 패치 업데이트를 적용하지 않고 작업자 노드를 교체하는 예제 명령어입니다. 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 파드가 running 상태로 표시되는지 확인합니다. 파드가 실행 중이면 7단계를 계속 진행합니다. 포드에 실패한 경우 다음을 수행하세요. steps.If 하나 이상의 OSD 포드가 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 값은 rook-ceph-osd 접두부 바로 뒤에 있는 팟 (Pod) 이름의 정수입니다. 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 파드가 실행 중인지 확인합니다.

    	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