In dieser Anleitung 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 Google Kubernetes Engine (GKE) zu verwalten. Diese Speicheroption ist sinnvoll, wenn Sie bereits mit PersistentVolumes vertraut sind und Konsistenz mit Ihren vorhandenen Bereitstellungen wünschen, die auf diesem Ressourcentyp basieren.
Dieser Leitfaden 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 persistenten Kubernetes-Volumes, Kubernetes-Pods und Cloud Storage-Buckets vertraut.
Wenn Sie eine optimierte Pod-basierte Schnittstelle ohne vorherige Erfahrung mit nichtflüchtigen Kubernetes-Volumes wünschen, lesen Sie den Abschnitt Cloud Storage-Buckets als ephemere CSI-Volumes bereitstellen.
Hinweise
Prüfen Sie, ob die folgenden 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 persistenten 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 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 dem Datei-Caching optimieren. Durch das Caching von Dateien kann die Leistung von GKE-Apps gesteigert werden, da häufig aufgerufene Cloud Storage-Dateien auf einer schnelleren lokalen Festplatte 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 Ladezeiten von Modellen verbessern, insbesondere bei Lesevorgängen von mehr als 1 GB.
Treiberaufruf: Wenn mit einem PersistentVolumeClaim Speicher angefordert wird, der der Spezifikation des PersistentVolume 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. 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 das Verhalten des Cloud Storage FUSE CSI-Treibers zu konfigurieren.
Erneutes Anhängen: Wenn der Pod neu gestartet oder auf einen anderen Knoten verschoben wird, hängt der CSI-Treiber denselben Bucket auf dem neuen Knoten wieder 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 Dokumentation zu Cloud Storage FUSE.
Das Beispielmanifest enthält diese erforderlichen Einstellungen:
spec.csi.driver
: Verwenden Siegcsfuse.csi.storage.gke.io
als Namen für den CSI-Treiber.
Optional können Sie diese Variablen anpassen:
spec.mountOptions
: Übergibt Optionen zur Bereitstellung an Cloud Storage FUSE. Geben Sie die Flags in einem String durch Kommas getrennt ohne Leerzeichen an.spec.csi.volumeAttributes
: Übergibt 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: 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.
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 den Pod bereitstellen möchten.
Prüfen Sie die folgenden Konfigurationseinstellungen, um Ihr PersistentVolume an einen PersistentVolumeClaim zu binden:
- Die
spec.storageClassName
-Felder in Ihren PersistentVolume- und PersistentVolumeClaim-Manifesten sollten übereinstimmen. Der 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 Ihren PersistentVolume- und PersistentVolumeClaim-Manifesten sollten übereinstimmen. - Das Feld
spec.capacity.storage
in Ihrem PersistentVolume-Manifest sollte 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" 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 diese erforderlichen Einstellungen:
metadata.annotations
: Die Annotationgke-gcsfuse/volumes: "true"
ist erforderlich. Optionale Annotationen finden Sie unter Sidecar-Container konfigurieren.
Optional können Sie diese Variablen anpassen:
spec.containers[n].volumeMonts[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_PATH
Ersetzen Sie POD_FILE_PATH durch den Pfad zu Ihrer YAML-Datei.
(Optional) Denselben Cloud Storage-Bucket mit verschiedenen persistenten Volumes bereitstellen {:#mount-same-bucket-different-pv}, verfügbar ab GKE-Version 1.33.0-gke.1932000
Wenn Sie denselben Cloud Storage-Bucket mit mehreren verschiedenen nichtflüchtigen Volumes einbinden möchten, müssen Sie für jedes nichtflüchtige Volume ein eindeutiges volumeHandle
verwenden. Verwenden Sie im PersistentVolume-Objekt das Format BUCKET_NAME:UNIQUE_SUFFIX
für das Feld volumeHandle
. Ersetzen Sie BUCKET_NAME
durch den Namen Ihres Buckets und UNIQUE_SUFFIX
durch eine beliebige eindeutige Kennung. Beispiel: myBucket:xyz123
.
Ein Beispiel hierfür wäre, denselben Cloud Storage-Bucket mehrmals auf demselben Knoten zu mounten, jeweils mit eigenen Mount-Optionen.
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 Containerspezifikation des Treibers im Deployment-YAML fest. Dadurch wird das Attribut gcsfuseLoggingSeverity
für das Volume automatisch auf „trace“ gesetzt.
Weitere Tipps zur Fehlerbehebung finden Sie in der Anleitung zur Fehlerbehebung in der Dokumentation zum GitHub-Projekt.
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