다음을 통해 공유


Azure Kubernetes Service에서 Azure 프리미엄 SSD v2 디스크 사용

Azure 프리미엄 SSD v2 디스크는 IO 집약적인 엔터프라이즈 워크로드와 일관된 밀리초 이하의 디스크 대기 시간, 높은 IOPS/처리량을 제공합니다. 프리미엄 SSD v2 디스크의 성능(용량, 처리량 및 IOPS)은 언제든지 독립적으로 구성할 수 있으므로 성능 요구 사항을 충족하는 동안 더 많은 시나리오를 비용 효율적으로 수행할 수 있습니다.

이 문서에서는 신규 또는 기존 AKS 클러스터에서 Azure 프리미엄 SSD v2 디스크를 사용하도록 구성하는 방법을 설명합니다.

시작하기 전에

Azure 프리미엄 SSD v2 디스크를 사용할 수 있는 AKS 클러스터를 만들거나 업그레이드하기 전에 Premium Storage를 지원하는 동일한 영역과 가용성 영역에 AKS 클러스터를 만들어서 아래 단계에 따라 디스크를 연결해야 합니다.

기존 AKS 클러스터의 경우 클러스터에 새 노드 풀을 추가하여 프리미엄 SSD v2 디스크를 사용하도록 설정한 후 아래 단계에 따라 디스크를 연결할 수 있습니다.

Important

Azure 프리미엄 SSD v2 디스크에는 이러한 디스크를 지원하는 지역에 배포된 노드 풀이 필요합니다. 지원되는 지역 목록은 프리미엄 SSD v2 디스크 지원 지역을 참조하세요.

제한 사항

  • Azure 프리미엄 SSD v2 디스크에는 알아야 할 특정 제한 사항이 있습니다. 전체 목록은 프리미엄 SSD v2 제한 사항을 참조하세요.

스토리지 클래스에서 프리미엄 SSD v2 디스크를 동적으로 사용

배포 또는 상태 저장 세트에서 프리미엄 SSD v2 디스크를 사용하려면 동적 프로비저닝 시 스토리지 클래스를 사용하면 됩니다.

스토리지 클래스 만들기

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

이 예제에서는 프리미엄 SSD v2 디스크를 참조하는 스토리지 클래스를 만듭니다. 파일 azure-pv2-disk-sc.yaml을 만들고 다음 매니페스트에 복사합니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: premium2-disk-sc
parameters:
   cachingMode: None
   skuName: PremiumV2_LRS
   DiskIOPSReadWrite: "4000"
   DiskMBpsReadWrite: "1000"
provisioner: disk.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

kubectl apply 명령을 사용하여 스토리지 클래스를 만들고 azure-pv2-disk-sc.yaml 파일을 지정합니다.

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

명령의 출력은 다음 예제와 유사합니다.

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

영구적 볼륨 클레임 만들기

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

파일 azure-pv2-disk-pvc.yaml을 만들고 다음 매니페스트에 복사합니다. 클레임은 ReadWriteOnce 액세스 권한이 1,000GB 크기의 premium2-disk이라는 디스크를 요구합니다. premium2-disk-sc 스토리지 클래스를 스토리지 클래스로 지정합니다.

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

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

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

명령의 출력은 다음 예제와 유사합니다.

persistentvolumeclaim/premium2-disk created

영구적 볼륨 사용

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

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

kind: Pod
apiVersion: v1
metadata:
  name: nginx-premium2
spec:
  containers:
  - name: nginx-premium2
    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: premium2-disk

다음 예제와 같이 kubectl apply 명령을 사용하여 Pod를 만듭니다.

kubectl apply -f nginx-premium2.yaml

명령의 출력은 다음 예제와 유사합니다.

pod/nginx-premium2 created

이제 Azure 디스크가 /mnt/azure 디렉터리에 탑재된 Pod가 실행되고 있습니다. 다음 압축된 예제에 표시된 것처럼 kubectl describe pod nginx-premium2를 통해 Pod를 검사할 때 이 구성을 볼 수 있습니다.

kubectl describe pod nginx-premium2

[...]
Volumes:
  volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  premium2-disk
    ReadOnly:   false
  kube-api-access-sh59b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason                  Age    From                     Message
  ----    ------                  ----   ----                     -------
  Normal  Scheduled               7m58s  default-scheduler        Successfully assigned default/nginx-premium2 to aks-agentpool-12254644-vmss000006
  Normal  SuccessfulAttachVolume  7m46s  attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-ff39fb64-1189-4c52-9a24-e065b855b886"
  Normal  Pulling                 7m39s  kubelet                  Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine"
  Normal  Pulled                  7m38s  kubelet                  Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" in 1.192915667s
  Normal  Created                 7m38s  kubelet                  Created container nginx-premium2
  Normal  Started                 7m38s  kubelet                  Started container nginx-premium2
[...]

IOPS 및 처리량 제한 설정

Azure Premium v2 SSD 디스크에 대한 IOPS(초당 입력/출력 작업) 및 처리량 제한은 현재 AKS를 통해 지원되지 않습니다. 성능을 조정하려면 Azure CLI 명령 --disk-iops-read-write--disk-mbps-read-write 매개 변수를 포함하여 az disk update를 사용하면 됩니다.

다음 예제에서는 디스크 IOPS 읽기/쓰기를 5000으로, Mbps를 200으로 업데이트합니다. --resource-group의 경우 값은 MC_resourcegroupname_clustername_location 명명 규칙을 사용하여 AKS 작업자 노드를 저장하기 위해 자동으로 만들어진 두 번째 리소스 그룹이어야 합니다. 자세한 내용은 AKS를 통해 두 개의 리소스 그룹이 생성되는 이유는 무엇인가요?를 참조하세요.

--name 매개 변수 값은 StorageClass를 사용하여 만든 볼륨의 이름이며, pvc-로 시작합니다. 디스크 이름을 식별하려면 kubectl get pvc를 실행하거나 포털에서 두 번째 리소스 그룹으로 이동하면 찾을 수 있습니다. 자세한 내용은 Azure Portal에서 리소스 관리를 참조하세요.

az disk update --subscription subscriptionName --resource-group myResourceGroup --name diskName --disk-iops-read-write=5000 --disk-mbps-read-write=200  

다음 단계