4.2. Azure를 사용하는 영구 스토리지

OpenShift Container Platform은 Microsoft Azure Disk 볼륨을 지원합니다. Azure를 사용하여 영구 스토리지로 OpenShift Container Platform 클러스터를 프로비저닝할 수 있습니다. Kubernetes 및 Azure에 대해 어느 정도 익숙한 것으로 가정합니다. Kubernetes 영구 볼륨 프레임워크를 사용하면 관리자는 영구 스토리지로 클러스터를 프로비저닝하고 사용자가 기본 인프라에 대한 지식이 없어도 해당 리소스를 요청할 수 있습니다. Azure 디스크 볼륨은 동적으로 프로비저닝할 수 있습니다. 영구 볼륨은 단일 프로젝트 또는 네임스페이스에 바인딩되지 않으며, OpenShift Container Platform 클러스터에서 공유할 수 있습니다. 영구 볼륨 클레임은 프로젝트 또는 네임스페이스에 고유하며 사용자가 요청할 수 있습니다.

중요

OpenShift Container Platform 4.11 이상에서는 동등한 CSI 드라이버로 Azure Disk in-tree 볼륨 플러그인에 대한 자동 마이그레이션을 제공합니다.

CSI 자동 마이그레이션이 원활해야 합니다. 마이그레이션은 영구 볼륨, 영구 볼륨 클레임 및 스토리지 클래스와 같은 기존 API 오브젝트를 사용하는 방법을 변경하지 않습니다. 마이그레이션에 대한 자세한 내용은 CSI 자동 마이그레이션 을 참조하십시오.

중요

인프라의 스토리지의 고가용성은 기본 스토리지 공급자가 담당합니다.

추가 리소스

4.2.1. Azure 스토리지 클래스 생성

스토리지 클래스는 스토리지 수준 및 사용량을 구분하고 조정하는 데 사용됩니다. 스토리지 클래스를 정의하면 사용자는 동적으로 프로비저닝된 영구 볼륨을 얻을 수 있습니다.

절차

  1. OpenShift Container Platform 콘솔에서 스토리지스토리지 클래스를 클릭합니다.
  2. 스토리지 클래스 개요에서 스토리지 클래스 만들기를 클릭합니다.
  3. 표시되는 페이지에 원하는 옵션을 정의합니다.

    1. 스토리지 클래스를 참조할 이름을 입력합니다.
    2. 선택적 설명을 입력합니다.
    3. 회수 정책을 선택합니다.
    4. 드롭다운 목록에서 kubernetes.io/azure-disk를 선택합니다.

      1. 스토리지 계정 유형을 입력합니다. 이는 Azure 스토리지 계정 SKU 계층에 해당합니다. 유효한 옵션은 Premium_LRS, Standard_LRS, StandardSSD_LRSUltraSSD_LRS입니다.
      2. 계정 종류를 입력합니다. 유효한 옵션은 shared, dedicatedmanaged입니다.

        중요

        Red Hat은 스토리지 클래스에서 kind: Managed의 사용만 지원합니다.

        SharedDedicated를 사용하여 Azure는 관리되지 않은 디스크를 생성합니다. 반면 OpenShift Container Platform은 머신 OS(root) 디스크의 관리 디스크를 생성합니다. Azure Disk는 노드에서 관리 및 관리되지 않은 디스크를 모두 사용하도록 허용하지 않으므로 Shared 또는 Dedicated로 생성된 관리되지 않은 디스크를 OpenShift Container Platform 노드에 연결할 수 없습니다.

    5. 원하는 대로 스토리지 클래스에 대한 추가 매개변수를 입력합니다.
  4. 생성을 클릭하여 스토리지 클래스를 생성합니다.

4.2.2. 영구 볼륨 클레임 생성

사전 요구 사항

OpenShift Container Platform에서 볼륨으로 마운트하기 전에 기본 인프라에 스토리지가 있어야 합니다.

