カスタム StorageClass をワークロードで使用する

Azure 上の Google Kubernetes Engine(GKE)でコンテナ化されたワークロードの特定のストレージ動作を定義するには、カスタム StorageClass を作成して使用します。StorageClass をカスタマイズすることで、PersistentVolume に異なる Azure ディスクタイプ、ファイル システム タイプ、その他のパラメータを選択して、アプリケーションのストレージ パフォーマンスと費用を最適化できます。この機能を使用すると、ワークロードの正確なニーズに合わせてストレージを調整することで、効率的なサービスを実行できます。

GKE on Azure は、ストレージ プロビジョニングの処理に不可欠な Azure Disk CSI ドライバと Azure File CSI ドライバを自動的にデプロイして管理します。これらのドライバのバージョンは GKE on Azure の Kubernetes バージョンに関連付けられており、クラスタのアップグレードとともに自動的に更新されるため、カスタム StorageClass のシームレスな互換性が確保されます。

カスタムの StorageClass を使用する

ボリュームに追加の StorageClass を作成したり、Container Storage Interface(CSI)ドライバを使用したりできます。

  1. Azure Disk ボリュームまたは別の CSI ドライバを使用するかどうかを選択します。

    Azure Disk ボリューム

    Azure Disk ボリューム タイプ、ファイル システムのタイプ、その他のパラメータを指定する独自のカスタム StorageClass を作成できます。追加の StorageClass パラメータについては、GKE on Azure の Azure Disk CSI ドライバの GitHub ページで確認できます。

    カスタム StorageClass を構成するには、次の YAML マニフェストを my-custom-class.yaml という名前のファイルにコピーします。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    CLASS_NAME を新しい StorageClass の名前に置き換えます。

    たとえば、次の YAML では、特定のストレージ アカウント内のボリュームをプロビジョニングする新しい StorageClass が作成され、それぞれの新しいボリュームに group=dev のタグが適用されます。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: my-custom-class
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
     storageAccount: my-storage-account
     tags: group=dev
    

    CSI ドライバ

    provisioner フィールドに別の CSI ドライバを指定できます。

    別の CSI ドライバを使用して StorageClass を作成するには、次の YAML の例を使用します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     ...
    

    次の値を置き換えます。

    • CLASS_NAME: StorageClass の名前(例: my-custom-class)。
    • CSI_DRIVER_NAME: CSI ドライバの名前(例: csi.example.com)。

    次に、CSI ドライバのドキュメントの説明に従って、parameters のサブフィールドを構成します。

  2. YAML をクラスタに適用します。

    kubectl apply -f my-custom-class.yaml
    
  3. カスタム StorageClass を使用して PersistentVolumeClaim を作成します。

    カスタム StorageClass を作成したら、それを PVC で指定できます。次の例では、StorageClass my-custom-class を参照する my-pvc という名前の PVC を作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: my-pvc
    spec:
     accessModes:
      - ReadWriteOnce
     resources:
      requests:
       storage: 30Gi
     storageclassName: my-custom-class
    

デフォルトの StorageClass を設定する

GKE on Azure は、LRS を含む標準の SSD Azure Disk をプロビジョニングする standard-rwo というデフォルトの StorageClass を使用します。デフォルトを別の StorageClass に変更できます。

デフォルトの StorageClass を変更するには:

  1. standard-rwo StorageClass の is-default-class アノテーションを kubectl patch で更新します。

    kubectl patch storageclass standard-rwo -p \
     '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. アノテーション storageclass.kubernetes.io/is-default-class: true を持つ新しい StorageClass を作成します。

    次の例の StorageClass は、disk.csi.azure.com ドライバを使用しています。別のストレージ ドライバをインストールするには、CSI ドライバのインストールをご覧ください。

    次の YAML を my-custom-class.yaml というファイルにコピーします。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
     annotations:
      storageclass.kubernetes.io/is-default-class: true
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     skuName: VOLUME_TYPE
    

    以下を置き換えます。

    • CLASS_NAME: 新しい StorageClass の名前。
    • VOLUME_TYPE: StorageClass が作成する Azure Disk ボリューム タイプ。

    たとえば、次の YAML では、Premium SSD Azure Disk ボリュームをプロビジョニングする新しいデフォルトの StorageClass が作成されます。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: my-custom-default-class
     annotations:
      storageclass.kubernetes.io/is-default-class: "true"
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     skuName: Premium_LRS
    
  3. 新しいカスタムクラスをクラスタに適用します。

    kubectl apply -f my-custom-class.yaml
    

このマニフェストを適用すると、GKE on Azure は新しいストレージ リクエストに my-custom-default-class StorageClass を使用します。

StatefulSet で StorageClass を参照する

新しい StorageClass を使用するには、StatefulSet の volumeClaimTemplates で参照します。

StatefulSet の volumeClaimTemplates 仕様で StorageClass を参照すると、Kubernetes は PersistentVolume(PV)を使用して安定したストレージを提供します。Kubernetes は、StorageClass で定義されたプロビジョナーを呼び出して新しいストレージ Volume を作成します。Volume がプロビジョニングされると、Kubernetes が自動的に PV を作成します。

次の StatefulSet は、my-custom-class StorageClass を参照し、1 GiB のボリュームをプロビジョニングします。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: my-custom-class # This field references the existing StorageClass

次のステップ