Azure Kubernetes Service で Azure Premium SSD v2 ディスクを使用する
Azure Premium SSD v2 ディスクは、IO の負荷の高いエンタープライズ ワークロード、ミリ秒未満の安定したディスク待機時間、高い IOPS とスループットを実現します。 Premium SSD v2 ディスクのパフォーマンス (容量、スループット、IOPS) は、いつでも個別に構成できるため、多くのシナリオで、パフォーマンスのニーズを満たしながら、高いコスト効率の実現が容易になります。
この記事では、Azure Premium SSD v2 ディスクを使用するように新規または既存の AKS クラスターを構成する方法について説明します。
開始する前に
Azure Premium SSD v2 ディスクを使用できる AKS クラスターを作成またはアップグレードする前に、Premium Storage をサポートする同じリージョンと可用性ゾーンに AKS クラスターを作成し、次の手順に従ってディスクを接続する必要があります。
既存の AKS クラスターの場合、新しいノード プールをクラスターに追加して Premium SSD v2 ディスクを有効にしてから、次の手順に従ってディスクを接続できます。
重要
Azure Premium SSD v2 ディスクには、これらのディスクをサポートするリージョンにデプロイされたノード プールが必要です。 サポートされているリージョンの一覧については、Premium SSD v2 ディスクでサポートされているリージョンに関するページを参照してください。
制限事項
- Azure Premium SSD v2 ディスクには、注意が必要ないくつかの制限事項があります。 完全な一覧については、「Premium SSD v2 の制限事項」を参照してください。
ストレージ クラスで Premium SSD v2 ディスクを動的に使用する
デプロイまたはステートフル セットで Premium SSD v2 ディスクを使用するには、動的プロビジョニングにストレージ クラスを使用できます。
ストレージ クラスの作成
ストレージ クラスは、保存の単位を永続ボリュームを使用して動的に作成する方法を定義します。 Kubernetes ストレージ クラスについて詳しくは、Kubernetes ストレージ クラスに関するページをご覧ください。
次の例では、Premium 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 Disks を作成できます。
azure-pv2-disk-pvc.yaml
という名前のファイルを作成し、そこに次のマニフェストをコピーします。 クレームでは、サイズが 1000 GB で ReadWriteOnce アクセスがある 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
永続ボリュームの使用
永続ボリューム要求が作成され、ディスクが正常にプロビジョニングされると、ディスクへのアクセスを使ってポッドを作成できます。 次のマニフェストは、premium2-disk という名前の永続ボリューム要求を使って /mnt/azure
パスに Azure ディスクをマウントする基本的な NGINX ポッドを作成します。
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 コマンドを使用してポッドを作成します。
kubectl apply -f nginx-premium2.yaml
コマンドの出力は、次の例のようになります。
pod/nginx-premium2 created
これで Azure ディスクが /mnt/azure
ディレクトリにマウントされ、ポッドが稼働状態となりました。 次の例に示すように、kubectl describe pod nginx-premium2
でポッドを検査するときに、この構成を確認できます。
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 ディスクの 1 秒あたりの入出力操作 (IOPS) とスループットの制限は、現在、AKS ではサポートされていません。 パフォーマンスを調整するには、--disk-iops-read-write
パラメーターと --disk-mbps-read-write
パラメーターを指定した Azure CLI コマンド az disk update を使用できます。
次の例では、ディスク IOPS の読み取り/書き込みを 5000 に、Mbps を 200 に更新します。 --resource-group
の場合、値は、名前付け規則 MC_resourcegroupname_clustername_location を使用して AKS ワーカー ノードを格納するために自動的に作成される 2 番目のリソース グループである必要があります。 詳細については、「AKS と一緒にリソース グループが 2 つ作成されるのはなぜでしょうか?」を参照してください。
--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
次の手順
- Premium SSD v2 ディスクの詳細については、Azure Premium SSD v2 ディスクの使用に関するページを参照してください。
- ストレージのベスト プラクティスの詳細については、「Azure Kubernetes Services (AKS) のストレージとバックアップに関するベスト プラクティス」を参照してください。
Azure Kubernetes Service