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

GKE on Azure は、Azure Disk CSI ドライバAzure File CSI ドライバを自動的にデプロイします。

Azure Disk CSI ドライバと Azure File CSI ドライバのバージョンは、GKE on Azure Kubernetes バージョンに関連付けられています。ドライバは通常、GKE がリリースされた時点で入手可能な最新バージョンになります。クラスタがアップグレードされると、ドライバも自動的に更新されます。

カスタム 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

次のステップ