Anthos Cluster on AWS-Versionen 1.6 und höher unterstützen das AWS Elastic File System (EFS) mit dem EFS CSI-Treiber. In diesem Thema wird erläutert, wie Sie ein vorhandenes EFS-Dateisystem als PersistentVolume in Ihren Nutzerclustern bereitstellen.
Hinweis
Für die Ausführung der Schritte in diesem Thema benötigen Sie Folgendes:
- Ein vorhandenes EFS-Dateisystem in derselben AWS-VPC wie Ihre Anthos Clusters on AWS-Installation.
- Mindestens ein EFS-Bereitstellungsziel in derselben AWS-VPC wie Ihre Anthos Clusters on AWS-Installation.
- Alle EFS-Bereitstellungsziele müssen folgenden Bedingungen entsprechen:
- Die privaten Subnetze für Ihre Anthos Clusters on AWS-Installation. Standardmäßig erstellen Anthos Clusters on AWS-Subnetze mit dem Namen
gke-CLUSTER_ID-private-AWS_ZONE
, wobei CLUSTER_ID Ihre Nutzercluster-ID und AWS_ZONE die AWS-Verfügbarkeitszone ist. - Die Sicherheitsgruppe des Knotenpools.
Standardmäßig erstellen Anthos Clusters on AWS standardmäßig Knotenpools mit dem Namen
gke-CLUSTER_ID-nodepool
, wobei CLUSTER_ID Ihre Nutzercluster-ID ist.
- Die privaten Subnetze für Ihre Anthos Clusters on AWS-Installation. Standardmäßig erstellen Anthos Clusters on AWS-Subnetze mit dem Namen
- Verwenden Sie im Verzeichnis
anthos-aws
anthos-gke
, um den Kontext zu Ihrem Nutzercluster zu wechseln.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ersetzen Sie CLUSTER_NAME durch den Nutzerclusternamen.
EFS-PersistentVolume verwenden
Für die Verwendung eines EFS-Dateisystems als PersistentVolume mit Ihren Nutzerclustern erstellen Sie zuerst ein PersistentVolume und dann einen PersistentVolumeClaim, auf den Sie in der Arbeitslast verweisen.
PersistentVolume erstellen
Führen Sie die folgenden Schritte aus, um ein PersistentVolume mit dem EFS-CSI-Treiber zu erstellen.
Verwenden Sie im Verzeichnis
anthos-aws
anthos-gke
, um den Kontext zu Ihrem Nutzercluster zu wechseln.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ersetzen Sie CLUSTER_NAME durch den Nutzerclusternamen.Welche PersistentVolume-Konfiguration verwendet wird, hängt davon ab, ob Sie eine direkte Verbindung zum Elastic File System herstellen oder über einen Zugangspunkt. Wählen Sie aus, ob Sie eine direkte Verbindung zum Elastic File System oder über einen Zugangspunkt herstellen möchten.
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_FILE_SYSTEM_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_FILE_SYSTEM_ID durch Ihre EFS-Dateisystem-ID. Beispiel:
fs-12345678a
Zugriffspunkt
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_FILE_SYSTEM_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_FILE_SYSTEM_ID durch Ihre EFS-Dateisystem-ID. Beispiel:
fs-12345678a
- ACCESS_POINT_ID durch die ID Ihres Zugangspunkts. Beispiel:
fsap-1234567890abcde
Wenden Sie die YAML-Datei auf den Cluster an.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
Die Ausgabe bestätigt die Erstellung des PersistentVolumes.
persistentvolume/VOLUME_NAME created
PersistentVolumeClaim erstellen
Erstellen Sie einen PersistentVolumeClaim, um Ihr EFS-Dateisystem mit Ihren Arbeitslasten zu verwenden.
Zum Erstellen von PersistentVolumeClaim kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
efs-claim.yaml
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi
Ersetzen Sie CLAIM_NAME durch einen Namen für den PersistentVolumeClaim. Beispiel:
efs-claim1
Wenden Sie die YAML-Datei auf den Cluster an.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yaml
Die Ausgabe bestätigt die Erstellung des PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
StatefulSet erstellen
Nachdem Sie einen PersistentVolumeClaim erstellt haben, können Sie ihn in einer Arbeitslast verwenden.
Mit den Schritten in diesem Abschnitt wird ein Beispiel-StatefulSet erstellt, in dem Ihr EFS-Dateisystem bereitgestellt ist. Sie können einen PersistentVolumeClaim auch mit anderen Arbeitslasttypen wie Pods und Deployments verwenden, indem Sie auf die Anforderung in spec.volumes
verweisen.
Führen Sie die folgenden Schritte aus, um ein StatefulSet zu erstellen, das das in Ihrem PersistentVolumeClaim angegebene EFS-Dateisystem bereitstellt:
Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
efs-statefulset.yaml
. Dieses Beispielmanifest startet einen Ubuntu Linux-Container, der Ihr EFS-Dateisystem unter/efs-data
bereitstellt. Der Container schreibt alle fünf Sekunden in eine Datei im EFS-Dateisystemout.txt
.apiVersion: apps/v1 kind: StatefulSet metadata: name: efs-shell spec: selector: matchLabels: app: test-efs serviceName: efs-app replicas: 1 template: metadata: labels: app: test-efs spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"] volumeMounts: - name: efs-volume mountPath: /efs-data volumes: - name: efs-volume persistentVolumeClaim: claimName: CLAIM_NAME
Ersetzen Sie Folgendes:
- CLAIM_NAME durch den Namen des zuvor angegebenen PersistentVolumeClaim. Beispiel:
efs-claim1
- CLAIM_NAME durch den Namen des zuvor angegebenen PersistentVolumeClaim. Beispiel:
Wenden Sie die YAML-Datei auf den Cluster an.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yaml
Die Ausgabe bestätigt die Erstellung des StatefulSets.
statefulset.apps/efs-shell created
Es dauert einige Minuten, bis das Container-Image heruntergeladen und gestartet wurde.
Bestätigen Sie mit
kubectl get pods
, dass der Pod des StatefulSets im StatusRunning
ist.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efs
Die Ausgabe enthält den Namen des Pods und seinen Status. In der folgenden Antwort lautet der Name des Pods
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Sobald der Pod den Status „Running” hat, stellen Sie mit
kubectl exec
eine Verbindung zum Pod her, der das StatefulSet hostet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
Der Befehl
kubectl
startet eine Shell auf dem Pod.Wenn Sie bestätigen möchten, dass Ihr EFS-Dateisystem bereitgestellt ist, prüfen Sie den Inhalt der Datei
out.txt
mit dem Befehltail
.tail /efs-data/out.txt
Die Ausgabe enthält aktuelle Zeiten in UTC.
Trennen Sie die Verbindung zum Pod mit dem Befehl
exit
.exit
Ihre Shell kehrt zu Ihrem lokalen Computer zurück.
Zum Entfernen des StatefulSets verwenden Sie
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Bereinigen
Führen Sie die folgenden Befehle aus, um die Ressourcen zu entfernen, die Sie in den vorherigen Abschnitten erstellt haben:
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-volume.yaml
Weitere Informationen
- Weitere Möglichkeiten zur Verwendung von EFS-Volumes finden Sie in den
aws-efs-csi-driver
-Beispielen.