EFS-Dateisysteme verwenden

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

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

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

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

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

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

    • CLAIM_NAME durch den Namen des zuvor angegebenen PersistentVolumeClaim. Beispiel: efs-claim1
  2. 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.

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

  5. Wenn Sie bestätigen möchten, dass Ihr EFS-Dateisystem 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.

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