Das Elastic File System (EFS) ist der zugrunde liegende AWS-Mechanismus, um Ihrem Cluster Speicherplatz (Festplattenspeicher) zur Verfügung zu stellen. Ein PersistentVolume ist eine Clusterressource, die EFS-Speicher für Ihre Arbeitslasten verfügbar macht und dafür sorgt, dass er auch dann erhalten bleibt, wenn keine Arbeitslasten damit verbunden sind. In diesem Thema wird beschrieben, wie eine Arbeitslast mit einem PersistentVolumeClaim auf ein PersistentVolume zugreifen kann.
Diese Seite richtet sich an Betreiber und Speicherspezialisten, die Speicher konfigurieren und verwalten möchten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud -Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
GKE on AWS unterstützt die statische Bereitstellung von PersistentVolumes für alle unterstützten Kubernetes-Versionen. Für Cluster mit Kubernetes-Version 1.24 oder höher unterstützt GKE on AWS auch die dynamische Bereitstellung. Wenn Sie das dynamische Provisioning verwenden möchten, muss Ihr Clusteradministrator es konfigurieren. PersistentVolume
konfigurieren
PersistentVolumeClaim erstellen
Wählen Sie unten den entsprechenden Tab aus, je nachdem, ob Ihre Arbeitslast eine Verbindung zu einem statisch oder dynamisch bereitgestellten nichtflüchtigen Volume herstellen soll.
Statisch
In dieser Anleitung wird davon ausgegangen, dass Ihr Clusteradministrator bereits mindestens ein PersistentVolume bereitgestellt hat. Erstellen Sie einen PersistentVolumeClaim, um auf dieses PersistentVolume zuzugreifen und das zugrunde liegende EFS mit Ihren Arbeitslasten zu verwenden.
Wenn Sie ein PersistentVolumeClaim für ein statisch bereitgestelltes PersistentVolume erstellen möchten, 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: "" # Leave as empty string for static provisioning
resources:
requests:
storage: 5Gi
Ersetzen Sie:
- CLAIM_NAME: Ein Name, den Sie für den PersistentVolumeClaim auswählen, an den gebunden werden soll, z. B.
efs-claim1
. Lassen Sie das Feld leer, um die Bindung an die Standardspeicherklasse vorzunehmen.
Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f efs-claim.yaml
Diese Ausgabe bestätigt die Erstellung des PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dynamisch
In dieser Anleitung wird davon ausgegangen, dass Ihr Clusteradministrator bereits mindestens eine StorageClass für die dynamische Bereitstellung bereitgestellt hat. Wenn Sie mit dieser StorageClass ein dynamisch bereitgestelltes PersistentVolume erstellen und den zugrunde liegenden EFS-Zugriffspunkt mit Ihren Arbeitslasten verwenden möchten, erstellen Sie einen PersistentVolumeClaim.
So erstellen Sie einen PersistentVolumeClaim: Der EFS-CSI-Treiber verwendet diesen PersistentVolumeClaim mit der angegebenen StorageClass, um ein PersistentVolume dynamisch bereitzustellen.
- 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: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Ersetzen Sie:
- CLAIM_NAME: Ein Name, den Sie für Ihren PersistentVolumeClaim auswählen, z. B.
efs-claim1
- EFS_STORAGE_CLASS_NAME: Der Name der StorageClass, an die Ihr PersistentVolumeClaim gebunden werden soll. Lassen Sie dieses Feld leer, um die Bindung an die Standardspeicherklasse vorzunehmen.
Wenden Sie die YAML-Datei auf Ihren Cluster an.
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.
In diesem Abschnitt wird ein Beispiel-StatefulSet erstellt, das einen PersistentVolumeClaim verwendet.
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 die in Ihrem PersistentVolumeClaim angegebene EFS-Ressource bereitstellt:
Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
efs-statefulset.yaml
. Dieses Beispielmanifest startet einen Ubuntu Linux-Container, der Ihre EFS-Ressource unter/efs-data
bereitstellt. Der Container schreibt alle fünf Sekunden in eine Datei in der EFS-Ressourceout.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 CLAIM_NAME durch den Namen des zuvor angegebenen PersistentVolumeClaim, z. B.
efs-claim1
.Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f efs-statefulset.yaml
Die Ausgabe bestätigt die Erstellung des StatefulSets.
statefulset.apps/efs-shell created
Das Herunterladen und Starten des Container-Images kann einige Minuten dauern.
Bestätigen Sie mit
kubectl get pods
, dass der Pod des StatefulSets im StatusRunning
ist.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.kubectl exec -it efs-shell-0 -- bash
Der Befehl
kubectl
startet eine Shell auf dem Pod.Wenn Sie bestätigen möchten, dass Ihre EFS-Ressource 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.
Bereinigen
Zum Entfernen des StatefulSets verwenden Sie kubectl delete
.
kubectl delete -f efs-statefulset.yaml