In diesem Leitfaden erfahren Sie, wie Sie nichtflüchtige Kubernetes-Volumes verwenden, die von Ihren Cloud Storage-Buckets unterstützt werden, um Speicherressourcen für Ihre Kubernetes-Pods in der Google Kubernetes Engine (GKE) zu verwalten. Diese Speicheroption eignet sich, wenn Sie bereits mit PersistentVolumes vertraut sind und für Ihre vorhandenen Bereitstellungen, die auf diesem Ressourcentyp basieren, für Einheitlichkeit sorgen möchten.
Dieser Leitfaden richtet sich an Plattformadministratoren und Nutzer von Betriebsumgebungen, die die Speicherverwaltung für ihre GKE-Anwendungen vereinfachen möchten.
Machen Sie sich vor dem Lesen dieser Seite mit Kubernetes-persistenten Volumes, Kubernetes-Pods und Cloud Storage-Buckets vertraut.
Wenn Sie eine optimierte podbasierte Benutzeroberfläche benötigen, für die keine Vorkenntnisse mit nichtflüchtigen Kubernetes-Volumes erforderlich sind, lesen Sie den Hilfeartikel Cloud Storage-Buckets als CSI-sitzungsspezifische Volumes bereitstellen.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- 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 persistenten Volumes, das von einem Cloud Storage-Bucket unterstützt wird, umfasst folgende Vorgänge:
Speicherdefinition: Sie definieren ein PersistentVolume in Ihrem GKE-Cluster, einschließlich des zu verwendenden CSI-Treibers und aller erforderlichen Parameter. Geben Sie für den Cloud Storage FUSE CSI-Treiber den Bucket-Namen und andere relevante Details an.
Optional können Sie die Leistung Ihres CSI-Treibers mithilfe der Funktion Datei-Caching optimieren. Das Datei-Caching kann die Leistung von GKE-Anwendungen steigern, indem häufig aufgerufene Cloud Storage-Dateien auf einem schnelleren lokalen Laufwerk zwischengespeichert werden.
Außerdem können Sie die Funktion paralleler Download 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 Modellladezeiten verbessern, insbesondere bei Lesevorgängen mit einer Größe von mehr als 1 GB.
Treiberaufruf: Wenn ein PersistentVolumeClaim Speicher anfordert, der der Spezifikation des PersistentVolumes entspricht, ruft GKE den Cloud Storage FUSE CSI-Treiber auf.
Bucket-Bereitstellung: Der CSI-Treiber stellt den Bucket auf dem Knoten bereit, auf dem der anfragende Pod geplant ist. So ist der Inhalt des Buckets für den Pod als Verzeichnis im lokalen Dateisystem des Pods zugänglich. Mit Bereitstellungsoptionen können Sie die Bereitstellung von Buckets im Dateisystem optimieren. Sie können auch Volume-Attribute verwenden, um das Verhalten des Cloud Storage FUSE CSI-Treibers zu konfigurieren.
Neuverknüpfung: Wenn der Pod neu gestartet oder auf einen anderen Knoten verschoben wird, hängt der CSI-Treiber denselben Bucket wieder am neuen Knoten an, 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: 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 Cloud Storage FUSE-Dokumentation.
Das Beispielmanifest enthält die folgenden erforderlichen Einstellungen:
spec.csi.driver
: Verwenden Siegcsfuse.csi.storage.gke.io
als Namen für den CSI-Treiber.
Optional können Sie die folgenden Variablen anpassen:
spec.mountOptions
: Übergeben Sie Optionen zur Bereitstellung an Cloud Storage FUSE. Geben Sie die Flags in einem String durch Kommas getrennt ohne Leerzeichen an.spec.csi.volumeAttributes
: Übergeben Sie zusätzliche Volume-Attribute an Cloud Storage FUSE.
Pod (Datei-Caching)
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: den Namen 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 Cloud Storage FUSE-Dokumentation.
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: den Namen 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 Cloud Storage FUSE-Dokumentation.
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
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 die folgenden Konfigurationseinstellungen, um Ihr PersistentVolume an einen PersistentVolumeClaim zu binden:
- Die
spec.storageClassName
-Felder in den Manifesten für PersistentVolumes und PersistentVolumeClaims müssen übereinstimmen. Die storageClassName muss sich nicht auf ein vorhandenes StorageClass-Objekt beziehen. Zum Binden der Anforderung an ein Volume können Sie einen beliebigen Namen verwenden, der aber nicht leer sein kann. - Die
spec.accessModes
-Felder in den Manifesten für PersistentVolumes und PersistentVolumeClaims müssen übereinstimmen. - Das Feld
spec.capacity.storage
in Ihrem PersistentVolume-Manifest muss mit demspec.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.
- Die
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
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" gke-gcsfuse/ephemeral-storage-limit: "50Gi" 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:
- 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 enthält die folgenden erforderlichen Einstellungen:
metadata.annotations
: Die Anmerkunggke-gcsfuse/volumes: "true"
ist erforderlich. Optionale Anmerkungen finden Sie unter Sidecar-Container konfigurieren.
Optional können Sie die folgenden Variablen anpassen:
spec.containers[n].volumeMonts[n].readOnly
: Geben Sie „wahr“ an, wenn nur bestimmte Volume-Bereitstellungen schreibgeschützt sind.spec.volumes[n].persistentVolumeClaim.readOnly
: Geben Sie „wahr“ an, wenn alle Volume-Bereitstellungen schreibgeschützt sind.
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.
Probleme beheben
Wenn Sie Probleme mit Cloud Storage FUSE beheben müssen, können Sie das Flag log-severity
auf TRACE
setzen. Sie legen das Flag im Abschnitt args
der Container-Spezifikation des Treibers in der Deployment-YAML-Datei fest. Dadurch wird das gcsfuseLoggingSeverity
-Volumenattribut automatisch auf „Trace“ (Spuren) gesetzt.
Weitere Tipps zur Fehlerbehebung finden Sie in der Anleitung zur Fehlerbehebung in der GitHub-Projektdokumentation.
Nächste Schritte
- Informationen zum Optimieren der Leistung des CSI-Treibers für Cloud Storage FUSE
- Weitere Beispiele für die Verwendung des CSI-Treibers auf GitHub
- Weitere Informationen zu Cloud Storage FUSE