Cloud Storage-Buckets als persistente Volumes bereitstellen

In dieser Anleitung erfahren Sie, wie Sie nichtflüchtige Kubernetes-Volumes verwenden, die von Ihren Cloud Storage Buckets gesichert werden, um Speicherressourcen für Ihre Kubernetes Pods in Google Kubernetes Engine (GKE) zu verwalten. Verwenden Sie diese Speicheroption, wenn Sie bereits mit PersistentVolumes vertraut sind und Konsistenz mit Ihren vorhandenen Bereitstellungen wünschen, die auf diesem Ressourcentyp basieren.

Diese Anleitung richtet sich an Plattformadministratoren und ‑operatoren, die die Speicherverwaltung für ihre GKE-Anwendungen vereinfachen möchten.

Machen Sie sich vor dem Lesen dieser Seite mit nichtflüchtigen Kubernetes-Volumes, Kubernetes-Pods und Cloud Storage-Buckets vertraut.

Wenn Sie eine optimierte Pod-basierte Schnittstelle ohne Vorkenntnisse zu nichtflüchtigen Kubernetes-Volumes wünschen, lesen Sie Cloud Storage-Buckets als ephemere CSI-Volumes bereitstellen.

Hinweis

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

Funktionsweise von nichtflüchtigen Volumes für Cloud Storage-Buckets

Bei der statischen Bereitstellung, erstellen Sie ein oder mehrere PersistentVolume-Objekte, die die Details des zugrunde liegenden Speichersystems enthalten. Pods in Ihren Clustern können dann den Speicher über PersistentVolumeClaims nutzen.

Die Verwendung eines nichtflüchtigen Volumes, das von einem Cloud Storage-Bucket gesichert wird, umfasst die folgenden Vorgänge:

  1. Speicherdefinition: Sie definieren ein PersistentVolume in Ihrem GKE-Cluster, einschließlich des zu verwendenden CSI-Treibers und aller erforderlichen Parameter. Für den CSI-Treiber für Cloud Storage FUSE geben Sie den Bucket-Namen und andere relevante Details an.

    Optional können Sie die Leistung Ihres CSI-Treibers mit der Dateicachefunktion optimieren. Durch das Caching von Dateien kann die App-Leistung von GKE gesteigert werden, indem häufig verwendete Cloud Storage-Dateien auf einem schnelleren lokalen Laufwerk zwischengespeichert werden.

    Außerdem können Sie die Funktion für parallele Downloads verwenden, um das Lesen großer Dateien aus Cloud Storage für Downloads mit mehreren Threads zu beschleunigen. Mit dieser Funktion können Sie die Ladezeiten von Modellen verbessern, insbesondere bei Lesevorgängen von mehr als 1 GB.

  2. Treiberaufruf: Wenn ein PersistentVolumeClaim Speicher anfordert, der der Spezifikation des PersistentVolume entspricht, ruft GKE den CSI-Treiber für Cloud Storage FUSE auf.

  3. Bucket-Bereitstellung: Der CSI-Treiber stellt den Bucket auf dem Knoten bereit, auf dem der anfragende Pod geplant ist. Dadurch ist der Inhalt des Buckets für den Pod als Verzeichnis im lokalen Dateisystem des Pods zugänglich. Mit Bereitstellungsoptionen können Sie genauer festlegen, wie Buckets im Dateisystem bereitgestellt werden. Sie können auch Volume-Attribute verwenden, um ein bestimmtes Verhalten des CSI-Treibers für Cloud Storage FUSE zu konfigurieren.

  4. Neues Anhängen: Wenn der Pod neu gestartet oder auf einem anderen Knoten neu geplant wird, stellt der CSI-Treiber denselben Bucket auf dem neuen Knoten bereit, um die Datenzugänglichkeit zu gewährleisten.

PersistentVolume erstellen

  1. Erstellen Sie ein PersistentVolume-Manifest mit der folgenden Spezifikation:

    Pod

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class  
      mountOptions:
        - implicit-dirs
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE  
    

    Ersetzen Sie die folgenden Werte:

    • NAMESPACE: Der Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.
    • BUCKET_NAME: Der Name des Cloud Storage-Bucket, den Sie beim Konfigurieren des Zugriffs auf die Cloud Storage-Buckets angegeben haben. Sie können einen Unterstrich (_) angeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto zugreifen kann. Weitere Informationen finden Sie unter Dynamische Bereitstellung in der Dokumentation zu Cloud Storage FUSE.

    Das Beispielmanifest zeigt diese erforderlichen Einstellungen:

    • spec.csi.driver: Verwenden Sie gcsfuse.csi.storage.gke.io als Namen für den CSI-Treiber.

    Optional können Sie diese Variablen anpassen:

    Pod (Dateicaching)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class 
      mountOptions:
        - implicit-dirs
        - file-cache:max-size-mb:-1
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE 
    

    Ersetzen Sie die folgenden Werte:

    • NAMESPACE: Der Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.
    • BUCKET_NAME: Der Name des Cloud Storage-Bucket, den Sie beim Konfigurieren des Zugriffs auf die Cloud Storage-Buckets angegeben haben. Sie können einen Unterstrich (_) angeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto zugreifen kann. Weitere Informationen finden Sie unter Dynamische Bereitstellung in der Dokumentation zu Cloud Storage FUSE.

    Pod (paralleler Download)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: gcs-fuse-csi-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      storageClassName: example-storage-class 
      mountOptions:
        - implicit-dirs
        - file-cache:enable-parallel-downloads:true
        - file-cache:max-size-mb:-1
      csi:
        driver: gcsfuse.csi.storage.gke.io
        volumeHandle: BUCKET_NAME
      claimRef:
        name: gcs-fuse-csi-static-pvc
        namespace: NAMESPACE 
    

    Ersetzen Sie die folgenden Werte:

    • NAMESPACE: Der Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.
    • BUCKET_NAME: Der Name des Cloud Storage-Bucket, den Sie beim Konfigurieren des Zugriffs auf die Cloud Storage-Buckets angegeben haben. Sie können einen Unterstrich (_) angeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto zugreifen kann. Weitere Informationen finden Sie unter Dynamische Bereitstellung in der Dokumentation zu Cloud Storage FUSE.
  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f PV_FILE_PATH
    

    Ersetzen Sie PV_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.