절차

  1. OpenShift Container Platform 콘솔에서 스토리지영구 볼륨 클레임을 클릭합니다.
  2. 영구 볼륨 클레임 생성 개요에서 영구 볼륨 클레임 생성을 클릭합니다.
  3. 표시되는 페이지에 원하는 옵션을 정의합니다.

    1. 드롭다운 메뉴에서 이전에 생성한 스토리지 클래스를 선택합니다.
    2. 스토리지 클레임의 고유한 이름을 입력합니다.
    3. 액세스 모드를 선택합니다. 이 선택에서는 스토리지 클레임에 대한 읽기 및 쓰기 액세스 권한을 결정합니다.
    4. 스토리지 클레임의 크기를 정의합니다.
  4. 만들기를 클릭하여 영구 볼륨 클레임을 생성하고 영구 볼륨을 생성합니다.

4.2.3. 볼륨 형식

OpenShift Container Platform이 볼륨을 마운트하고 컨테이너에 전달하기 전에 영구 볼륨 정의에 fsType 매개변수에 의해 지정된 파일 시스템이 포함되어 있는지 확인합니다. 장치가 파일 시스템으로 포맷되지 않으면 장치의 모든 데이터가 삭제되고 장치는 지정된 파일 시스템에서 자동으로 포맷됩니다.

이를 통해 OpenShift Container Platform이 처음 사용하기 전에 포맷되기 때문에 형식화되지 않은 Azure 볼륨을 영구 볼륨으로 사용할 수 있습니다.

4.2.4. PVC를 사용하여 NetNamespace 디스크가 있는 머신을 배포하는 머신 세트

Azure에서 실행되는 머신 세트를 생성하여 경미한 디스크가 있는 머신을 배포할 수 있습니다. Ultra 디스크는 가장 까다로운 데이터 워크로드와 함께 사용하도록 설계된 고성능 스토리지입니다.

in-tree 플러그인 및 CSI 드라이버는 PVC를 사용하여 무기한 디스크를 활성화합니다. PVC를 생성하지 않고 NetNamespace 디스크가 있는 머신을 데이터 디스크로 배포할 수도 있습니다.

4.2.4.1. 머신 세트를 사용하여 무기 디스크로 머신 생성

머신 세트 YAML 파일을 편집하여 Azure에 simple 디스크가 있는 머신을 배포할 수 있습니다.

사전 요구 사항

  • 기존 Microsoft Azure 클러스터가 있어야 합니다.

