GKE on AWS は、Amazon Elastic Block Store(EBS)用の Container Storage Interface(CSI)ドライバを自動的にデプロイし、クラスタ内の Amazon EBS ボリュームのプロビジョニングと管理を行います。
GKE on AWS EBS CSI ドライバのバージョンは、GKE on AWS Kubernetes バージョンに関連付けられています。ドライバは通常、GKE がリリースされた時点で入手可能な最新バージョンになります。クラスタがアップグレードされると、ドライバも自動的に更新されます。
デフォルトの StorageClass の使用方法
PersistentVolumeClaim を、spec.storageClassName を設定せずに作成すると、デフォルトの GKE 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 を使用する方法
GKE 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)ドライバを使用したりできます。
- EBS ボリュームと特定の CSI ドライバのどちらを使用するかを選択します。 - EBS ボリューム- EBS ボリューム タイプ、ファイル システム タイプ、その他のパラメータを指定する独自のカスタム StorageClass を作成できます。GKE 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: ...- 次のように置き換えます。 - CSI_DRIVER_NAMEは、CSI ドライバの名前に置き換えます(例:- csi.example.com)。
- CLASS_NAMEは、StorageClass の名前に置き換えます(例:- my-custom-class)。
 - CSI ドライバに応じて - parametersでサブフィールドを構成します。
- YAML をクラスタに適用します。 - kubectl apply -f my-custom-class.yaml
カスタム 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 AWS は、gp2 EBS ボリュームをプロビジョニングする standard-rwo というデフォルトの StorageClass を使用します。デフォルトを別の StorageClass に変更できます。
デフォルトの StorageClass を変更するには:
- standard-rwoStorageClass の- is-default-classアノテーションを- kubectl patchで更新します。- kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
- アノテーション - 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- 次のように置き換えます。 - EBS_VOLUME_TYPE: StorageClass が作成する AWS EBS ボリューム タイプ。
- CLASS_NAMEは、新しい StorageClass の名前に置き換えます。
 - たとえば、次の 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
- 新しいカスタムクラスをクラスタに適用します。 - kubectl apply -f my-custom-class.yaml
このマニフェストを適用すると、GKE 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: 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
次のステップ
- GKE の永続ボリュームについて学習する。 
- GKE on AWS クラスタにストレージ ドライバをインストールする。 
- クイックスタートで最初のワークロードをデプロイする。