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
다음 단계
- 프리미엄 SSD v2 디스크에 대한 자세한 내용은 Azure 프리미엄 SSD v2 디스크 사용을 참조하세요.
- 스토리지 모범 사례에 대한 자세한 내용은 AKS(Azure Kubernetes Service)의 스토리지 및 백업 모범 사례를 참조하세요.
Azure Kubernetes Service