GKE on AWS stellt automatisch den Amazon Elastic Block Store (EBS) und den Amazon Elastic File Store (EFS) von Container Storage Interface (CSI) bereit.
Die Versionen des EBS-CSI-Treibers und des EFS-CSI-Treibers sind an eine Kubernetes-Version von GKE on AWS gebunden. Die Treiberversion ist in der Regel die neueste Version, die bei der Veröffentlichung einer GKE-Version verfügbar war. Bei einem Upgrade des Clusters werden die Treiber automatisch aktualisiert.
Standard-StorageClass verwenden
Wenn Sie einen PersistentVolumeClaim ohne das Feld spec.storageClassName
erstellen, wird ein allgemeines SSD-Volume (gp2) mit der standardmäßigen EBS-CSI-Treiber-Speicherklasse von GKE on AWS bereitgestellt.
Mit der folgenden YAML-Datei wird ein PersistentVolumeClaim (PVC) mit dem Namen mypvc
mit einer Größe von 30 Gibibyte erstellt.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Andere vorinstallierte StorageClass verwenden
Der EBS-CSI-Treiber von GKE on AWS enthält auch die Speicherklasse premium-rwo
, die bereitgestellte IOPS-SSD-Volumes (io1
) mit höherem Durchsatz bereitstellt.
Geben Sie sie im spec.storageClassName
des PVC an, um sie zu verwenden.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: premium-rwo
Benutzerdefinierte StorageClass verwenden
Wenn weder die Standard- noch die premium-rwo
-Speicherklasse Ihren Anforderungen entspricht, können Sie zusätzliche StorageClasses für EBS-Volumes erstellen oder CSI-Treiber (Container Storage Interface) verwenden.
Wählen Sie aus, ob Sie ein EBS-Volume oder einen anderen CSI-Treiber verwenden.
EBS-Volume
Auf diesem Tab wird beschrieben, wie Sie Ihre eigene benutzerdefinierte Speicherklasse erstellen, die einen EBS-Volume-Typ, einen Dateisystemtyp und andere Parameter angibt. Zusätzliche Speicherklasse-Parameter finden Sie auf der GitHub-Seite zum EBS-CSI-Treiber für GKE on AWS.
Zum Konfigurieren einer benutzerdefinierten StorageClass kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
my-custom-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer
Ersetzen Sie dabei
CLASS_NAME
durch den Namen Ihrer neuen StorageClass.Mit der folgenden YAML-Datei wird beispielsweise eine neue StorageClass erstellt, die mit dem XFS-Dateisystem Durchsatz-optimierte HDD-EBS-Volumes bereitstellt.
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
Benutzerdefinierte EFS-Speicherklasse
Auf diesem Tab wird beschrieben, wie Sie eine benutzerdefinierte Speicherklasse für den EFS-CSI-Treiber-Bereitsteller erstellen. Eine Liste der Voraussetzungen für diese Speicherklasse finden Sie unter EFS-Ressource verwenden. Auf der EFS-CSI-Treiberseite werden zusätzlich zu den Parametern im folgenden Manifest zusätzliche Speicherklassenparameter aufgeführt.
Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
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"
Ersetzen Sie:
- EFS_STORAGE_CLASS_NAME durch den Namen der
StorageClass
. - EFS_ID durch Ihre EFS-Dateisystem-ID, z. B. fs-12345678a.
CSI-Treiber
Sie können im Feld
provisioner
einen anderen CSI-Treiber angeben.Zum Erstellen einer StorageClass mit einem anderen CSI-Treiber können Sie das folgende YAML-Beispiel verwenden:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: ...
Ersetzen Sie Folgendes:
CSI_DRIVER_NAME
durch den Namen des CSI-Treibers, z. B.csi.example.com
CLASS_NAME
durch den Namen der StorageClass, z. B.my-custom-class
Konfigurieren Sie die untergeordneten Felder unter
parameters
gemäß Ihrem CSI-Treiber.- EFS_STORAGE_CLASS_NAME durch den Namen der
Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f my-custom-class.yaml
PersistentVolumeClaim mit benutzerdefinierter StorageClass erstellen
Nachdem die benutzerdefinierte StorageClass erstellt wurde, können Sie sie in einem PVC angeben. Im folgenden Beispiel wird ein PVC namens
my-pvc
erstellt, das auf die StorageClassmy-custom-class
verweist.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
Standard-StorageClass festlegen
GKE on AWS verwendet die Standard-StorageClass standard-rwo
, die gp2-EBS-Volumes bereitstellt. Sie können diese Standardeinstellung in eine andere StorageClass ändern.
So ändern Sie die Standard-StorageClass:
Aktualisieren Sie die Annotation
is-default-class
für die StorageClassstandard-rwo
mitkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Erstellen Sie eine neue StorageClass mit der Annotation
storageclass.kubernetes.io/is-default-class: true
.Die folgende Beispiel-StorageClass nutzt den Treiber
ebs.csi.aws.com
. Informationen zum Installieren eines weiteren Speichertreibers finden Sie unter Zusätzliche CSI-Treiber installieren.Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
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
Ersetzen Sie Folgendes:
EBS_VOLUME_TYPE
ist der von der StorageClass erstellte AWS EBS-Volume-Typ.CLASS_NAME
durch den Namen Ihrer neuen StorageClass
Mit der folgenden YAML-Datei wird beispielsweise eine neue Standard-Speicherklasse erstellt, die Standard-SSD-Volumes (gp3) bereitstellt.
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
Wenden Sie die neue benutzerdefinierte Klasse auf Ihren Cluster an.
kubectl apply -f my-custom-class.yaml
Nach der Anwendung dieses Manifests verwendet GKE on AWS die StorageClass my-custom-default-class
für neue Speicheranfragen.
Auf StorageClass in einem StatefulSet verweisen
Verweisen Sie auf die StorageClass im volumeClaimTemplates
eines StatefulSet, um sie zu verwenden.
Wenn Sie in der Spezifikation volumeClaimTemplates
eines StatefulSet auf eine StorageClass verweisen, bietet Kubernetes stabilen Speicher mit PersistentVolumes (PVs).
Kubernetes ruft den in der StorageClass definierten Bereitsteller auf, um ein neues Speicher-Volume zu erstellen. Nachdem das Volume bereitgestellt wurde, erstellt Kubernetes automatisch eine Produktversion.
Das folgende StatefulSet verweist auf die StorageClass my-custom-class
und stellt ein 1-Gibibyte-Volume bereit:
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
Nächste Schritte
Mehr über nichtflüchtige Volumes und dynamische Bereitstellung in GKE erfahren
Installieren Sie zusätzliche CSI-Treiber auf GKE on AWS.
Stellen Sie Ihre erste Arbeitslast mit der Kurzanleitung bereit.