3장. Red Hat Virtualization에 배포된 동적으로 프로비저닝된 OpenShift Data Foundation
3.1. Red Hat Virtualization 설치 관리자 프로비저닝 인프라에서 운영되거나 실패한 스토리지 장치 교체
새 볼륨에 새 PVC(영구 볼륨 클레임)를 생성하고 이전 개체 스토리지 장치(OSD)를 제거합니다.
사전 요구 사항
데이터가 탄력적인지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
Data Foundation 을 클릭합니다. -
Storage Systems 탭을 클릭한 다음
ocs-storagecluster-storagesystem
을 클릭합니다. - 블록 및 파일 대시보드의 상태 카드 개요 탭에서 Data Resiliency 에 녹색 표시가 있는지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
절차
교체해야 하는 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가 정상이면 포드 상태가
Running
이 됩니다.OSD를 교체할 OSD 배포를 축소합니다.
OSD를 교체할 때마다
osd_id_to_remove
매개변수를 OSD ID로 업데이트하고 이 단계를 반복합니다.$ 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
Pod가 종료되었는지 확인합니다.$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}
출력 예:
No resources found.
중요rook-ceph-osd
Pod가종료
상태인 경우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를 추가할 수 있도록 클러스터에서 이전 OSD를 제거합니다.
이전
ocs-osd-removal
작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-job
출력 예:
job.batch "ocs-osd-removal-job"
openshift-storage
프로젝트로 이동합니다.$ oc project openshift-storage
클러스터에서 이전 OSD를 제거합니다.
$ oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=${osd_id_to_remove} -p FORCE_OSD_REMOVAL=false |oc create -n openshift-storage -f -
OSD가 3개뿐인 클러스터에서 FORCE_OSD_REMOVAL 값을 "true"로 변경해야 합니다. OSD를 제거한 후 3개의 데이터 복제본을 모두 복원할 수 있는 공간이 충분하지 않은 클러스터에서는 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가 예상Completed
상태가 아닌 경우 Pod 로그를 확인하여 추가 디버깅을 확인합니다.예를 들면 다음과 같습니다.
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1'
설치 시 암호화를 활성화한 경우 해당 OpenShift Data Foundation 노드에서 제거된 OSD 장치에서
dm-crypt
manageddevice-mapper
매핑을 제거합니다.ocs-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"
이전에 식별한 각 노드에 대해 다음을 수행합니다.
스토리지 노드의 호스트에
디버그
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-xxx-xxx-xxx-xxx-block-dmcrypt
중요충분하지 않은 권한으로 인해 위의 명령이 정지되면 다음 명령을 실행합니다.
-
CTRL+Z
를 눌러 위 명령을 종료합니다. 정지된 프로세스의 PID를 찾습니다.
$ ps -ef | grep crypt
kill
명령을 사용하여 프로세스를 종료합니다.$ kill -9 <PID>
<PID>
- 는 프로세스 ID입니다.
장치 이름이 제거되었는지 확인합니다.
$ dmsetup ls
-
ocs-osd-removal
작업을 삭제합니다.$ oc delete -n openshift-storage job ocs-osd-removal-job
출력 예:
job.batch "ocs-osd-removal-job" deleted
데이터 암호화와 함께 외부 키 관리 시스템(KMS)을 사용하는 경우 이제 고립된 키가기 때문에 이전 OSD 암호화 키를 Vault 서버에서 제거할 수 있습니다.
검증 단계
실행 중인 새 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
선택 사항: 클러스터에서 클러스터 전체 암호화를 사용하는 경우 새 OSD 장치가 암호화되었는지 확인합니다.
새 OSD 포드가 실행 중인 노드를 식별합니다.
$ 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 웹 콘솔에 로그인하고 스토리지 대시보드를 확인합니다.