Azure Kubernetes Service에서 Azure Ultra Disk 사용

Azure Ultra Disks는 상태 저장 애플리케이션에 대해 높은 처리량, 높은 IOPS, 일관성 있는 짧은 대기 시간 디스크 스토리지를 제공합니다. Ultra Disks의 주요 혜택 중 하나는 에이전트 노드를 다시 시작하지 않고도 워크로드에 따라 SSD의 성능을 동적으로 변경하는 기능입니다. Ultra Disks는 데이터를 많이 사용하는 워크로드에 적합합니다.

이 문서에서는 신규 또는 기존 AKS 클러스터에서 Azure 울트라 디스크를 사용하도록 구성하는 방법을 설명합니다.

시작하기 전에

이 기능은 클러스터를 만들 때 또는 노드 풀을 만들 때만 설정할 수 있습니다.

제한 사항

  • Azure 울트라 디스크에는 이러한 디스크를 지원하는 가용성 영역 및 지역에 배포된 노드 풀이 필요하며 특정 VM 시리즈에서만 지원됩니다. 자세한 내용은 울트라 디스크 제한 사항 섹션에서 해당 테이블을 검토하세요.
  • 울트라 디스크는 가용성 집합 또는 Azure Disk Encryption과 같은 일부 기능과 함께 사용할 수 없습니다. 최신 정보는 울트라 디스크 제한 사항을 검토하세요.

Ultra Disks를 사용할 수 있는 클러스터 만들기

다음 CLI 명령을 사용하여 Azure 울트라 디스크를 활용할 수 있는 AKS 클러스터를 만듭니다. --enable-ultra-ssd 매개 변수를 사용하여 EnableUltraSSD 기능을 설정합니다.

az aks create -g MyResourceGroup -n myAKSCluster -l westus2 --node-vm-size Standard_D2s_v3 --zones 1 2 --node-count 2 --enable-ultra-ssd

울트라 디스크를 지원하지 않는 클러스터를 만들려는 경우 --enable-ultra-ssd 매개 변수를 생략하면 됩니다.

기존 클러스터에서 Ultra Disks 사용 설정

울트라 디스크를 지원하는 클러스터에 새 노드 풀을 추가하여 기존 클러스터에서 울트라 디스크를 사용하도록 설정할 수 있습니다. az aks nodepool add 명령이 있는 --enable-ultra-ssd 매개 변수를 사용하여 울트라 디스크를 사용하도록 새 노드 풀을 구성합니다.

울트라 디스크를 지원하지 않는 새 노드 풀을 만들려는 경우 --enable-ultra-ssd 매개 변수를 제외하면 됩니다.

스토리지 클래스를 사용하여 동적으로 Ultra Disks 사용

배포 또는 상태 저장 세트에서 Ultra Disks를 사용하려면 동적 프로비저닝에 스토리지 클래스를 사용하면 됩니다.

스토리지 클래스 만들기

스토리지 클래스를 사용하여 영구적 볼륨에서 스토리지 단위를 동적으로 생성되는 방법을 정의합니다. Kubernetes 스토리지 클래스에 대한 자세한 내용은 Kubernetes 스토리지 클래스를 참조하세요. 이 예제에서는 울트라 디스크를 참조하는 스토리지 클래스를 만듭니다.

  1. 파일 azure-ultra-disk-sc.yaml을 만들고 다음 매니페스트에 복사합니다.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ultra-disk-sc
    provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
    volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
    parameters:
      skuname: UltraSSD_LRS
      kind: managed
      cachingMode: None
      diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
      diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB
    
  2. kubectl apply 명령을 사용하여 스토리지 클래스를 만들고 azure-ultra-disk-sc.yaml 파일을 지정합니다.

    kubectl apply -f azure-ultra-disk-sc.yaml
    

    다음 예와 유사하게 출력됩니다.

    storageclass.storage.k8s.io/ultra-disk-sc created
    

영구적 볼륨 클레임 만들기

PVC(영구적 볼륨 클레임)을 사용하여 스토리지 클래스를 기반으로 하는 스토리지를 자동으로 프로비전합니다. 이 경우 PVC는 이전에 만든 스토리지 클래스를 사용하여 Ultra Disk를 만들 수 있습니다.

  1. 파일 azure-ultra-disk-pvc.yaml을 만들고 다음 매니페스트에 복사합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk
    spec:
      accessModes:
     - ReadWriteOnce
      storageClassName: ultra-disk-sc
      resources:
        requests:
          storage: 1000Gi
    

    클레임은 ReadWriteOnce 액세스 권한이 1,000GB 크기의 ultra-disk이라는 디스크를 요구합니다. ultra-disk-sc 스토리지 클래스를 스토리지 클래스로 지정합니다.

  2. kubectl apply 명령을 사용하여 영구 볼륨 클레임을 만들고 azure-ultra-disk-pvc.yaml 파일을 지정합니다.

    kubectl apply -f azure-ultra-disk-pvc.yaml
    

    다음 예와 유사하게 출력됩니다.

    persistentvolumeclaim/ultra-disk created
    

영구적 볼륨 사용

영구적 볼륨 클레임이 생성되고 디스크가 성공적으로 프로비전되면 디스크에 액세스하여 Pod를 만들 수 있습니다. 다음 매니페스트는 ultra-disk라는 영구적 볼륨 클레임을 사용하여 /mnt/azure 경로에 Azure 디스크를 탑재하는 기본 NGINX Pod를 만듭니다.

  1. 파일 nginx-ultra.yaml을 만들고 다음 매니페스트에 복사합니다.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-ultra
    spec:
      containers:
     - name: nginx-ultra
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/azure"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk
    
  2. kubectl apply 명령을 사용하여 Pod를 만들고 nginx-ultra.yaml 파일을 지정합니다.

    kubectl apply -f nginx-ultra.yaml
    

    다음 예와 유사하게 출력됩니다.

    pod/nginx-ultra created
    

    이제 Azure 디스크가 /mnt/azure 디렉터리에 탑재된 Pod가 실행되고 있습니다.

  3. kubectl describe pod 명령을 사용하여 구성 세부 정보를 확인하고 nginx-ultra.yaml 파일을 지정합니다.

    kubectl describe pod nginx-ultra
    

    다음 예와 유사하게 출력됩니다.

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
      default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
    Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

다음 단계