Auf dieser Seite wird beschrieben, wie Sie ein EFS-basiertes nichtflüchtiges Volume für die Verwendung in GKE on AWS mit dem EFS-CSI-Treiber einrichten. Das Elastic File System (EFS) ist der zugrunde liegende AWS-Mechanismus, der Netzwerkdateisysteme für Ihren Cluster bereitstellt. Ein EFS-basiertes nichtflüchtiges Volume ist eine Clusterressource, die Ihren Arbeitslasten über einen EFS-Zugangspunkt Speicher zur Verfügung stellt und dafür sorgt, dass der Speicher auch dann erhalten bleibt, wenn keine Arbeitslasten damit verbunden sind.
GKE on AWS unterstützt sowohl die statische als auch die dynamische Bereitstellung von nichtflüchtigem Speicher. Die dynamische Bereitstellung verwendet eine etwas andere Einrichtung, erfordert danach aber weniger Verwaltungsaufwand.
Hinweise
Führen Sie zuerst die folgende Aufgaben aus, um die Schritte auf dieser Seite auszuführen:
- Machen Sie sich mit der Verarbeitung des Arbeitslastspeichers in Kubernetes und GKE on AWS vertraut. Weitere Informationen zu diesen Themen finden Sie unter Nichtflüchtigen Speicher in GKE on AWS-Arbeitslasten verwenden und Amazon EFS-Ressourcen erstellen.
- Führen Sie ein Upgrade auf die Kubernetes-Version 1.25 oder höher durch, um die dynamische Bereitstellung von Volumes mit EFS zu verwenden. Wenn Sie die Kubernetes-Version 1.24 verwenden, wenden Sie sich an den Support, um Zugriff auf diese Funktion zu erhalten.
Statische Bereitstellung – Übersicht
Das Erstellen eines Elastic File System (EFS) und dessen Bereitstellung für Arbeitslasten in Ihrem Cluster durch statische Bereitstellung umfasst vier Schritte:
- EFS-Ressource erstellen
- Netzwerk konfigurieren
- Bereitstellungsziel erstellen
PersistentVolume
erstellen
Der letzte Schritt besteht darin, durch die Arbeitslast nichtflüchtigen Speicher anzufordern. Dazu wird ein PersistentVolumeClaim
ausgegeben.
Dynamische Bereitstellung – Übersicht
Das Erstellen einer EFS-Ressource und ihrer Bereitstellung über die dynamische Bereitstellung umfasst ebenfalls vier Schritte:
- EFS-Ressource erstellen
- Netzwerk konfigurieren
- Bereitstellungsziel erstellen
StorageClass
erstellen
Das Erstellen des StorageClass
ist ein einmaliger Vorgang. Sobald eine Speicherklasse mit bestimmten Merkmalen definiert wurde, kann die Arbeitslast einen nichtflüchtiger Speicher ausstellen oder nichtflüchtigen Speicher anfordern. Alle PersistentVolumeClaims für Speicher mit diesen Eigenschaften können dieselbe StorageClass
anfordern.
Häufige Schritte
Unabhängig davon, ob Sie in Ihrem Cluster die statische oder dynamische Bereitstellung verwenden, müssen Sie mit den hier aufgeführten Einrichtungsschritten beginnen und dann die entsprechenden Schritte zur statischen oder dynamischen Bereitstellung ausführen. Nachdem Sie die EFS erstellt und zugänglich gemacht haben, muss die Arbeitslast die letzten Schritte für den Zugriff darauf ausführen. Die erforderlichen Schritte werden unter EFS-Speicher verwenden beschrieben.
AWS EFS-Ressource erstellen
Eine EFS-Ressource ist erforderlich, unabhängig davon, ob Sie die statische oder die dynamische Bereitstellung verwenden. Wenn Ihr Cluster beide verwendet, können Sie separate EFS-Ressourcen für sie erstellen oder dieselbe für beide verwenden. Weitere Informationen zum Erstellen einer EFS-Ressource finden Sie unter Amazon EFS-Dateisysteme erstellen.
Sie können auch eine vorhandene EFS wiederverwenden. In diesem Fall können Sie diesen Abschnitt überspringen und mit Bereitstellungsziele erstellen fortfahren.
Rufen Sie die AWS-Region ab, in der Ihr Cluster ausgeführt wird.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(awsRegion)"
Ersetzen Sie Folgendes:
- CLUSTER_NAME: der Name des AWS-Clusters
- LOCATION der Google Cloud-Speicherort des AWS-Clusters
Erstellen Sie mit dem folgenden Befehl ein EFS-Ressourcensystem in derselben AWS-Region.
aws efs create-file-system \ --region AWS_REGION \ --performance-mode generalPurpose \ --query 'FileSystemId' \ --output text
Ersetzen Sie Folgendes:
- AWS_REGION: die AWS-Region, in der der Cluster ausgeführt wird
Die Ausgabe enthält die ID des Dateisystems. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Bereitstellungsziele erstellen
Der CSI-Treiber für EFS greift über EFS-Bereitstellungsziele auf Dateisysteme zu. Ein Bereitstellungsziel ist eine private IP-Adresse, die AWS-Sicherheitsgruppen verwendet, um den Zugriff auf die zugrunde liegende EFS zu steuern.
Wenn die Knotenpools in Ihrem Cluster in verschiedenen Subnetzen ausgeführt werden, müssen Sie in jedem Knotenpool-Subnetz ein separates Bereitstellungsziel erstellen.
In diesem Beispiel wird der Zugriff auf jedes Bereitstellungsziel durch eine einzelne Sicherheitsgruppe geschützt, die sowohl die Bereitstellungsziele als auch die Knotenpoolmaschinen enthält. Abhängig von Ihrer VPC-Konfiguration und den Sicherheitsanforderungen können Sie diese Konfiguration in zwei oder mehr Sicherheitsgruppen aufteilen, z. B. eine für Bereitstellungsziele und eine für Knotenpool-Worker-Knoten.
Dedizierte Sicherheitsgruppe erstellen, um den Zugriff auf EFS zu steuern
Rufen Sie die ID der AWS-VPC ab, in der der Cluster ausgeführt wird.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(networking.vpcId)"
Ersetzen Sie Folgendes:
- CLUSTER_NAME
- LOCATION
Die Ausgabe enthält die ID Ihrer VPC. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Erstellen Sie eine Sicherheitsgruppe, um den Zugriff auf Ihr EFS-Bereitstellungsziel zu steuern.
aws ec2 create-security-group \ --group-name gke-efs-security-group \ --description "EFS security group" \ --vpc-id VPC_ID \ --output text
Ersetzen Sie VPC_ID durch die ID der AWS-VPC, in der der Cluster ausgeführt wird.
Die Ausgabe enthält die ID der neuen Sicherheitsgruppe. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
AWS erstellt standardmäßig Sicherheitsgruppen mit einer Standardregel, die den gesamten ausgehenden Traffic zulässt. Entfernen Sie die Standardregel für ausgehenden Traffic.
aws ec2 revoke-security-group-egress \ --group-id SECURITY_GROUP_ID --ip-permissions '[{"IpProtocol":"-1","FromPort":-1,"ToPort":-1,"IpRanges":[{"CidrIp":"0.0.0.0/0"}]}]'
Ersetzen Sie SECURITY_GROUP_ID durch die ID der AWS-Sicherheitsgruppe.
Autorisieren Sie den eingehenden und ausgehenden Traffic für EFS (Port 2049).
aws ec2 authorize-security-group-ingress \ --group-id SECURITY_GROUP_ID \ --protocol tcp \ --port 2049 \ --source-group SECURITY_GROUP_ID
aws ec2 authorize-security-group-egress \ --group-id SECURITY_GROUP_ID \ --protocol tcp \ --port 2049 \ --source-group SECURITY_GROUP_ID
Erstellen Sie in jedem Knotenpool-Subnetz ein EFS-Bereitstellungsziel.
Listen Sie Subnetze auf, die allen Knotenpools zugeordnet sind.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format="value(subnetId)"
Ersetzen Sie Folgendes:
- CLUSTER_NAME
- LOCATION
Die Ausgabe ist eine Liste von Subnetz-IDs. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Erstellen Sie für jedes Subnetz ein verknüpftes EFS-Bereitstellungsziel mit der angewendeten Sicherheitsgruppe.
aws efs create-mount-target \ --file-system-id EFS_ID \ --subnet-id SUBNET_ID \ --security-groups SECURITY_GROUP_ID
Ersetzen Sie Folgendes:
- EFS_ID: die ID Ihrer EFS-Ressource.
- SUBNET_ID: die ID des Subnetzes des Knotenpools.
- SECURITY_GROUP_ID
Fügen Sie die EFS-Sicherheitsgruppe allen Cluster-Knotenpools hinzu.
Rufen Sie die Liste aller Knotenpools ab.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION
Ersetzen Sie Folgendes:
- CLUSTER_NAME
- LOCATION
Die Ausgabe enthält die Namen der Knotenpools Ihres Clusters. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Aktualisieren Sie die einzelnen Knotenpools so, dass sie die neue EFS-Sicherheitsgruppe enthalten.
gcloud container aws node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --security-group-ids=SECURITY_GROUP_IDS
Ersetzen Sie Folgendes:
- NODE_POOL_NAME ist der Name des Knotenpools.
- CLUSTER_NAME: Der Name Ihres Clusters.
- LOCATION
- SECURITY_GROUP_IDS ist die Liste der Sicherheitsgruppen-IDs für Worker-Knoten.
Persistentes (statisches) oder Speicherklasse (dynamisch) erstellen
Wenn Sie eine statische Bereitstellung verwenden, müssen Sie im nächsten Schritt ein nichtflüchtiges Volume erstellen. Wenn Sie die dynamische Bereitstellung verwenden, übernimmt der EFS-Treiber dies für Sie. Stattdessen definieren Sie eine Speicherklasse für Arbeitslasten, die Sie in ihrem VolumeClaim angeben. Wählen Sie den Tab aus, der der ausgewählten Bereitstellungsmethode entspricht.
Statische Bereitstellung
Wenn Sie eine statische Bereitstellung verwenden, müssen Sie im nächsten Schritt ein nichtflüchtiges Volume erstellen, das eine EFS-Freigabe bereitstellt.
Wählen Sie den entsprechenden Tab aus, je nachdem, ob Sie eine direkte Verbindung zur EFS-Freigabe oder eine Verbindung über einen Zugangspunkt herstellen.
Direkte Verbindung
Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
efs-volume.yaml
. Das Manifest verweist auf die zuvor erstellte EFS-Speicherklasse.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_ID
Ersetzen Sie Folgendes:
- VOLUME_NAME durch einen Namen für das nichtflüchtige Volume.
- CLAIM_NAME durch den Namen, den Sie für den PersistentVolumeClaim verwenden möchten.
- EFS_ID durch Ihre EFS-Ressourcen-ID. Beispiel:
fs-12345678a
Zugriffspunkt
Wenn Sie ein Volume erstellen möchten, das auf einem Zugriffspunkt basiert, müssen Sie ihn manuell bereitstellen. Weitere Informationen finden Sie unter Mit EFS-Zugangspunkten arbeiten.
Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
efs-volume.yaml
. Das Manifest verweist auf die zuvor erstellte EFS-Speicherklasse.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # Set storageClassName to empty string for static provisioning. See [Use an EFS resource](/anthos/clusters/docs/multi-cloud/aws/how-to/use-efs) storageClassName: "" claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_ID::ACCESS_POINT_ID
Ersetzen Sie Folgendes:
- VOLUME_NAME durch einen Namen für das nichtflüchtige Volume.
- CLAIM_NAME durch den Namen, den Sie für den PersistentVolumeClaim verwenden möchten.
- EFS_ID durch Ihre EFS-Ressourcen-ID. Beispiel:
fs-12345678a
- ACCESS_POINT_ID durch die ID Ihres Zugangspunkts. Beispiel:
fsap-1234567890abcde
Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f efs-volume.yaml
Die Ausgabe bestätigt die Erstellung des PersistentVolumes.
persistentvolume/VOLUME_NAME created
Dynamische Bereitstellung
In diesem Abschnitt wird beschrieben, wie Sie eine Speicherklasse erstellen, die auf die zuvor erstellte EFS-Ressource verweist. Danach können Entwickler auf die EFS-Ressource zugreifen. Folgen Sie dazu der Anleitung unter EFS-Ressource verwenden.
Erstellen Sie eine Speicherklasse, die auf die EFS-Ressourcen-ID verweist.
Kopieren Sie das folgende YAML-Fragment in eine neue Datei mit dem Namen
efs-storage-class.yaml
. Weitere Informationen zum Anpassen der in dieser Datei beschriebenen Eigenschaften der Speicherklasse finden Sie in der Dokumentation zu den Parametern der EFS-Speicherklasse.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: EFS_STORAGE_CLASS_NAME 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, den Sie für die Speicherklasse ausgewählt haben.
- EFS_ID durch Ihre EFS-Ressourcen-ID, z. B. fs-12345678a.
Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f efs-storage-class.yaml
Bei Erfolg enthält die Ausgabe dieses Befehls eine Zeile wie diese:
storageclass/EFS_STORAGE_CLASS_NAME created
Bereinigen
Führen Sie die folgenden Befehle aus, um die Ressourcen zu entfernen, die Sie in den vorherigen Abschnitten erstellt haben:
Verwenden Sie
kubectl
, um die EFS-Anforderungsressource aus dem Cluster zu entfernen:kubectl delete -f efs-claim.yaml
Wenn Sie die statische Bereitstellung verwenden, entfernen Sie mit
kubectl
die zugehörigen Ressourcen aus dem Cluster:kubectl delete -f efs-volume.yaml
Wenn Sie die dynamische Bereitstellung verwenden, entfernen Sie mit
kubectl
die zugehörigen Ressourcen aus dem Cluster:kubectl delete -f efs-storage-class.yaml
Ermitteln Sie die ID des Bereitstellungsziels:
aws efs describe-mount-targets \ --file-system-id EFS_ID \ --profile adminuser \ --region AWS_REGION
Ersetzen Sie Folgendes:
- EFS_ID: die ID Ihrer EFS-Ressource
- AWS_REGION: die AWS-Region, in der der Cluster ausgeführt wird
Die Ausgabe enthält die ID des Bereitstellungsziels. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Löschen Sie das EFS-Bereitstellungsziel:
aws efs delete-mount-target \ --mount-target-id MOUNT_TARGET_ID \ --profile adminuser \ --region AWS_REGION
Ersetzen Sie Folgendes:
- MOUNT_TARGET_ID: die ID Ihres EFS-Bereitstellungsziels
- AWS_REGION: AWS-Region des Bereitstellungsziels
Löschen Sie alle Sicherheitsgruppen, die Sie erstellt haben.
Löschen Sie das Dateisystem mit dem Befehl "delete-file-system". Mit dem Befehl „describe-file-systems“ in der Befehlszeile können Sie eine Liste Ihrer Dateisysteme abrufen. Die Dateisystem-ID ist in der Antwort enthalten.
aws efs delete-file-system \ --file-system-id EFS_ID \ --profile adminuser \ --region AWS_REGION
Ersetzen Sie Folgendes:
- EFS_ID
- AWS_REGION
Nächste Schritte
PersistentVolumeClaim
aus einer Arbeitslast für den Zugriff auf ein EFS-Volume verwenden- Weitere Möglichkeiten zur Verwendung von EFS-Volumes finden Sie in den
aws-efs-csi-driver
-Beispielen.