EFS-Ressource verwenden

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

Google Cloud

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.
  1. 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.

  1. 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.
  1. 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:

  1. 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-Ressource out.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.

  2. 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.

  3. Bestätigen Sie mit kubectl get pods, dass der Pod des StatefulSets im Status Running 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
    
  4. 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.

  5. Wenn Sie bestätigen möchten, dass Ihre EFS-Ressource bereitgestellt ist, prüfen Sie den Inhalt der Datei out.txt mit dem Befehl tail.

    tail /efs-data/out.txt
    

    Die Ausgabe enthält aktuelle Zeiten in UTC.

  6. 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

Nächste Schritte