OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2장. VMware에 배포된 동적으로 프로비저닝된 OpenShift Data Foundation
2.1. VMware 인프라에서 운영 또는 실패한 스토리지 장치 교체 링크 복사링크가 클립보드에 복사되었습니다!
새 볼륨에서 새 PVC(영구 볼륨 클레임)를 생성하고 VMware 인프라에 동적으로 배포되는 OpenShift Data Foundation에서 하나 이상의 VMI(가상 머신 디스크)를 교체해야 하는 경우 이전 오브젝트 스토리지 장치(OSD)를 제거합니다.
사전 요구 사항
데이터가 탄력적으로 구현되도록 합니다.
-
OpenShift 웹 콘솔에서 스토리지
데이터 생성을 클릭합니다. -
Storage Systems 탭을 클릭한 다음
ocs-storagecluster-storagesystem을 클릭합니다. - Block 및 File 대시보드의 상태 카드의 개요 탭에서 Data Resiliency 에 녹색 표시가 있는지 확인합니다.
-
OpenShift 웹 콘솔에서 스토리지
절차
교체해야 하는 OSD와 OSD가 예약된 OpenShift Container Platform 노드를 식별합니다.
oc get -n openshift-storage pods -l app=rook-ceph-osd -o wide
$ oc get -n openshift-storage pods -l app=rook-ceph-osd -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
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 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>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서는
rook-ceph-osd-0-6d77d6c7c6-m8xj6을 교체해야 하며compute-2는 OSD가 예약된 OpenShift Container Platform 노드입니다.참고교체할 OSD가 정상이면 포드의 상태가
Running이 됩니다.OSD 배포를 교체할 축소합니다.
OSD를 교체할 때마다
osd_id_to_remove매개변수를 OSD ID로 업데이트하고 이 단계를 반복합니다.osd_id_to_remove=0
$ osd_id_to_remove=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0$ oc scale -n openshift-storage deployment rook-ceph-osd-${osd_id_to_remove} --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
osd_id_to_remove는rook-ceph-osd접두사 바로 뒤의 Pod 이름의 정수입니다. 이 예에서 배포 이름은rook-ceph-osd-0입니다.출력 예:
deployment.extensions/rook-ceph-osd-0 scaled
deployment.extensions/rook-ceph-osd-0 scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow rook-ceph-osdPod가 종료되었는지 확인합니다.oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}$ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
No resources found.
No resources found.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요rook-ceph-osdPod가종료상태인 경우force옵션을 사용하여 Pod를 삭제합니다.oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0
$ oc delete pod rook-ceph-osd-0-6d77d6c7c6-m8xj6 --force --grace-period=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
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
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 deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 OSD를 추가할 수 있도록 클러스터에서 이전 OSD를 제거합니다.
이전
ocs-osd-removal작업을 삭제합니다.oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-jobCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-storage프로젝트로 이동합니다.oc project openshift-storage
$ oc project openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터에서 이전 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 -$ 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 -Copy to Clipboard Copied! Toggle word wrap Toggle overflow FORCE_OSD_REMOVAL 값은 OSD가 3개뿐인 클러스터에서 "true"로 변경해야 합니다. 그렇지 않으면 OSD가 제거된 후 데이터의 3개의 복제본을 모두 복원할 수 있는 공간이 충분하지 않은 클러스터에서도 사용해야 합니다.
주의이 단계에서는 클러스터에서 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
# oc get pod -l job-name=ocs-osd-removal-job -n openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSD 제거가 완료되었는지 확인합니다.
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
2022-05-10 06:50:04.501511 I | cephosd: completed removal of OSD 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요ocs-osd-removal-jobPod가 실패하고 Pod가 expectedCompleted상태가 아닌 경우 Pod 로그를 확인하여 추가 디버깅을 수행합니다.예를 들어 다음과 같습니다.
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1
# oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 설치 시 암호화가 활성화된 경우 해당 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’
$ oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 |egrep -i ‘pvc|deviceset’Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"
2021-05-12 14:31:34.666000 I | cephosd: removing the OSD PVC "ocs-deviceset-xxxx-xxx-xxx-xxx"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전에 식별한 각 노드에 대해 다음을 수행합니다.
스토리지 노드의 호스트에
디버그Pod 및chroot를 생성합니다.oc debug node/<node name>
$ oc debug node/<node name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <node name>노드의 이름입니다.
chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow
이전 단계에서 확인한 PVC 이름을 기반으로 관련 장치 이름을 찾습니다.
dmsetup ls| grep <pvc name>
$ dmsetup ls| grep <pvc name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <PVC 이름>PVC의 이름입니다.
출력 예:
ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
매핑된 장치를 제거합니다.
cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt
$ cryptsetup luksClose --debug --verbose ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcryptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요권한이 부족하여 위의 명령이 중단되면 다음 명령을 실행합니다.
-
Ctrl+Z를 눌러 위 명령을 종료합니다. 중지된 프로세스의 PID를 찾습니다.
ps -ef | grep crypt
$ ps -ef | grep cryptCopy to Clipboard Copied! Toggle word wrap Toggle overflow kill명령을 사용하여 프로세스를 종료합니다.kill -9 <PID>
$ kill -9 <PID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <PID>- 프로세스 ID입니다.
장치 이름이 제거되었는지 확인합니다.
dmsetup ls
$ dmsetup lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
ocs-osd-removal작업을 삭제합니다.oc delete -n openshift-storage job ocs-osd-removal-job
$ oc delete -n openshift-storage job ocs-osd-removal-jobCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
job.batch "ocs-osd-removal-job" deleted
job.batch "ocs-osd-removal-job" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
데이터 암호화와 함께 외부 키 관리 시스템(KMS)을 사용하는 경우 이제 고립 키로 이전 OSD 암호화 키를 Vault 서버에서 제거할 수 있습니다.
검증 단계
새 OSD가 실행되고 있는지 확인합니다.
oc get -n openshift-storage pods -l app=rook-ceph-osd
$ oc get -n openshift-storage pods -l app=rook-ceph-osdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
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
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 1d20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow Bound상태에 있는 새 PVC가 생성되었는지 확인합니다.oc get -n openshift-storage pvc
$ oc get -n openshift-storage pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-2s6w4 Bound pvc-7c9bcaf7-de68-40e1-95f9-0b0d7c0ae2fc 512Gi RWO thin 5m ocs-deviceset-1-0-q8fwh Bound pvc-9e7e00cb-6b33-402e-9dc5-b8df4fd9010f 512Gi RWO thin 1d20h ocs-deviceset-2-0-9v8lq Bound pvc-38cdfcee-ea7e-42a5-a6e1-aaa6d4924291 512Gi RWO thin 1d20h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ocs-deviceset-0-0-2s6w4 Bound pvc-7c9bcaf7-de68-40e1-95f9-0b0d7c0ae2fc 512Gi RWO thin 5m ocs-deviceset-1-0-q8fwh Bound pvc-9e7e00cb-6b33-402e-9dc5-b8df4fd9010f 512Gi RWO thin 1d20h ocs-deviceset-2-0-9v8lq Bound pvc-38cdfcee-ea7e-42a5-a6e1-aaa6d4924291 512Gi RWO thin 1d20hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 클러스터에서 클러스터 전체 암호화가 활성화된 경우 새 OSD 장치가 암호화되었는지 확인합니다.
새 OSD 포드가 실행 중인 노드를 식별합니다.
oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/<OSD-pod-name>
$ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/<OSD-pod-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <OSD-pod-name>OSD 포드의 이름입니다.
예를 들어 다음과 같습니다.
oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqm
$ oc get -n openshift-storage -o=custom-columns=NODE:.spec.nodeName pod/rook-ceph-osd-0-544db49d7f-qrgqmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
NODE compute-1
NODE compute-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이전 단계에서 식별된 각 노드에 대해 다음을 수행합니다.
디버그 Pod를 만들고 선택한 호스트에 대해 chroot 환경을 엽니다.
oc debug node/<node name>
$ oc debug node/<node name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <node name>노드의 이름입니다.
chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ocs-deviceset이름 옆에 있는crypt키워드를 확인합니다.lsblk
$ lsblkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- OpenShift 웹 콘솔에 로그인하고 스토리지 대시보드를 확인합니다.