5장. 로컬 스토리지 장치를 사용하여 배포된 OpenShift Data Foundation

5.1. 로컬 스토리지 장치에서 지원하는 클러스터에서 운영 또는 실패한 스토리지 장치 교체

다음 인프라의 로컬 스토리지 장치를 사용하여 배포된 OpenShift Data Foundation의 OSD(오브젝트 스토리지 장치)를 교체할 수 있습니다.

  • 베어 메탈
  • VMware
  • Red Hat Virtualization
참고

하나 이상의 기본 스토리지 장치를 교체해야 할 수 있습니다.

사전 요구 사항

  • 교체 장치는 장치 교체와 유사한 인프라 및 리소스로 구성된 것이 좋습니다.
  • 데이터가 탄력적인지 확인합니다.

    • OpenShift 웹 콘솔에서 스토리지Data Foundation 을 클릭합니다.
    • Storage Systems 탭을 클릭한 다음 ocs-storagecluster-storagesystem 을 클릭합니다.
    • 블록 및 파일 대시보드의 상태 카드 개요 탭에서 Data Resiliency 에 녹색 표시가 있는지 확인합니다.

절차

  1. 관련 작업자 노드에서 기본 스토리지 장치를 제거합니다.
  2. 관련 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-6d77d6c7c6-m8xj6 을 교체해야 하며 compute-2 는 OSD가 예약된 OpenShift Container Platform 노드입니다.

  3. 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_removerook-ceph-osd 접두사 직후 Pod 이름의 정수입니다. 이 예제에서 배포 이름은 rook-ceph-osd-0 입니다.

    출력 예:

    deployment.extensions/rook-ceph-osd-0 scaled
  4. rook-ceph-osd Pod가 종료되었는지 확인합니다.

    $ oc get -n openshift-storage pods -l ceph-osd-id=${osd_id_to_remove}

    출력 예:

    No resources found in openshift-storage namespace.
    중요

    rook-ceph-osd Pod가 몇 분 이상 종료 중이면 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
  5. 새 OSD를 추가할 수 있도록 클러스터에서 이전 OSD를 제거합니다.

    1. 이전 ocs-osd-removal 작업을 삭제합니다.

      $ oc delete -n openshift-storage job ocs-osd-removal-job

      출력 예:

      job.batch "ocs-osd-removal-job" deleted
    2. openshift-storage 프로젝트로 이동합니다.

      $ oc project openshift-storage
    3. 클러스터에서 이전 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 의 올바른 값이 제공되었는지 확인합니다.

  6. ocs-osd-removal-job Pod의 상태를 확인하여 OSD가 성공적으로 제거되었는지 확인합니다.

    Completed 상태로 인해 OSD 제거 작업이 성공했는지 확인합니다.

    $ oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
  7. 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
  8. 설치 시 암호화를 활성화한 경우 해당 OpenShift Data Foundation 노드에서 제거된 OSD 장치에서 dm-crypt managed device-mapper 매핑을 제거합니다.

    1. 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"
    2. 이전에 식별한 각 노드에 대해 다음을 수행합니다.

      1. 스토리지 노드의 호스트에 디버그 Pod와 chroot 를 만듭니다.

        $ oc debug node/<node name>
        <node name>

        노드의 이름입니다.

        $ chroot /host
      2. 이전 단계에서 식별한 PVC 이름을 기반으로 관련 장치 이름을 찾습니다.

        $ dmsetup ls| grep <pvc name>
        <pvc name>

        PVC의 이름입니다.

        출력 예:

        ocs-deviceset-xxx-xxx-xxx-xxx-block-dmcrypt (253:0)
      3. 매핑된 장치를 제거합니다.

        $ cryptsetup luksClose --debug --verbose <ocs-deviceset-name>
        <ocs-deviceset-name>

        이전 단계에서 식별한 PVC 이름을 기반으로 하는 관련 장치의 이름입니다.

        중요

        충분하지 않은 권한으로 인해 위의 명령이 정지되면 다음 명령을 실행합니다.

        • CTRL+Z 를 눌러 위 명령을 종료합니다.
        • 정지된 프로세스의 PID를 찾습니다.

          $ ps -ef | grep crypt
        • kill 명령을 사용하여 프로세스를 종료합니다.

          $ kill -9 <PID>
          <PID>
          는 프로세스 ID입니다.
        • 장치 이름이 제거되었는지 확인합니다.

          $ dmsetup ls
  9. 삭제해야 하는 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-1
  10. PV를 삭제합니다.

    $ oc delete pv <pv_name>
  11. 노드에 물리적으로 새 장치를 추가합니다.
  12. deviceInclusionSpec 과 일치하는 장치의 PV 프로비저닝을 추적합니다. PV를 프로비저닝하는 데 몇 분이 걸릴 수 있습니다.

    $ oc -n openshift-local-storage describe localvolumeset localblock

    출력 예:

    [...]
    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
                                                         disk

    PV가 프로비저닝되면 PV에 대해 새 OSD Pod가 자동으로 생성됩니다.

  13. ocs-osd-removal 작업을 삭제합니다.

    $ oc delete -n openshift-storage job ocs-osd-removal-job

    출력 예:

    job.batch "ocs-osd-removal-job" deleted
참고

데이터 암호화와 함께 외부 키 관리 시스템(KMS)을 사용하는 경우 이제 고립된 키가기 때문에 이전 OSD 암호화 키를 Vault 서버에서 제거할 수 있습니다.

검증 단계

  1. 실행 중인 새 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-operator Pod를 다시 시작하여 조정을 강제 적용합니다.

    $ oc delete pod -n openshift-storage -l app=rook-ceph-operator

    출력 예:

    pod "rook-ceph-operator-6f74fb5bff-2d982" deleted
  2. 새 PVC가 생성되었는지 확인합니다.

    $ oc get -n openshift-storage pvc | grep localblock

    출력 예:

    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
  3. 선택 사항: 클러스터에서 클러스터 전체 암호화를 사용하는 경우 새 OSD 장치가 암호화되었는지 확인합니다.

    1. 새 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
    2. 이전 단계에서 확인한 각 노드에 대해 다음을 수행합니다.

      1. 디버그 Pod를 생성하고 선택한 호스트에 대한 chroot 환경을 엽니다.

        $ oc debug node/<node name>
        <node name>

        노드의 이름입니다.

        $ chroot /host
      2. ocs-deviceset 이름 옆에 crypt 키워드가 있는지 확인합니다.

        $ lsblk
  4. OpenShift 웹 콘솔에 로그인하고 스토리지 대시보드에서 OSD 상태를 확인합니다.
참고

전체 데이터 복구는 복구되는 데이터 볼륨에 따라 더 오래 걸릴 수 있습니다.