절차

  1. 기존 Azure MachineSet CR(사용자 정의 리소스)을 복사하고 다음 명령을 실행하여 편집합니다.

    $ oc edit machineset <machine-set-name>

    여기서 <machine-set-name >은 디스크가 있는 머신을 프로비저닝할 머신 세트입니다.

  2. 표시된 위치에 다음 행을 추가합니다.

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    spec:
      template:
        spec:
          metadata:
            labels:
              disk: ultrassd 1
          providerSpec:
            value:
              ultraSSDCapability: Enabled 2
    1
    이 머신 세트에서 생성된 노드를 선택하는 데 사용할 라벨을 지정합니다. 이 절차에서는 이 값에 disk.ultrassd 를 사용합니다.
    2
    이 라인은 자외 디스크를 사용할 수 있습니다.
  3. 다음 명령을 실행하여 업데이트된 구성을 사용하여 머신 세트를 생성합니다.

    $ oc create -f <machine-set-name>.yaml
  4. 다음 YAML 정의가 포함된 스토리지 클래스를 생성합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ultra-disk-sc 1
    parameters:
      cachingMode: None
      diskIopsReadWrite: "2000" 2
      diskMbpsReadWrite: "320" 3
      kind: managed
      skuname: UltraSSD_LRS
    provisioner: disk.csi.azure.com 4
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer 5
    1
    스토리지 클래스의 이름을 지정합니다. 이 절차에서는 이 값에 대해 cloud-disk-sc 를 사용합니다.
    2
    스토리지 클래스의 IOPS 수를 지정합니다.
    3
    스토리지 클래스의 처리량을 MBps로 지정합니다.
    4
    AKS(Azure Kubernetes Service) 버전 1.21 이상의 경우 disk.csi.azure.com 을 사용합니다. 이전 버전의 AKS의 경우 kubernetes.io/azure-disk 를 사용합니다.
    5
    선택 사항: 디스크를 사용할 Pod가 생성될 때까지 대기하려면 이 매개변수를 지정합니다.
  5. 다음 YAML 정의가 포함된 NetNamespace -disk-sc 스토리지 클래스를 참조하도록 PVC(영구 볼륨 클레임)를 생성합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk 1
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: ultra-disk-sc 2
      resources:
        requests:
          storage: 4Gi 3
    1
    PVC 이름을 지정합니다. 이 절차에서는 이 값에 대해 cloud-disk 를 사용합니다.
    2
    이 PVC는 Ultra-disk-sc 스토리지 클래스를 참조합니다.
    3
    스토리지 클래스의 크기를 지정합니다. 최소 값은 4Gi 입니다.
  6. 다음 YAML 정의가 포함된 Pod를 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-ultra
    spec:
      nodeSelector:
        disk: ultrassd 1
      containers:
      - name: nginx-ultra
        image: alpine:latest
        command:
          - "sleep"
          - "infinity"
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk 2
    1
    자외선 디스크를 사용할 수 있는 머신 세트의 레이블을 지정합니다. 이 절차에서는 이 값에 disk.ultrassd 를 사용합니다.
    2
    이 Pod는 Ultra-disk PVC를 참조합니다.

검증

  1. 다음 명령을 실행하여 시스템이 생성되었는지 확인합니다.

    $ oc get machines

    시스템은 Running 상태에 있어야 합니다.

  2. 실행 중이고 노드가 연결되어 있는 시스템의 경우 다음 명령을 실행하여 파티션을 검증합니다.

    $ oc debug node/<node-name> -- chroot /host lsblk

    이 명령에서 oc debug node/<node-name >은 < node-name > 노드에서 디버깅 쉘을 시작하고 -- 를 사용하여 명령을 전달합니다. 전달된 명령 chroot /host 는 기본 호스트 OS 바이너리에 대한 액세스를 제공하며 lsblk 는 호스트 OS 시스템에 연결된 블록 장치를 표시합니다.

다음 단계

  • Pod에서 경미한 디스크를 사용하려면 마운트 지점을 사용하는 워크로드를 생성합니다. 다음 예와 유사한 YAML 파일을 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: ssd-benchmark1
    spec:
      containers:
      - name: ssd-benchmark1
        image: nginx
        ports:
          - containerPort: 80
            name: "http-server"
        volumeMounts:
        - name: lun0p1
          mountPath: "/tmp"
      volumes:
        - name: lun0p1
          hostPath:
            path: /var/lib/lun0p1
            type: DirectoryOrCreate
      nodeSelector:
        disktype: ultrassd

4.2.4.2. 경미한 디스크를 활성화하는 머신 세트의 리소스 문제 해결

이 섹션의 정보를 사용하여 발생할 수 있는 문제를 이해하고 복구하십시오.

4.2.4.2.1. 자외 디스크가 지원하는 영구 볼륨 클레임을 마운트할 수 없음

자외 디스크에 의해 지원되는 영구 볼륨 클레임을 마운트하는 데 문제가 있는 경우 Pod가 ContainerCreating 상태로 중단되고 경고가 트리거됩니다.

예를 들어 additionalCapabilities.ultraSSDEnabled 매개변수가 Pod를 호스팅하는 노드를 백스포트하는 머신에 설정되지 않은 경우 다음 오류 메시지가 표시됩니다.

StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
  • 이 문제를 해결하려면 다음 명령을 실행하여 Pod를 설명합니다.

    $ oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>