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:
- Sie kennen die Anforderungen und Einschränkungen des CSI-Treibers für Cloud Storage FUSE.
- Cloud Storage-Bucket erstellen
- CSI-Treiber für Cloud Storage FUSE aktivieren
- Zugriff auf Cloud Storage-Buckets konfigurieren
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:
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.
Treiberaufruf: Wenn ein PersistentVolumeClaim Speicher anfordert, der der Spezifikation des PersistentVolume entspricht, ruft GKE den CSI-Treiber für Cloud Storage FUSE auf.
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.
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
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: NAMESPACEErsetzen 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 Siegcsfuse.csi.storage.gke.ioals Namen für den CSI-Treiber.
Optional können Sie diese Variablen anpassen:
spec.mountOptions: Übergeben Sie Bereitstellungsoptionen an Cloud Storage FUSE. Geben Sie die Flags als Liste an. Weitere Informationen finden Sie unter Bereitstellungsoptionen für nichtflüchtige Volumes.spec.csi.volumeAttributes: Übergeben Sie zusätzliche Volume-Attribute an Cloud Storage FUSE.
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: NAMESPACEErsetzen 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: NAMESPACEErsetzen 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.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f PV_FILE_PATHErsetzen Sie PV_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.
PersistentVolumeClaim erstellen
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-classErsetzen 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: DiestorageClassNamein 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 keineStorageClass-Objekte. Sie müssen nur darauf achten, dass das FeldstorageClassNamein 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.accessModesin den PersistentVolume- und PersistentVolumeClaim-Manifesten müssen übereinstimmen. - Das Feld
spec.capacity.storageim PersistentVolume-Manifest muss mitspec.resources.requests.storageim 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.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f PVC_FILE_PATHErsetzen Sie PVC_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.
Volume in einem Pod verwenden
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: trueErsetzen Sie die folgenden Werte:
- NAMESPACE: Der Kubernetes-Namespace, in dem Sie Ihren Pod bereitstellen möchten.
- KSA_NAME: Der Name des Kubernetes-Dienstkontos , das Sie beim Konfigurieren des Zugriffs auf die Cloud Storage-Buckets erstellt haben.
Das Beispielmanifest zeigt diese erforderlichen Einstellungen:
metadata.annotations: Die Annotationgke-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.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f POD_FILE_PATHErsetzen 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
- Leistung des CSI-Treibers für Cloud Storage FUSE optimieren
- Weitere Beispiele für die Verwendung des CSI-Treibers auf GitHub.
- Weitere Informationen zu Cloud Storage FUSE.