Anthos clusters on AWS(GKE on AWS)の新しいバージョンが 9 月 29 日にリリースされました。詳細については、リリースノートをご覧ください。

ワークロードで StorageClass を使用する

Anthos clusters on AWS(GKE on AWS)は、Amazon Elastic Block Store(EBS)用の Container Storage Interface(CSI)ドライバを自動的にデプロイして、クラスタ内の Amazon EBS ボリュームのプロビジョニングと管理を行います。

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

始める前に

  • anthos-aws ディレクトリから anthos-gke を使用して、コンテキストをユーザー クラスタに切り替える。
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME は、ユーザー クラスタ名に置き換えます。

デフォルトの StorageClass を使用する

PersistentVolumeClaim を、spec.storageClassName フィールドを設定せずに作成すると、デフォルトの Anthos clusters on AWS EBS CSI ドライバの StorageClass を使用して gp2 ボリュームがプロビジョニングされます。

次の YAML は、mypvc という PersistentVolumeClaim(PVC)を 30 GiB のサイズで作成します。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

プリインストールされている別の StorageClass を使用する

Anthos clusters on AWS EBS CSI ドライバには、高スループットの io1 ボリュームをプロビジョニングする premium-rwo StorageClass も含まれています。

PVC の spec.storageclassName で指定すると使用できます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageclassName: premium-rwo

カスタム StorageClass を使用する

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

  1. EBS ボリュームと特定の CSI ドライバのどちらを使用するかを選択します。

    EBS ボリューム

    EBS ボリューム タイプ、ファイル システム タイプ、その他のパラメータを指定する独自のカスタム StorageClass を作成できます。Anthos clusters on AWS EBS CSI ドライバの GitHub ページで、追加の StorageClass パラメータを確認できます。

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    

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

    たとえば、次の YAML では、XFS ファイル システムでフォーマットされたスループット最適化 HDD EBS ボリュームをプロビジョニングする、新しい StorageClass が作成されます。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    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 をクラスタに適用します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-custom-class.yaml
    

カスタム StorageClass を使用して PersistentVolumeClaim を作成する

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

デフォルトのストレージ クラスを設定する

Anthos clusters on AWS は、gp2 EBS ボリュームをプロビジョニングする standard-rwo というデフォルトの StorageClass を使用します。デフォルトを別の StorageClass に変更できます。

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

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

    env HTTPS_PROXY=http://localhost:8118 \
      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 は、ebs.csi.aws.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: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    以下を置き換えます。

    たとえば、次の YAML では、XFS ファイル システムでフォーマットされたスループット最適化 HDD EBS ボリュームをプロビジョニングする、新しいデフォルトの StorageClass が作成されます。

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

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-custom-class.yaml
    

このマニフェストを適用すると、Anthos clusters on AWS は新しいストレージ リクエストに 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: k8s.gcr.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

次のステップ