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. 클러스터에 대한 컨텍스트를 설정하십시오.
작업자 노드를 업데이트하기 전에 앱 데이터를 백업해야 합니다. 또한 한 번에 하나의 작업자 노드에 대해 다음 단계를 완료하도록 계획하십시오. 업데이트하려는 각 작업자 노드에 대해 단계를 반복하십시오.
스토리지 클러스터의 상태를 확인하세요
주요 업데이트 소규모 업데이트 작업자 교체
-
다음 명령을 실행하여 포드를 나열하십시오.
openshift-storage네임스페이스의 모든 파드가 정상 상태인지 확인합니다. "실행 중" 또는 "완료" 상태가 아닌 모든 파드를 처리합니다.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 스토리지의 상태를 확인하십시오. 상태가
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 포드를 다운시키면 사용자 데이터가 위험에 처할 수 있습니다.
클러스터 마스터 업데이트
주요 업데이트
-
작업자 노드를 새 주 버전으로 업데이트하는 경우 (예:
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 -
마스터 업데이트가 완료될 때까지 기다리십시오.
업데이트 또는 교체할 스토리지 노드를 결정하세요
주요 업데이트 소규모 업데이트 작업자 교체
-
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 스케일링 다운
주요 업데이트 소규모 업데이트 작업자 교체
-
이전 단계에서 찾은 각 작업자 노드에 대해
rook-ceph-mon및rook-ceph-osd배치를 찾으십시오.oc get pods -n openshift-storage -o wide | grep -i <node_name>노바 포드가 배수 중에 걸리면, 포드를 NooBaa 수동으로 삭제하여 다른 노드에서 스케줄링되도록 할 수 있습니다.
-
남은 누바 파드는 다음 순서대로 삭제합니다.
noobaa-db noobaa-core noobaa-endpoint noobaa-operator -
이전 단계에서 찾은 배치를 축소하십시오.
oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storageoc scale deployment rook-ceph-osd-2 --replicas=0 -n openshift-storageoc scale deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME --replicas=0 -n openshift-storage
작업자 노드를 연결하고 비우십십시오.
주요 업데이트 소규모 업데이트 작업자 교체
-
노드를 cordon하십시오. 노드를 cordon하면 이 노드에서 팟(Pod)이 스케줄되지 않습니다.
oc adm cordon NODE_NAME출력 예
node/10.241.0.4 cordoned -
모든 팟(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" -
배출이 완료될 때까지 기다린 다음, 다음 단계를 수행하여 워커 노드를 업데이트하십시오.
베어 메탈 워커 노드의 영구 볼륨 정리
주요 업데이트 소규모 업데이트 작업자 교체
베어 메탈 워커 노드만 해당: 베어 메탈 워커 노드를 업데이트하거나 교체하는 경우, 다음 단계를 수행하여 영구 볼륨을 정리하고 새 배포를 위해 노드를 준비하십시오. 가상 서버 인스턴스(VSI) 워커 노드를 사용 중인 경우, 이 섹션을 건너뛰고 ‘워커 노드 업데이트’ 단계로 진행하십시오.
시작하기 전에, 워커 노드를 격리하고 데이터를 백업하는 이전 단계를 모두 완료했는지 확인하십시오.
-
업데이트하려는 노드에서 ‘
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 -
Released상태인 PV가 있다면 이를 삭제하십시오.<persistent_volume>을 이전 단계에서 확인한 PV의 이름으로 바꾸십시오.oc delete pv <persistent_volume>명령 예
oc delete pv local-pv-d6bf175b출력 예
persistentvolume "local-pv-d6bf175b" deleted -
새로운 영구 볼륨 생성을 준비하기 위해 베어 메탈 노드의 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 -
디버그 포드 내에서 호스트의 루트 디렉터리로 이동합니다.
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
이 단계들을 완료하면, 베어 메탈 노드가 재시작된 후 새로운 영구 볼륨이 자동으로 생성되고 스케줄링됩니다. 다음 섹션으로 넘어가 워커 노드를 업데이트하십시오.
워커 노드 업데이트
주요 업데이트 소규모 업데이트 작업자 교체
-
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 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
-
워커 노드가 다시 로드되거나 교체될 때까지 기다린 다음 워커 노드를 나열합니다. 이 프로세스에는 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
이전 노드에서 자원 정리
주요 업데이트 소규모 업데이트 작업자 교체
-
교체된 노드에 OSD 파드가
running상태로 표시되는지 확인합니다. 파드가 실행 중이면 7단계를 계속 진행합니다. 포드에 실패한 경우 다음을 수행하세요. steps.If 하나 이상의 OSD 포드가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값은rook-ceph-osd접두부 바로 뒤에 있는 팟 (Pod) 이름의 정수입니다. OSD가 세 개만 있는 클러스터 또는 OSD가 제거된 후 데이터의 세 복제본을 모두 복원하기에 공간이 충분하지 않은 클러스터에서FORCE_OSD_REMOVAL값을true로 변경해야 합니다. -
ocs-osd-removal-job팟 (Pod) 의 상태를 확인하여 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
새 스토리지 노드 추가
새 스토리지 노드를 추가하기 전에 클러스터의 모든 스토리지 노드에 대해 이전 단계를 완료했는지 확인하세요.
주요 업데이트 소규모 업데이트 작업자 교체
-
설치 중에 노드 이름을 지정하여 ODF 배치를 작업자 노드의 서브세트로 제한한 경우 새 이름을 포함하도록
ocsclusterCRD를 업데이트해야 합니다.구성을 특정 워커 노드로만 제한하지 않았다면
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 파드가 실행 중인지 확인합니다.
oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
OpenShift Data Foundation 추가 기능 업데이트
주요 업데이트
-
기존 버전을 확인하십시오.
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
클러스터 리소스 업데이트
주요 업데이트
-
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