GKE on AWS は、Container Storage Interface(CSI)の Amazon Elastic Block Store(EBS)と Amazon Elastic File Store(EFS)を自動的にデプロイします。
EBS CSI ドライバと EFS CSI ドライバのバージョンは、GKE on AWS Kubernetes バージョンに関連付けられています。ドライバは通常、GKE がリリースされた時点で入手可能な最新バージョンになります。クラスタがアップグレードされると、ドライバも自動的に更新されます。
デフォルトの StorageClass を使用する
PersistentVolumeClaim を、spec.storageClassName
フィールドなしで作成すると、デフォルトの GKE on AWS EBS CSI ドライバの StorageClass を使用して、汎用 SSD ボリューム(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 ドライバには、高スループットのプロビジョニング済み IOPS SSD ボリューム(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 を使用する
デフォルトと 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 allowVolumeExpansion: true 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
カスタム EFS StorageClass
このタブでは、EFS CSI ドライバ プロビジョナー用のカスタム StorageClass を作成する方法について説明します。この StorageClass の前提条件のリストについては、EFS リソースを使用するをご覧ください。EFS CSI ドライバのページには、次のマニフェストに含まれていない StorageClass パラメータが記載されています。
次の YAML マニフェストを
my-custom-class.yaml
という名前のファイルにコピーします。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
次のように置き換えます。
- EFS_STORAGE_CLASS_NAME は、
StorageClass
の名前に置き換えます。 - EFS_ID は、EFS ファイル システム ID に置き換えます(例: fs-12345678a)。
CSI ドライバ
provisioner
フィールドに別の CSI ドライバを指定できます。別の CSI ドライバを使用して StorageClass を作成するには、以下の YAML の例を使用します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: ...
次のように置き換えます。
CSI_DRIVER_NAME
は、CSI ドライバの名前に置き換えます(例:csi.example.com
)。CLASS_NAME
は、StorageClass の名前に置き換えます(例:my-custom-class
)。
CSI ドライバに応じて
parameters
でサブフィールドを構成します。- EFS_STORAGE_CLASS_NAME は、
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-rwo
StorageClass の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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPE
次のように置き換えます。
EBS_VOLUME_TYPE
: StorageClass が作成する AWS EBS ボリューム タイプ。CLASS_NAME
は、新しい StorageClass の名前に置き換えます。
たとえば、次の YAML では、汎用 SSD ボリューム(gp3)をプロビジョニングする新しいデフォルトの 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3
新しいカスタムクラスをクラスタに適用します。
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 に追加の CSI ドライバをインストールする。
クイックスタートで最初のワークロードをデプロイする。