15장. 스토리지 장치 교체
15.1. Red Hat OpenStack Platform 설치 관리자 프로비저닝 인프라에서 운영 또는 실패한 스토리지 장치 교체
Red Hat OpenStack Platform에 배포된 OpenShift Data Foundation에서 스토리지 장치를 교체하려면 다음 절차를 사용하십시오. 이 절차에서는 새 볼륨에서 새 PVC(영구 볼륨 클레임)를 생성하고 이전 오브젝트 스토리지 장치(OSD)를 제거하는 데 도움이 됩니다.
절차
교체해야 하는 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-6d77d6c7c6-m8xj6-m8xj6
은
OSD가 예약된 OpenShift Container Platform 노드입니다.참고교체할 OSD가 정상이면 포드의 상태가
Running
이 됩니다.OSD를 교체할 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
접두사 바로 뒤에 있는 Pod 이름의 정수입니다. 이 예에서 배포 이름은rook-ceph-osd-0
입니다.출력 예:
deployment.extensions/rook-ceph-osd-0 scaled
rook-ceph-osd
포드가 종료되었는지 확인합니다.$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
출력 예:
No resources found.
참고rook-ceph-osd
포드가종료
중이면force
옵션을 사용하여 Pod를 삭제합니다.$ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
출력 예:
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와 연결된 영구 볼륨은 실패하고 실패한 영구 볼륨 세부 정보를 가져와 다음 명령을 사용하여 삭제합니다.
$ oc get pv $ oc delete pv <failed-pv-name>
새 OSD를 추가할 수 있도록 클러스터에서 이전 OSD를 제거합니다.
이전
ocs-osd-removal
작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
출력 예:
job.batch "ocs-osd-removal-0" deleted
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 ID를 추가하여 두 개 이상의 OSD를 제거할 수 있습니다. (예: FAILED_OSD_IDS=0,1,2)
OSD를 제거한 후 데이터의 세 개의 복제본을 모두 복원할 수 있는 공간이 충분하지 않은 클러스터에서 FORCE_OSD_REMOVAL 값을 "true"로 변경해야 합니다.
주의이 단계에서는 클러스터에서 OSD가 완전히 제거됩니다.
osd_id_to_remove
의 올바른 값이 제공되었는지 확인합니다.
ocs-osd-removal-job
Pod의 상태를 확인하여 OSD가 성공적으로 제거되었는지 확인합니다.상태가
Completed
로 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'
출력 예:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
중요ocs-osd-removal-job
이 실패하고 Pod가 expectedCompleted
상태가 아닌 경우 Pod 로그에서 추가 디버깅을 확인합니다.예를 들면 다음과 같습니다.
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
설치 시 암호화가 활성화된 경우 해당 OpenShift Data Foundation 노드에서 제거된 OSD 장치에서
dm
매핑을 제거합니다.-crypt
managed device-mapperocs-osd-removal-job
Pod 로그에서 교체된 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"
1단계에서 식별된 각 노드에 대해 다음을 수행합니다.
스토리지 노드의 호스트에
디버그
포드 및chroot
를 만듭니다.$ oc debug node/<node name> $ chroot /host
이전 단계에서 식별된 PVC 이름을 기반으로 관련 장치 이름 찾기
sh-4.4# dmsetup ls| grep <pvc name> ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
매핑된 장치를 제거합니다.
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
참고권한이 충분하지 않아 위의 명령이 중단되면 다음 명령을 실행합니다.
-
CTRL+Z
를 눌러 위의 명령을 종료합니다. 중단된 프로세스의 PID를 찾습니다.
$ ps -ef | grep crypt
kill
명령을 사용하여 프로세스를 종료합니다.$ kill -9 <PID>
장치 이름이 제거되었는지 확인합니다.
$ dmsetup ls
-
ocs-osd-removal
작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-${osd_id_to_remove}
출력 예:
job.batch "ocs-osd-removal-0" deleted
검증 단계
새 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
Bound
상태인 새 PVC가 생성되었는지 확인합니다.$ oc get -n openshift-storage pvc
출력 예:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE db-noobaa-db-0 Bound pvc-b44ebb5e-3c67-4000-998e-304752deb5a7 50Gi RWO ocs-storagecluster-ceph-rbd 6d ocs-deviceset-0-data-0-gwb5l Bound pvc-bea680cd-7278-463d-a4f6-3eb5d3d0defe 512Gi RWO standard 94s ocs-deviceset-1-data-0-w9pjm Bound pvc-01aded83-6ef1-42d1-a32e-6ca0964b96d4 512Gi RWO standard 6d ocs-deviceset-2-data-0-7bxcq Bound pvc-5d07cd6c-23cb-468c-89c1-72d07040e308 512Gi RWO standard 6d
선택 사항: 클러스터에서 클러스터 전체 암호화가 활성화된 경우 새 OSD 장치가 암호화되었는지 확인합니다.
새 OSD 포드가 실행 중인 노드를 식별합니다.
$ oc get -o=custom-columns=NODE:.spec.nodeName pod/<OSD pod name>
예를 들면 다음과 같습니다.
oc get -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
이전 단계에서 식별된 각 노드에 대해 다음을 수행합니다.
디버그 포드를 만들고 선택한 호스트에 대해 chroot 환경을 엽니다.
$ oc debug node/<node name> $ chroot /host
"lsblk"를 실행하고
ocs-deviceset
이름 옆의 "crypt" 키워드를 확인하십시오.$ lsblk
OpenShift 웹 콘솔에 로그인하여 스토리지 대시보드를 확인합니다.
그림 15.1. 장치 교체 후 OpenShift Container Platform 스토리지 대시 보드에서 OSD 상태