5장. 로컬 스토리지 장치를 사용하여 배포된 OpenShift Data Foundation
5.1. 로컬 스토리지 장치에서 지원하는 클러스터에서 작동 또는 실패한 스토리지 장치 교체 링크 복사링크가 클립보드에 복사되었습니다!
다음 인프라에서 로컬 스토리지 장치를 사용하여 배포된 OpenShift Data Foundation의 OSD(오브젝트 스토리지 장치)를 교체할 수 있습니다.
- 베어 메탈
- VMware
하나 이상의 기본 스토리지 장치를 교체해야 할 수 있습니다.
사전 요구 사항
- 교체 장치는 교체되는 장치와 유사한 인프라 및 리소스로 구성하는 것이 좋습니다.
데이터의 복원력이 있는지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
데이터 Foundation 을 클릭합니다. -
Storage Systems 탭을 클릭한 다음
ocs-storagecluster를 클릭합니다. - 블록 및 파일 대시보드의 상태 카드 의 개요 탭에서 데이터 복원에 녹색 눈금이 있는지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
프로세스
- 관련 작업자 노드에서 기본 스토리지 장치를 제거합니다.
관련 OSD Pod가 CrashLoopBackOff 상태로 이동했는지 확인합니다.
교체해야 하는 OSD와 OSD가 예약된 OpenShift Container Platform 노드를 식별합니다.
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide출력 예:
rook-ceph-osd-0-6d77d6c7c6-m8xj6 0/1 CrashLoopBackOff 0 24h 10.129.0.16 compute-2 <none> <none> rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 24h 10.128.2.24 compute-0 <none> <none> rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 24h 10.130.0.18 compute-1 <none> <none>이 예에서
rook-ceph-osd-0-6d77d6c7c7c6-m8xj6을 교체해야 하며compute-2는 OSD가 예약된 OpenShift Container Platform 노드입니다.rook-ceph-operator배포를 축소합니다.$ oc -n openshift-storage scale deployment rook-ceph-operator --replicas=0OSD를 교체할 OSD 배포를 축소합니다.
$ osd_id_to_remove=0$ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0여기서
osd_id_to_remove는rook-ceph-osd접두사 직후 포드 이름의 정수입니다. 이 예에서 배포 이름은rook-ceph-osd-0입니다.출력 예:
deployment.extensions/rook-ceph-osd-0 scaledrook-ceph-osdPod가 종료되었는지 확인합니다.$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}출력 예:
No resources found in openshift-storage namespace.중요rook-ceph-osdPod가 몇 분 이상종료상태인 경우force옵션을 사용하여 Pod를 삭제합니다.$ oc delete -n openshift-storage pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --grace-period=0 --force출력 예:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "rook-ceph-osd-0-6d77d6c7c6-m8xj6" force deleted새 OSD를 추가할 수 있도록 클러스터에서 이전 OSD를 제거합니다.
이전
ocs-osd-removal작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-job출력 예:
job.batch "ocs-osd-removal-job" deleted참고다음 단계로 이동하기 전에 위의 명령은
Completed상태에 도달해야 합니다. 이 작업은 10분 이상 걸릴 수 있습니다.openshift-storage프로젝트로 이동합니다.$ oc project openshift-storage클러스터에서 이전 OSD를 제거합니다.
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} FORCE_OSD_REMOVAL=false |oc create -n openshift-storage -f -OSD가 3개만 있는 클러스터의 FORCE_OSD_REMOVAL 값을 "true"로 변경해야 합니다. OSD를 제거한 후 데이터의 세 개의 복제본을 모두 복원할 수 있는 공간이 부족한 클러스터입니다.
주의이 단계로 OSD가 클러스터에서 완전히 제거됩니다.
osd_id_to_remove의 올바른 값이 제공되었는지 확인합니다.
ocs-osd-removal-jobPod의 상태를 확인하여 OSD가 성공적으로 제거되었는지 확인합니다.상태가
Completed이면 OSD 제거 작업이 성공했는지 확인합니다.$ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storageOSD 제거가 완료되었는지 확인합니다.
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'출력 예:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0중요ocs-osd-removal-job이 실패하고 Pod가 예상Completed상태에 없는 경우 Pod 로그를 확인하여 추가 디버깅을 확인합니다.예를 들면 다음과 같습니다.
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1설치 시 암호화를 활성화한 경우 해당 OpenShift Data Foundation 노드에서 제거된 OSD에서
dm매핑을 제거합니다.-crypt관리 장치-매퍼ocs-osd-removal-jobPod의 로그에서 교체된 OSD의 PVC(영구 볼륨 클레임) 이름을 가져옵니다.$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i 'pvc|deviceset'출력 예:
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"이전에 식별된 각 노드에 대해 다음을 수행합니다.
스토리지 노드의 호스트에
디버그Pod 및chroot를 생성합니다.$ oc debug node/<node name><node name>노드의 이름입니다.
$ chroot /host
이전 단계에서 식별된 PVC 이름을 기반으로 관련 장치 이름을 찾습니다.
$ dmsetup ls| grep <pvc name><pvc name>PVC의 이름입니다.
출력 예:
ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
매핑된 장치를 제거합니다.
$ cryptsetup luksClose --debug --verbose <ocs-deviceset-name><ocs-deviceset-name>이전 단계에서 식별한 PVC 이름을 기반으로 하는 관련 장치의 이름입니다.
중요권한이 부족하여 위의 명령이 중단되면 다음 명령을 실행합니다.
-
Ctrl+Z를 눌러 위 명령을 종료합니다. 중단된 프로세스의 PID를 찾습니다.
$ ps -ef | grep cryptkill명령을 사용하여 프로세스를 종료합니다.$ kill -9 <PID><PID>- 프로세스 ID입니다.
장치 이름이 제거되었는지 확인합니다.
$ dmsetup ls
-
삭제해야 하는 PV(영구 볼륨)를 찾습니다.
$ oc get pv -L kubernetes.io/hostname | grep <storageclass-name> | grep Released출력 예:
local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1PV를 삭제합니다.
$ oc delete pv <pv_name>- 새 장치를 노드에 물리적으로 추가합니다.
deviceInclusionSpec과 일치하는 장치에 대한 PV 프로비저닝을 추적합니다. PV를 프로비저닝하는 데 몇 분이 걸릴 수 있습니다.$ oc -n openshift-local-storage describe localvolumeset <lvs-name>출력 예:
[...] Status: Conditions: Last Transition Time: 2020-11-17T05:03:32Z Message: DiskMaker: Available, LocalProvisioner: Available Status: True Type: DaemonSetsAvailable Last Transition Time: 2020-11-17T05:03:34Z Message: Operator reconciled successfully. Status: True Type: Available Observed Generation: 1 Total Provisioned Device Count: 4 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Discovered 2m30s (x4 localvolumeset- node.example.com - NewDevice over 2m30s) symlink-controller found possible matching disk, waiting 1m to claim Normal FoundMatch 89s (x4 localvolumeset- node.example.com - ingDisk over 89s) symlink-controller symlinking matching diskPV가 프로비저닝되면 PV에 대해 새 OSD Pod가 자동으로 생성됩니다.
ocs-osd-removal작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-job출력 예:
job.batch "ocs-osd-removal-job" deleted참고데이터 암호화와 함께 외부 키 관리 시스템(KMS)을 사용하는 경우 이전 OSD 암호화 키를 Vault 서버에서 제거할 수 있습니다.
rook-ceph-operator배포를 확장합니다.$ oc -n openshift-storage scale deployment rook-ceph-operator --replicas=1[선택 사항] Ceph 클러스터 상태를 확인하고 현재 교체된 이전 실패한 OSD와 관련된 충돌 보고서가 있는지 확인합니다.
모든 충돌 보고서를 나열합니다.
$ oc exec -it $(oc get pod -n openshift-storage -l app=rook-ceph-operator -o name) -n openshift-storage -- ceph crash ls -c /var/lib/rook/openshift-storage/openshift-storage.config샘플 출력:
ID ENTITY NEW 2025-09-25T07:12:45Z_1234567890 osd.5 * 2025-09-25T08:20:11Z_abcdef1234 mon.a *이전 단계에서 실패한 OSD에 대한 필터 충돌입니다. 예를 들어 실패한 OSD가
osd.5인 경우 다음을 실행합니다.$ oc exec -it $(oc get pod -n openshift-storage -l app=rook-ceph-operator -o name) -n openshift-storage -- ceph crash ls -c /var/lib/rook/openshift-storage/openshift-storage.config | grep osd.5출력의 specif 크래시 보고서를 기록해 둡니다.
특정 충돌을 보관합니다. 이전 단계의 크래시 ID를 사용합니다.
$ oc exec -it $(oc get pod -n openshift-storage -l app=rook-ceph-operator -o name) -n openshift-storage -- ceph crash archive <crash-id> -c /var/lib/rook/openshift-storage/openshift-storage.configcrash-id를 크래시 보고서로 교체합니다.크래시가 보관되었는지 확인합니다.
$ oc exec -it $(oc get pod -n openshift-storage -l app=rook-ceph-operator -o name) -n openshift-storage -- ceph crash ls -c /var/lib/rook/openshift-storage/openshift-storage.config
검증 단계
새 OSD가 실행 중인지 확인합니다.
$ oc get -n openshift-storage pods -l app=rook-ceph-osd출력 예:
rook-ceph-osd-0-5f7f4747d4-snshw 1/1 Running 0 4m47s rook-ceph-osd-1-85d99fb95f-2svc7 1/1 Running 0 1d20h rook-ceph-osd-2-6c66cdb977-jp542 1/1 Running 0 1d20h중요새 OSD가 몇 분 후에
Running으로 표시되지 않으면rook-ceph-operatorPod를 다시 시작하여 조정을 강제 적용합니다.$ oc delete pod -n openshift-storage -l app=rook-ceph-operator출력 예:
pod "rook-ceph-operator-6f74fb5bff-2d982" deleted새 PVC가 생성되었는지 확인합니다.
$ oc get -n openshift-storage pvc | grep <lvs-name>출력 예:
ocs-deviceset-0-0-c2mqb Bound local-pv-b481410 1490Gi RWO localblock 5m ocs-deviceset-1-0-959rp Bound local-pv-414755e0 1490Gi RWO localblock 1d20h ocs-deviceset-2-0-79j94 Bound local-pv-3e8964d3 1490Gi RWO localblock 1d20h선택 사항: 클러스터에서 클러스터 전체 암호화가 활성화된 경우 새 OSD가 암호화되었는지 확인합니다.
새 OSD pod가 실행 중인 노드를 식별합니다.
$ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/<OSD-pod-name><OSD-pod-name>OSD 포드의 이름입니다.
예를 들면 다음과 같습니다.
$ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm출력 예:
NODE compute-1
이전 단계에서 식별한 각 노드에 대해 다음을 수행합니다.
디버그 Pod를 생성하고 선택한 호스트에 대해 chroot 환경을 엽니다.
$ oc debug node/<node name><node name>노드의 이름입니다.
$ chroot /host
ocs-deviceset이름 옆에crypt키워드가 있는지 확인합니다.$ lsblk
- OpenShift 웹 콘솔에 로그인하고 스토리지 대시보드에서 OSD 상태를 확인합니다.
복구 중인 데이터 볼륨에 따라 전체 데이터 복구 시간이 더 오래 걸릴 수 있습니다.