次の方法で共有


Azure Kubernetes Service での Azure Ultra Disks の使用

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 ディスクを参照するストレージ クラスを作成します。

  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 Disks を作成できます。

  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
    

    要求は、ultra-disk という名前のディスクで、サイズが 1000 GB で、ReadWriteOnce のアクセスを持つものを求めています。 ultra-disk-scストレージ クラスは、ストレージ クラスとして指定されます。

  2. 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 ポッドが作成されます。

  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 コマンドを使用してポッドを作成し、nginx-ultra.yaml ファイルを指定します。

    kubectl apply -f nginx-ultra.yaml
    

    出力は、次の出力例のようになります。

    pod/nginx-ultra created
    

    これで Azure ディスクが /mnt/azure ディレクトリにマウントされ、ポッドが稼働状態となりました。

  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:  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"
    

次のステップ