Azure Ultra Disks は、ステートフル アプリケーションに高スループット、高 IOPS、および一貫性のある低待機時間のディスク ストレージを提供します。 Ultra Disks の主なメリットの 1 つが、エージェント ノードを再起動することなく、SSD のパフォーマンスをワークロードと共に動的に変更する機能です。 Ultra Disks は、データ量の多いワークロードに適しています。
この記事では、Azure Ultra Disks を使用するように新規または既存の AKS クラスターを構成する方法について説明します。
開始する前に
この機能は、クラスターの作成時またはノード プールの作成時にのみ設定できます。
制限事項
- Azure Ultra ディスクには、これらのディスクをサポートする可用性ゾーンとリージョンにデプロイされたノード プールが必要であり、特定の仮想マシン (VM) シリーズでのみサポートされます。 詳細については、「Ultra Disk の制限」セクションの対応する表を参照してください。
- 可用性セットや Azure Disk Encryption などの一部のフィーチャーと機能では、Ultra Disk を使用できません。 最新情報については、「Ultra Disk の制限」を参照してください。
Ultra Disks を使用できるクラスターを作成する
クラスターのリソース グループを作成します。
az group create --name MyResourceGroup --___location westus2
次の CLI コマンドで Azure Ultra ディスクを使用できる AKS クラスターを作成します。
--enable-ultra-ssd
パラメーターを使用して EnableUltraSSD
機能を設定します。
az aks create \
--resource-group MyResourceGroup \
--name myAKSCluster \
--___location westus2 \
--node-vm-size Standard_D2s_v3 \
--zones 1 \
--node-count 2 \
--enable-ultra-ssd \
--generate-ssh-keys
Ultra Disks のサポートを使用せずにクラスターを作成するには、--enable-ultra-ssd
パラメーターを省略します。
クラスターのデプロイが成功したら、コンテキストを新しいクラスターに設定する次のコマンドを実行します。
az aks get-credentials --resource-group MyResourceGroup --name myAKSCluster
既存のクラスターでの Ultra Disks の有効化
既存のクラスターで Ultra ディスクを有効にするには、Ultra ディスクをサポートする新しいノード プールをクラスターに追加します。
--enable-ultra-ssd
コマンドで az aks nodepool add
パラメーターを使用して、Ultra Disks を使用するように新しいノード プールを構成します。
Ultra Disks のサポートを使用せずに新しいノード プールを作成するには、--enable-ultra-ssd
パラメーターを除外します。
ストレージ クラスで Ultra Disks を動的に使用する
デプロイまたはステートフル セットで Ultra Disks を使用するには、動的プロビジョニングにストレージ クラスを使用できます。
ストレージ クラスの作成
ストレージ クラスは、保存の単位を永続ボリュームを使用して動的に作成する方法を定義します。 Kubernetes ストレージ クラスの詳細については、Kubernetes ストレージ クラスに関する記事を参照してください。 この例では、Ultra ディスクを参照するストレージ クラスを作成します。
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
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 Disks を作成できます。
azure-ultra-disk-pvc.yaml
という名前のファイルを作成し、そこに次のマニフェストをコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ultra-disk spec: accessModes: - ReadWriteOnce storageClassName: ultra-disk-sc resources: requests: storage: 1000Gi
要求は、
ultra-disk
という名前のディスクで、サイズが1000 GB
で、ReadWriteOnce
のアクセスを持つものを求めています。ultra-disk-sc
ストレージ クラスは、ストレージ クラスとして指定されます。kubectl apply
コマンドを使用して永続ボリューム要求を作成し、azure-ultra-disk-pvc.yaml
ファイルを指定します。kubectl apply -f azure-ultra-disk-pvc.yaml
出力は、次の出力例のようになります。
persistentvolumeclaim/ultra-disk created
永続ボリュームの使用
永続ボリューム要求が作成され、ディスクが正常にプロビジョニングされたら、ディスクへのアクセス権を持つポッドを作成できます。 次のマニフェストでは、 ultra-disk
という名前の永続ボリューム要求を使用して、パス /mnt/azure
に Azure ディスクをマウントする基本的な NGINX ポッドが作成されます。
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
kubectl apply
コマンドを使用してポッドを作成し、nginx-ultra.yaml
ファイルを指定します。kubectl apply -f nginx-ultra.yaml
出力は、次の出力例のようになります。
pod/nginx-ultra created
これで Azure ディスクが
/mnt/azure
ディレクトリにマウントされ、ポッドが稼働状態となりました。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: ultra-disk ReadOnly: false kube-api-access-sszt8: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 29s default-scheduler Successfully assigned default/nginx-ultra to aks-nodepool1-13380798-vmss000001 Normal SuccessfulAttachVolume 9s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-a6a6a6a6-bbbb-cccc-dddd-e7e7e7e7e7e7"
次のステップ
- Ultra Disks の詳細については、「Azure Ultra ディスクの使用」を参照してください。
- ストレージのベスト プラクティスの詳細については、「AKS でのストレージとバックアップに関するベスト プラクティス」を参照してください。
Azure Kubernetes Service