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을 교체해야 하며,compute-2는 OSD가 예약된 OpenShift Container Platform 노드입니다.참고교체할 OSD가 정상이면 Pod 상태가
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접두사 바로 직후 포드 이름에 있는 정수입니다. 이 예에서 배포 이름은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-osdPod가종료상태인 경우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} |oc create -n openshift-storage -f -명령에 쉼표로 구분된 OSD ID를 추가하여 두 개 이상의 OSD를 제거할 수 있습니다. 예를 들면 다음과 같습니다. FAILED_OSD_IDS=0,1,2)
주의이 단계에서는 OSD가 클러스터에서 완전히 제거됩니다.
osd_id_to_remove의 올바른 값이 제공되는지 확인합니다.
ocs-osd-removal-jobPod의 상태를 확인하여 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관리 장치-mapperocs-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"
단계 #1에서 식별된 각 노드에 대해 다음을 수행합니다.
스토리지 노드의 호스트에
디버그Pod 및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
이전 단계에서 확인한 각 노드에서 다음을 수행합니다.
디버그 Pod를 생성하고 선택한 호스트에 대한 chroot 환경을 엽니다.
$ oc debug node/<node name> $ chroot /host
"lsblk"를 실행하고
ocs-deviceset이름 옆에 "crypt" 키워드를 확인합니다.$ lsblk
OpenShift 웹 콘솔에 로그인하고 스토리지 대시보드를 확인합니다.
그림 15.1. 장치 교체 후 OpenShift Container Platform 스토리지 대시보드의 OSD 상태