PersistentVolumeClaim erstellen

  1. Erstellen Sie ein PersistentVolumeClaim-Manifest mit der folgenden Spezifikation:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: gcs-fuse-csi-static-pvc
      namespace: NAMESPACE
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      storageClassName: example-storage-class
    

    Ersetzen Sie NAMESPACE durch den Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.

    Prüfen Sie diese Konfigurationseinstellungen, um Ihr PersistentVolume an einen PersistentVolumeClaim zu binden:

    • spec.storageClassName: Die storageClassName in den PersistentVolume- und PersistentVolumeClaim-Manifesten muss übereinstimmen, damit der Anspruch an das Volume gebunden werden kann. Der CSI-Treiber für Cloud Storage FUSE verwendet keine StorageClass-Objekte. Sie müssen nur darauf achten, dass das Feld storageClassName in beiden Ressourcen identisch ist. Sie können für dieses Feld einen leeren oder nicht leeren String verwenden. Es muss nicht auf ein vorhandenes StorageClass-Objekt verweisen und dient nur als Bindungslabel zwischen dem PV und dem PVC.
    • Die Felder spec.accessModes in den PersistentVolume- und PersistentVolumeClaim-Manifesten müssen übereinstimmen.
    • Das Feld spec.capacity.storage im PersistentVolume-Manifest muss mit spec.resources.requests.storage im PersistentVolumeClaim-Manifest übereinstimmen. Da es bei Cloud Storage-Buckets keine Größenbeschränkung gibt, können Sie eine beliebige Anzahl von Kapazitäten eingeben. Diese dürfen aber nicht leer sein.
  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f PVC_FILE_PATH
    

    Ersetzen Sie PVC_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.

Volume in einem Pod verwenden

  1. Erstellen Sie ein Pod-Manifest mit der folgenden Spezifikation:

    apiVersion: v1
    kind: Pod
    metadata:
      name: gcs-fuse-csi-example-static-pvc  
      namespace: NAMESPACE
      annotations:
        gke-gcsfuse/volumes: "true"
    spec:
      containers:
      - image: busybox
        name: busybox
        command: ["sleep"]
        args: ["infinity"]
        volumeMounts:
        - name: gcs-fuse-csi-static
          mountPath: /data
          readOnly: true
      serviceAccountName: KSA_NAME
      volumes:
      - name: gcs-fuse-csi-static
        persistentVolumeClaim:
          claimName: gcs-fuse-csi-static-pvc
          readOnly: true  
    

    Ersetzen Sie die folgenden Werte:

    Das Beispielmanifest zeigt diese erforderlichen Einstellungen:

    • metadata.annotations: Die Annotation gke-gcsfuse/volumes: "true" ist erforderlich. Optionale Annotationen finden Sie unter Sidecar-Container konfigurieren für.

    Optional können Sie diese Variablen anpassen:

    • spec.containers[n].volumeMounts[n].readOnly: Geben Sie „true“ an, wenn nur bestimmte Volume-Bereitstellungen schreibgeschützt sind.
    • spec.volumes[n].persistentVolumeClaim.readOnly: Geben Sie „true“ an, wenn alle Volume-Bereitstellungen schreibgeschützt sind.
  2. Wenden Sie das Manifest auf den Cluster an:

    kubectl apply -f POD_FILE_PATH
    

    Ersetzen Sie POD_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.

(Optional) Denselben Cloud Storage-Bucket mit verschiedenen PersistentVolumes bereitstellen

Ab der GKE-Version 1.33.0-gke.1932000 können Sie mehrere PersistentVolumes verwenden, die von demselben Cloud Storage-Bucket gesichert werden. In jedem PersistentVolume-Objekt müssen Sie ein eindeutiges volumeHandle im Format BUCKET_NAME:UNIQUE_SUFFIX verwenden.

Ein Anwendungsfall könnte das Bereitstellen verschiedener PersistentVolumes mit unterschiedlichen Bereitstellungsoptionen für denselben Pod sein, wobei sich jedes PersistentVolume auf denselben Cloud Storage-Bucket bezieht.

Probleme beheben

Weitere Informationen zur Fehlerbehebung beim CSI-Treiber für Cloud Storage FUSE finden Sie unter der Anleitung zur Fehlerbehebung in der Dokumentation zum GitHub-Projekt.

Nächste Schritte