Filesystem in Userspace (FUSE) ist eine Schnittstelle zum Exportieren eines Dateisystems in den Linux-Kernel. Mit Cloud Storage FUSE können Sie Cloud Storage-Buckets als Dateisystem bereitstellen, sodass Anwendungen über gängige Datei-E/A-Vorgänge auf die Objekte in einem Bucket zugreifen können (z. B. Öffnen, Lesen, Schreiben, Schließen anstatt Cloud-spezifische APIs.
Mit dem Cloud Storage FUSE CSI-Treiber können Sie die Kubernetes API verwenden, um bereits vorhandene Cloud Storage-Buckets als Volumes zu nutzen. Ihre Anwendungen können Objekte mithilfe der Cloud Storage FUSE-Dateisystemsemantik hochladen und herunterladen. Der CSI-Treiber für Cloud Storage FUSE bietet eine vollständig verwaltete Umgebung, die auf dem Open Source Google Cloud Storage FUSE CSI-Treiber basiert.
Der Treiber unterstützt nativ die folgenden Möglichkeiten zur Konfiguration Ihrer Cloud Storage-gestützten Volumes:
Flüchtige CSI-Volumes: Sie geben den Cloud Storage-Bucket inline mit der Pod-Spezifikation an. Weitere Informationen zu diesem Volume-Typ finden Sie in der Open Source-Dokumentation zu Kubernetes in der Übersicht über sitzungsspezifische CSI-Volumes.
Statische Bereitstellung: Sie erstellen eine PersistentVolume-Ressource, die auf den Cloud Storage-Bucket verweist. Ihr Pod kann dann auf einen PersistentVolumeClaim verweisen, der an dieses PersistentVolume gebunden ist. Weitere Informationen zu diesem Workflow finden Sie unter Pod für die Verwendung eines PersistentVolumes für Storage konfigurieren.
Sie können den Cloud Storage FUSE CSI-Treiber mit Datei-Caching verwenden, um die Leseleistung von Anwendungen zu verbessern, die kleine Dateien aus Cloud Storage-Buckets verarbeiten. Das Datei-Cache-Feature von Cloud Storage FUSE ist ein clientbasierter Lese-Cache, mit dem wiederkehrende Dateilesevorgänge schneller aus dem Cache-Speicher Ihrer Wahl bereitgestellt werden können. Je nach Ihren Preis-Leistungs-Anforderungen können Sie aus einer Reihe von Speicheroptionen für den Lese-Cache auswählen, einschließlich lokaler SSDs und Persistent Disk-basierter Speicher. Sie müssen das Datei-Caching-Opt-In mit dem CSI-Treiber für Cloud Storage FUSE auswählen. Weitere Informationen zu Best Practices für das Caching finden Sie unter Cloud Storage FUSE-Leistung.
Vorteile
- Der Cloud Storage FUSE CSI-Treiber auf Ihrem Cluster aktiviert die automatische Bereitstellung und Verwaltung des Treibers. Der Treiber funktioniert sowohl mit Standard- als auch mit Autopilot-Clustern.
- Der Cloud Storage FUSE CSI-Treiber benötigt keinen privilegierten Zugriff, der für FUSE-Clients normalerweise erforderlich ist. Dies ermöglicht eine bessere Sicherheitslage.
- Die Unterstützung für sitzungsspezifische CSI-Volumes vereinfacht die Konfiguration und Verwaltung des Volumes, da auf PersistentVolumeClaim- und PersistentVolume-Objekte verzichtet wird.
- Der Cloud Storage FUSE CSI-Treiber unterstützt die Zugriffsmodi
ReadWriteMany
,ReadOnlyMany
undReadWriteOnce
. - Sie können Workload Identity Federation for GKE verwenden, um die Authentifizierung zu verwalten und gleichzeitig genau zu steuern, wie Ihre Pods auf Cloud Storage-Objekte zugreifen. Bei der Verwendung der Identitätsföderation von Arbeitslasten ist für Lese-/Schreib-Arbeitslasten einheitlicher Zugriff auf Bucket-Ebene erforderlich.
- Wenn Sie ML-Training und die Bereitstellung von Arbeitslasten mit Frameworks wie Ray, PyTorch, Spark und TensorFlow ausführen, können Sie die vom Cloud Storage FUSE CSI-Treiber bereitgestellte Übertragbarkeit und Einfachheit nutzen, um Ihre Arbeitslasten direkt ohne zusätzliche Codeänderungen auf Ihren GKE-Clustern auszuführen.
- Sie können Cloud Storage-Objekte bei aktiviertem Datei-Caching lesen, um die Leseleistung zu verbessern. Durch das Datei-Caching werden wiederholte Lesevorgänge beschleunigt, da Objekte aus dem lokalen Speicher bereitgestellt werden. Weitere Informationen zu den Vorteilen des Datei-Cachings finden Sie in der Dokumentation zu Cloud Storage FUSE.
- Wenn Cloud Storage FUSE v.2.4.0 und der Datei-Cache aktiviert sind, können Sie die Funktion paralleler Download verwenden, um das Lesen großer Dateien aus Cloud Storage für mehrstufige Downloads zu beschleunigen. Mit dieser Funktion können Sie die Modellladezeiten verbessern, insbesondere bei Lesevorgängen mit einer Größe von mehr als 1 GB. So ist das Laden von Llama2 70B beispielsweise bis zu doppelt so schnell.
- Sie können Cloud Storage FUSE-Volumes in Init-Containern verwenden.
Vorbereitung
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
- Cloud Storage-Buckets erstellen Zur Verbesserung der Leistung setzen Sie das Feld
Location type
aufRegion
und wählen eine Region aus, in der Ihr GKE-Cluster ausgeführt wird.
Beschränkungen
- Das Cloud Storage FUSE-Dateisystem unterscheidet sich im Vergleich zu einem POSIX-Dateisystem über Leistung, Verfügbarkeit, Zugriffsautorisierung und Semantik.
- Der Cloud Storage FUSE CSI-Treiber wird in GKE Sandbox nicht unterstützt.
- Der Cloud Storage FUSE CSI-Treiber unterstützt keine Volume-Snapshots, Volume-Klonen oder Volume-Erweiterungen.
- Der Cloud Storage FUSE CSI-Treiber unterstützt aufgrund von Einschränkungen der Workload Identity Federation for GKE keine Pods, die im Hostnetzwerk (
hostNetwork: true
) ausgeführt werden. - Sehen Sie sich die bekannten Probleme im GitHub-Projekt des Cloud Storage FUSE CSI-Treibers an.
- Sehen Sie sich die offenen Probleme im GitHub-Projekt des Cloud Storage FUSE CSI-Treibers an. Die Probleme werden gesichtet und in zukünftigen Updates behoben.
Voraussetzungen
Damit Sie den CSI-Treiber für Cloud Storage FUSE verwenden können, müssen Ihre Cluster die folgenden Anforderungen erfüllen:
- Verwenden Sie Linux-Cluster mit GKE-Version 1.24 oder höher.
- Workload Identity Federation for GKE aktiviert
- Aktivieren Sie GKE-Metadatenserver in Ihrem Knotenpool.
- Prüfen Sie, ob die neueste Version des Google Cloud CLI installiert ist.
- Zur Verwendung derPrivates Image für Sidecar-Container-Feature ,Benutzerdefiniertes Schreibpuffer-Volume-Feature oder zum Konfigurieren des Sidecar-Containerressourcenanfragen muss Ihr Cluster diese GKE-Versionen verwenden: 1.25.16-gke.1360000, 1.26.13-gke.1052000, 1.27.10-gke.1055000, 1.28.6-gke.1369000, 1.29.1-gke.1575000 oder höher
- Damit Sie das Datei-Cache-Feature oder Volume-Attribute verwenden können, muss Ihr Cluster diese GKE-Versionen verwenden: 1.25.16-gke.1759000, 1.26.15-gke.1158000, 1.27.12-gke.1190000, 1.28.8-gke.1175000, 1.29.3-gke.1093000 oder höher.
- Zur Nutzung von Cloud Storage FUSE-Volumes in init-Containern muss Ihr Cluster die GKE-Version 1.29.3-gke.1093000 oder höher verwenden und alle Knoten im Cluster die GKE-Version 1.29 oder höher verwenden.
- Um die Funktion Paralleler Download in GKE verwenden zu können, müssen Ihre Cluster die Version 1.29.6-gke.1254000, 1.30.2-gke.1394000 oder höher ausführen.
CSI-Treiber für Cloud Storage FUSE aktivieren
Zum Erstellen eines Standardclusters mit aktiviertem Cloud Storage FUSE CSI-Treiber können Sie die gcloud CLI verwenden:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.svc.id.goog
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Der Name Ihres Clusters.VERSION
: Die GKE-Versionsnummer. Sie müssen mindestens 1.24 auswählen.LOCATION
: der Compute Engine-Standort für den Cluster.PROJECT_ID
: Ihre Projekt-ID.
Verwenden Sie den Befehl gcloud container clusters update
, um den Treiber auf einem vorhandenen Cluster zu aktivieren:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Der Name Ihres Clusters.LOCATION
: der Compute Engine-Standort für den Cluster.
Nachdem Sie den CSI-Treiber für Cloud Storage FUSE aktiviert haben, können Sie den Treiber in Kubernetes-Volumes verwenden. Geben Sie dazu den Treiber- und den Bereitstellernamen an: gcsfuse.csi.storage.gke.io
.
Zugriff auf Cloud Storage-Buckets mit GKE Workload Identity Federation for GKE konfigurieren
So machen Sie Ihre Cloud Storage-Buckets für Ihren GKE-Cluster mithilfe Workload Identity Federation for GKE zugänglich: Weitere Informationen finden Sie unter Anwendungen für die Verwendung von Workload Identity Federation for GKE konfigurieren.
Rufen Sie Anmeldedaten für Ihren Cluster ab:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION
Ersetzen Sie dabei Folgendes:
CLUSTER_NAME
: Der Name Ihres Clusters, für den Workload Identity Federation for GKE aktiviert ist.LOCATION
: der Compute Engine-Standort für den Cluster.
Erstellen Sie einen Namespace, der für das Kubernetes-Dienstkonto verwendet werden soll. Sie können auch den Namespace
default
oder einen vorhandenen Namespace verwenden.kubectl create namespace NAMESPACE
Ersetzen Sie dabei Folgendes:
NAMESPACE
: der Name des Kubernetes-Namespace für das Kubernetes-ServiceAccount.
Erstellen Sie ein Kubernetes-ServiceAccount für die Anwendung: Sie können auch ein beliebiges Kubernetes-Dienstkonto in einem beliebigen Namespace verwenden, einschließlich des Kubernetes-Dienstkontos
default
.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACE
Ersetzen Sie dabei Folgendes:
KSA_NAME
: der Name des neuen Kubernetes-ServiceAccount.NAMESPACE
: der Name des Kubernetes-Namespace für das Kubernetes-ServiceAccount.
Weisen Sie dem Kubernetes-Dienstkonto eine der IAM-Rollen für Cloud Storage zu.
Mit folgendem Befehl können Sie Ihrem Kubernetes-Dienstkonto eine Rolle zuweisen, die nur für den Zugriff auf einen bestimmten Cloud Storage-Bucket berechtigt:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"
Ersetzen Sie dabei Folgendes:
BUCKET_NAME
: Name Ihres Cloud Storage-Buckets.PROJECT_NUMBER
: Die numerische Projektnummer Ihres GKE-Clusters. Ihre Projektnummer finden Sie unter Projekte identifizieren.PROJECT_ID
: Die Projekt-ID Ihres GKE-Clusters.NAMESPACE
: der Name des Kubernetes-Namespace für das Kubernetes-ServiceAccount.KSA_NAME
: der Name des neuen Kubernetes-ServiceAccount.ROLE_NAME
: Die IAM-Rolle, die Ihrem Kubernetes-Dienstkonto zugewiesen werden soll.- Verwenden Sie für schreibgeschützte Arbeitslasten die Rolle "Storage-Objekt-Betrachter" (
roles/storage.objectViewer
). - Verwenden Sie für Lese-/Schreibarbeitslasten die Rolle „Storage-Objekt-Nutzer“ (
roles/storage.objectUser
).
- Verwenden Sie für schreibgeschützte Arbeitslasten die Rolle "Storage-Objekt-Betrachter" (
Optional können Sie die Rolle Ihrem Kubernetes-Dienstkonto zuweisen, um mit folgendem Befehl auf alle Cloud Storage-Buckets im Projekt zuzugreifen:
gcloud projects add-iam-policy-binding GCS_PROJECT \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"
Ersetzen Sie dabei Folgendes:
GCS_PROJECT
: Die Projekt-ID Ihrer Cloud Storage-Buckets.PROJECT_NUMBER
: Die numerische Projektnummer Ihres GKE-Clusters. Ihre Projektnummer finden Sie unter Projekte identifizieren.PROJECT_ID
: Die Projekt-ID Ihres GKE-Clusters.NAMESPACE
: der Name des Kubernetes-Namespace für das Kubernetes-ServiceAccount.KSA_NAME
: der Name des neuen Kubernetes-ServiceAccount.ROLE_NAME
: Die IAM-Rolle, die Ihrem Kubernetes-Dienstkonto zugewiesen werden soll.- Verwenden Sie für schreibgeschützte Arbeitslasten die Rolle "Storage-Objekt-Betrachter" (
roles/storage.objectViewer
). - Verwenden Sie für Lese-/Schreibarbeitslasten die Rolle „Storage-Objekt-Nutzer“ (
roles/storage.objectUser
).
- Verwenden Sie für schreibgeschützte Arbeitslasten die Rolle "Storage-Objekt-Betrachter" (
Bereitstellung von Cloud Storage FUSE-Buckets vorbereiten
In diesem Abschnitt wird beschrieben, wie Sie die Bereitstellung von Cloud Storage FUSE-Buckets auf Ihren Clustern vorbereiten.
Pod-Annotationen angeben
Der CSI-Treiber greift auf Pod-Annotationen zurück, um zu ermitteln, ob Ihr Pod Cloud Storage-gestützte Volumes verwendet. Wenn der Treiber die erforderlichen Annotationen erkennt, wird ein Sidecar-Container namens gke-gcsfuse-sidecar
in Ihren Arbeitslast-Pod eingefügt. Die Cloud Storage FUSE-Instanzen werden im Sidecar-Container ausgeführt und stellen die Cloud Storage-Buckets für Ihre Arbeitslast bereit.
Damit der CSI-Treiber die Cloud Storage-Buckets bereitstellen kann, müssen Sie die Annotation gke-gcsfuse/volumes: "true"
in Ihrer Pod-Spezifikation unter dem Feld metadata
angeben. Wenn Sie möchten, dass Ihre Cloud-Storage-gesicherten Volumes von anderen Kubernetes-Arbeitslasttypen (z. B. Job, Deploymentoder StatefulSet) genutzt werden, stellen Sie sicher, dass Sie die Annotationen im Feld spec.template.metadata.annotations
konfigurieren.
Wenn Sie Istio oder Cloud Service Mesh verwenden, fügen Sie die folgenden Anmerkungen auf Pod-Ebene hinzu:
proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": true }'
traffic.sidecar.istio.io/excludeOutboundIPRanges: 169.254.169.254/32
Ressourcen für den Sidecar-Container konfigurieren
Standardmäßig ist der Sidecar-Container mit den folgenden Ressourcenanfragen konfiguriert, wobei Ressourcenlimits nicht festgelegt sind:
- 250 mCPU
- 256 MiB Arbeitsspeicher
- Sitzungsspezifischer 5 GiB-Speicher
Wenn Sie diese Werte überschreiben möchten, können Sie optional die Annotation gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request]
angeben, wie im folgenden Beispiel gezeigt:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
gke-gcsfuse/cpu-limit: "10"
gke-gcsfuse/memory-limit: 10Gi
gke-gcsfuse/ephemeral-storage-limit: 1Ti
gke-gcsfuse/cpu-request: 500m
gke-gcsfuse/memory-request: 1Gi
gke-gcsfuse/ephemeral-storage-request: 50Gi
Berücksichtigen Sie die folgenden Überlegungen, wenn Sie die Menge der zuzuweisenden Ressourcen festlegen:
- Wenn Sie nur entweder Ressourcenanfrage-Annotation oder Limit-Annotation festlegen, erzwingt GKE dieselben Werte für die Ressourcenanfrage und das Ressourcenlimit.
- Wenn Ihr Arbeitslast-Pod mehrere Cloud Storage-Volumes verbraucht, werden die Sidecar-Container-Ressourcen von mehreren Cloud Storage-FUSE-Instanzen gemeinsam genutzt. Wenn dies auf Sie zutrifft, sollten Sie die Ressourcenzuweisung für mehrere Cloud Storage-Volumes erhöhen.
- Weisen Sie dem Sidecar-Container mehr CPU zu, wenn Ihre Arbeitslasten einen höheren Durchsatz benötigen. Eine unzureichende CPU führt zu einer Drosselung durch Cloud Storage FUSE.
- Wenn Ihre Arbeitslasten eine große Anzahl von Dateien verarbeiten müssen und das Metadaten-Caching von Cloud Storage FUSE aktiviert ist, erhöhen Sie die Arbeitsspeicherzuweisung des Sidecar-Containers. Der Arbeits-Speicherverbrauch von Cloud Storage FUSE für das Metadaten-Caching ist proportional zur Anzahl der Dateien, aber nicht zur Dateigröße. Unzureichender Arbeits-Speicher führt zu einem Fehler aufgrund fehlenden Speichers in Cloud Storage FUSE und zum Absturz der Arbeitslastanwendung.
- Zum Caching von Dateien speichert Cloud Storage FUSE die Dateien standardmäßig in einem lokalen temporären Verzeichnis. Schätzen Sie, wie viel freier Speicherplatz Ihre Arbeitslast für das Datei-Caching benötigt, und erhöhen Sie das flüchtige Speicherlimit entsprechend. Weitere Informationen finden Sie unter Volume-Attribute.
- Bei Schreibvorgängen stellt Cloud Storage FUSE die Dateien in einem lokalen temporären Verzeichnis bereit, bevor die Dateien in den Cloud Storage-Bucket hochgeladen werden. Schätzen Sie, wie viel freier Speicherplatz Ihre Arbeitslast für das Staging beim Schreiben großer Dateien benötigt, und erhöhen Sie das flüchtige Speicherlimit entsprechend. Weitere Informationen finden Sie unter Lese-/Schreib-Semantik in der GitHub-Dokumentation zu Cloud Storage FUSE.
- Mit dem Wert
"0"
können Sie Ressourcenlimits oder Anfragen in Standardclustern aufheben. Die Annotationgke-gcsfuse/memory-limit: "0"
lässt beispielsweise das Arbeits-Speicherlimit des Sidecar-Containers bei der Standardarbeitsspeicheranforderung leer. Dies ist nützlich, wenn Sie nicht entscheiden können, wie viele Ressourcen Cloud Storage FUSE für Ihre Arbeitslasten benötigt, und Cloud Storage FUSE alle verfügbaren Ressourcen auf einem Knoten nutzen darf. Nachdem Sie die Ressourcenanforderungen für Cloud Storage FUSE anhand Ihrer Arbeitslastmesswerte berechnet haben, können Sie entsprechende Limits festlegen.
Privates Image für den Sidecar-Container konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie das Sidecar-Container-Image verwenden, wenn Sie es in einer privaten Container Registry hosten. Dieses Szenario kann zutreffen, wenn Sie private Cluster für Sicherheitszwecke verwenden müssen oder wenn Ihr Cluster eingeschränkten Zugriff auf das öffentliche Internet hat. So konfigurieren und verwenden Sie das private Sidecar-Container-Image:
Auf dieser Seite finden Sie ein kompatibles öffentliches Sidecar-Container-Image.
Rufen Sie es in Ihrer lokalen Umgebung ab und übertragen Sie es in Ihre private Container Registry.
Geben Sie im Manifest einen Container mit dem Namen
gke-gcsfuse-sidecar
an, der nur das Feldimage
enthält. GKE verwendet das angegebene Sidecar-Container-Image, um sich auf die Sidecar-Container-Injektion vorzubereiten. Hier ein Beispiel:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
containers:
- name: gke-gcsfuse-sidecar
image: PRIVATE_REGISTRY/gcs-fuse-csi-driver-sidecar-mounter:PRIVATE_IMAGE_TAG
- name: main # your main workload container.
Ersetzen Sie dabei Folgendes:
PRIVATE_REGISTRY
: Ihre private Container Registry.PRIVATE_IMAGE_TAG
: durch Ihr privates Sidecar-Container-Image-Tag.
Benutzerdefiniertes Schreib-Zwischenspeicher-Volume für den Sidecar-Container konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie ein benutzerdefiniertes Zwischenspeicher-Volume für die Schreibvorgangzwischenspeicherung in Cloud Storage FUSE konfigurieren.
Dieses Szenario kann zutreffen, wenn Sie das Standard-Volume emptyDir
für Cloud Storage FUSE ersetzen müssen, um die Dateien in Schreibvorgängen bereitzustellen.
Sie können jeden von GKE unterstützten Speichertyp angeben, z. B. PersistentVolumeClaim
. GKE verwendet das angegebene Volume für die Zwischenspeicherung von Dateischreibvorgängen.
Dies ist nützlich, wenn Sie Dateien mit mehr als 10 GiB in Autopilot-Cluster schreiben müssen.
Wenn Sie das benutzerdefinierte Zwischenspeicher-Volume verwenden möchten, müssen Sie fsGroup
ungleich null angeben.
Das folgende Beispiel zeigt, wie Sie einen vordefinierten PVC als Zwischenspeicher-Volume verwenden können:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-buffer
persistentVolumeClaim:
claimName: BUFFER_VOLUME_PVC
Ersetzen Sie dabei Folgendes:
FS_GROUP
: die fsGroup-ID.BUFFER_VOLUME_PVC
ist der Name des vordefinierten PVC.
Benutzerdefiniertes Lese-Cache-Volume für den Sidecar-Container konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie ein benutzerdefiniertes Cache-Volume für das Lese-Caching von Cloud Storage FUSE konfigurieren.
Dieses Szenario kann zutreffen, wenn Sie das Standard-Volume emptyDir
für Cloud Storage FUSE ersetzen müssen, um die Dateien in Lesevorgängen im Cache zu speichern.
Sie können jeden von GKE unterstützten Speichertyp angeben, z. B. PersistentVolumeClaim
. GKE verwendet das angegebene Volume für das Datei-Caching.
Dies ist nützlich, wenn Sie Dateien mit mehr als 10 GiB in Autopilot-Clustern im Cache speichern müssen.
Wenn Sie das benutzerdefinierte Cache-Volume verwenden möchten, müssen Sie fsGroup
ungleich null angeben.
Das folgende Beispiel zeigt, wie Sie einen vordefinierten PVC als Cache-Volume verwenden können:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-cache
persistentVolumeClaim:
claimName: CACHE_VOLUME_PVC
Ersetzen Sie dabei Folgendes:
FS_GROUP
: die fsGroup-ID.CACHE_VOLUME_PVC
ist der Name des vordefinierten PVC.
Volume als sitzungsspezifisches CSI-Volume bereitstellen
Sitzungsspezifische CSI-Volumes sind an den Pod-Lebenszyklus gebunden. Bei diesem Bereitstellungsansatz müssen Sie die PersistentVolume- und PersistentVolumeClaim-Objekte, die den Cloud Storage-Buckets zugeordnet sind, nach der Pod-Beendigung nicht beibehalten.
Sitzungsspezifisches CSI-Speicher-Volume in einem Pod verwenden
Speichern Sie das folgende YAML-Manifest:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-ephemeral namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: terminationGracePeriodSeconds: 60 containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io readOnly: true volumeAttributes: bucketName: BUCKET_NAME mountOptions: "implicit-dirs" gcsfuseLoggingSeverity: warning
Das vorherige Beispiel zeigt, wie Sie den Cloud Storage-Bucket inline im Pod-Manifest angeben können. Das Beispiel enthält die folgenden Felder:
metadata.annotations
: Die Annotationgke-gcsfuse/volumes: "true"
ist erforderlich. Optionale Annotationen finden Sie unter Ressourcen für den Sidecar-Container konfigurieren.spec.terminationGracePeriodSeconds
: Optional. Standardmäßig ist dies auf 30 eingestellt. Wenn Sie große Dateien in den Cloud Storage-Bucket schreiben müssen, erhöhen Sie diesen Wert, damit Cloud Storage FUSE genügend Zeit hat, um die Daten nach dem Beenden Ihrer Anwendung zu leeren. Weitere Informationen finden Sie im Blog Kubernetes best practices: Termining withrace.spec.serviceAccountName
: Verwenden Sie dasselbe Kubernetes-Dienstkonto wie im Schritt Zugriff auf Cloud Storage-Buckets mit der GKE Workload Identity Federation for GKE konfigurieren.spec.volumes[n].csi.driver
: Verwenden Siegcsfuse.csi.storage.gke.io
als CSI-Treibernamen.spec.volumes[n].csi.volumeAttributes.bucketName
: Geben Sie den Namen des Cloud Storage FUSE-Buckets an. 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.spec.volumes[n].csi.volumeAttributes.mountOptions
: Optional. Übergeben Sie Optionen zur Bereitstellung an Cloud Storage FUSE. Geben Sie die Flags in einem String durch Kommas getrennt ohne Leerzeichen an.spec.volumes[n].csi.volumeAttributes
: Optional. Übergeben Sie andere Volume-Attribute an Cloud Storage FUSE.spec.volumes[n].csi.readOnly
: Optional. Geben Sietrue
an, wenn alle Volume-Bereitstellungen schreibgeschützt sind.spec.containers[n].volumeMounts[m].readOnly
: Optional. Geben Sietrue
an, wenn nur eine bestimmte Volume-Bereitstellung schreibgeschützt ist.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.
Sitzungsspezifisches CSI-Speicher-Volume in einer Jobarbeitslast verwenden
Speichern Sie das folgende YAML-Manifest:
apiVersion: batch/v1 kind: Job metadata: name: gcs-fuse-csi-job-example namespace: NAMESPACE spec: template: metadata: annotations: gke-gcsfuse/volumes: "true" spec: serviceAccountName: KSA_NAME containers: - name: writer image: busybox command: - "/bin/sh" - "-c" - touch /data/test && echo $(date) >> /data/test && sleep 10 volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data - name: reader image: busybox command: - "/bin/sh" - "-c" - sleep 10 && cat /data/test volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data readOnly: true volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io volumeAttributes: bucketName: BUCKET_NAME restartPolicy: Never backoffLimit: 1
Ersetzen Sie dabei Folgendes:
NAMESPACE
: Namespace Ihrer Arbeitslast.KSA_NAME
: Der Name des Kubernetes-Dienstkontos wie im Schritt Zugriff auf Cloud Storage-Buckets mit GKE Workload Identity Federation for GKE konfigurieren.BUCKET_NAME
: Name Ihres Cloud Storage-Buckets.
Das Manifest stellt einen Job bereit, der einen Cloud Storage FUSE-Bucket über ein sitzungsspezifisches CSI-Volume nutzt.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.
Wenn Sie den CSI-Treiber in einer Job
-Arbeitslast verwenden oder wenn der Pod RestartPolicy
den Wert Never
hat, wird der Sidecar-Container automatisch beendet, nachdem alle anderen Arbeitslastcontainer beendet wurden.
Weitere Beispiele finden Sie in der GitHub-Projektdokumentation unter Beispielanwendungen.
Volume mit statischer Bereitstellung bereitstellen
Bei der statischen Bereitstellung erstellen Sie ein oder mehrere PersistentVolume-Objekte (PV-Objekte), die die Details des zugrunde liegenden Speichersystems enthalten. Pods in Ihren Clustern können dann den Speicher über PersistentVolumeClaims (PVCs) nutzen.
PersistentVolume erstellen
Speichern Sie das folgende YAML-Manifest:
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 volumeAttributes: gcsfuseLoggingSeverity: warning
Das Beispielmanifest zeigt, wie Sie ein PersistentVolume für Cloud Storage-Buckets definieren können. Das Beispiel enthält die folgenden Felder:
spec.csi.driver
: Verwenden Siegcsfuse.csi.storage.gke.io
als Namen für den CSI-Treiber.spec.csi.volumeHandle
: Geben Sie den Namen Ihres Cloud Storage-Buckets an. Sie können einen Unterstrich (_
) übergeben, um alle Buckets bereitzustellen, auf die das Kubernetes-Dienstkonto gemäß der Konfiguration Zugriff hat. Weitere Informationen finden Sie unter Dynamische Bereitstellung in der Dokumentation zu Cloud Storage FUSE.spec.mountOptions
: Optional. Übergeben Sie Optionen zur Bereitstellung an Cloud Storage FUSE.spec.csi.volumeAttributes
: Optional. Übergeben Sie Volume-Attribute an Cloud Storage FUSE.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.
PersistentVolumeClaim erstellen
Speichern Sie das folgende YAML-Manifest:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi volumeName: gcs-fuse-csi-pv storageClassName: example-storage-class
Das Beispielmanifest zeigt, wie Sie einen PersistentVolumeClaim zum Binden des PersistentVolume definieren können. Das Beispiel enthält die folgenden Felder:
metadata.namespace
: Geben Sie den PersistentVolumeClaim-Namespace an, der mit dem Namespace Ihrer Arbeitslast übereinstimmen muss.spec.volumeName
: Geben Sie den PersistentVolume-Namen an.
Befolgen Sie die folgenden Richtlinien, um ein PersistentVolume an einen PersistentVolumeClaim zu binden:
- Die
spec.storageClassName
-Felder in PV- und PVC-Manifesten sollten übereinstimmen. DerstorageClassName
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 PV- und PVC-Manifesten sollten übereinstimmen. spec.capacity.storage
für das PersistentVolume-Manifest sollte mitspec.resources.requests.storage
für das 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 FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.
Volume von einem PersistentVolumeClaim nutzen
Speichern Sie das folgende YAML-Manifest:
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
Das Beispiel zeigt, wie Sie einen Pod definieren, der einen Cloud Storage FUSE-Bucket über einen PersistentVolumeClaim nutzt. Das Beispiel enthält die folgenden Felder:
metadata.annotations
: Die Annotationgke-gcsfuse/volumes: "true"
ist erforderlich. Optionale Annotationen finden Sie unter Ressourcen für den Sidecar-Container konfigurieren.spec.serviceAccountName
: Verwenden Sie dasselbe Kubernetes-Dienstkonto wie im Schritt Zugriff auf Cloud Storage-Buckets mit der GKE Workload Identity Federation for GKE konfigurieren.spec.containers[n].volumeMounts[m].readOnly
: Optional. Geben Sietrue
an, wenn nur eine bestimmte Volume-Bereitstellung schreibgeschützt ist.spec.volumes[n].persistentVolumeClaim.readOnly
: Optional. Geben Sietrue
an, wenn alle Volume-Bereitstellungen schreibgeschützt sind.
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.
Weitere Beispiele finden Sie in der GitHub-Projektdokumentation unter Beispielanwendungen.
Volumes mit aktiviertem Datei-Caching nutzen
Das Datei-Caching-Feature ist in GKE standardmäßig deaktiviert.
Verwenden Sie das Volume-Attribut fileCacheCapacity
, um das Datei-Caching zu aktivieren und zu steuern.
GKE verwendet ein emptyDir
-Volume für das Caching von Cloud Storage FUSE-Dateien, das vom Bootlaufwerk der Knoten-VM unterstützt wird. Wenn Sie Lokale SSD auf dem Knoten aktivieren, verwendet GKE die lokale SSD zur Sicherung des Volumes emptyDir
.
Sie können ein benutzerdefiniertes Lese-Cache-Volume für den Sidecar-Container konfigurieren, um das Standard-Volume emptyDir
für das Datei-Caching in Lesevorgängen zu ersetzen.
Für CPU- und GPU-VM-Familien mit Unterstützung für lokale SSDs empfehlen wir die Verwendung von lokalem SSD-Speicher.
Für TPU-Familien oder Autopilot empfehlen wir die Verwendung von abgestimmtem nichtflüchtigen Speicher oder nichtflüchtigen SSD-Speicher.
Sitzungsspezifisches CSI-Speicher-Volume mit aktiviertem Datei-Caching verwenden
So stellen Sie einen Pod bereit, der einen Cloud Storage FUSE-Bucket über ein sitzungsspezifisches CSI-Volume mit Datei-Caching nutzt:
Erstellen Sie einen Cluster oder Knotenpool mit sitzungsspezifischem lokalen SSD-Speicher.
Folgen Sie der GKE-Dokumentation, um einen Cluster oder Knotenpool mit sitzungsspezifischem lokalem SSD-Speicher zu erstellen.
Speichern Sie das folgende YAML-Manifest:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-file-cache-example namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/ephemeral-storage-limit: "50Gi" spec: nodeSelector: cloud.google.com/gke-ephemeral-storage-local-ssd: "true" restartPolicy: Never initContainers: - name: data-loader image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi command: - "/bin/sh" - "-c" - | mkdir -p /test_files for i in $(seq 1 1000); do dd if=/dev/zero of=/test_files/file_$i.txt bs=1024 count=64; done gcloud storage cp /test_files gs://BUCKET_NAME --recursive containers: - name: data-validator image: busybox resources: limits: cpu: 500m memory: 512Mi requests: cpu: 500m memory: 512Mi command: - "/bin/sh" - "-c" - | echo "first read with cache miss" time cat /data/test_files/file_* > /dev/null echo "second read from local cache" time cat /data/test_files/file_* > /dev/null volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io volumeAttributes: bucketName: BUCKET_NAME mountOptions: "implicit-dirs" fileCacheCapacity: "10Gi"
Ersetzen Sie dabei Folgendes:
NAMESPACE
: Namespace Ihrer Arbeitslast.KSA_NAME
: Der Name des Kubernetes-Dienstkontos wie im Schritt Zugriff auf Cloud Storage-Buckets mit GKE Workload Identity Federation for GKE konfigurieren.BUCKET_NAME
: Name Ihres Cloud Storage-Buckets.
Der init-Container
data-loader
generiert 1.000 Dateien mit einer Größe von 64 KiB und lädt die Dateien in einen Cloud Storage-Bucket hoch. Der Hauptcontainerdata-validator
liest alle Dateien aus dem Bucket zweimal und protokolliert die Dauer.Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f FILE_PATH
Ersetzen Sie
FILE_PATH
durch den Pfad zur YAML-Datei.Führen Sie folgenden Befehl aus, um sich die Logausgabe anzeigen zu lassen:
kubectl logs -n NAMESPACE gcs-fuse-csi-file-cache-example -c data-validator
Ersetzen Sie
NAMESPACE
durch den Namespace Ihrer Arbeitslast.Die Ausgabe sieht in etwa so aus:
first read with cache miss real 0m 54.68s ... second read from local cache real 0m 0.38s ...
Die Ausgabe zeigt, dass der zweite Lesevorgang mit lokalem Cache viel schneller erfolgt als der erste Lesevorgang mit Cache-Fehler.
Leseleistung beim Lesen großer Dateien durch parallelen Download mit Cloud Storage FUSE verbessern
Mit dem parallelen Download von Cloud Storage FUSE können Sie das Lesen großer Dateien aus Cloud Storage für Downloads mit mehreren Threads beschleunigen. Der parallele Download mit Cloud Storage FUSE kann sich besonders bei Anwendungsfällen mit Lesevorgängen von mehr als 1 GB auszahlen.
Beispiele:
- Modellbereitstellung, bei der ein großer Prefetch-Zwischenspeicher erforderlich ist, um den Modelldownload beim Starten der Instanz zu beschleunigen.
- Prüfpunktwiederherstellungen, bei denen Sie einen Lesezugriffs-Datencache benötigen, um den einmaligen Zugriff auf mehrere große Dateien zu verbessern.
Verwenden Sie den parallelen Download für Anwendungen, die große Dateien mit einem einzelnen Thread lesen. Bei Anwendungen mit hoher Leseparallelität (mehr als acht Threads) kann es mit dieser Funktion zu einer geringeren Leistung kommen.
So verwenden Sie den parallelen Download mit dem Cloud Storage FUSE CSI-Treiber:
Aktivieren Sie den Dateicache. Erstellen Sie einen Cluster mit aktiviertem Datei-Caching, wie unter Sitzungsspezifisches CSI-Speicher-Volume mit aktiviertem Datei-Caching verwenden beschrieben.
Aktivieren Sie den parallelen Download. Konfigurieren Sie in Ihrem Manifest mithilfe von Bereitstellungsoptionen die folgenden zusätzlichen Einstellungen:
- Legen Sie dazu
file-cache:enable-parallel-downloads:true
fest. - Passen Sie
file-cache:parallel-downloads-per-file
,file-cache:max-parallel-downloads
undfile-cache:download-chunk-size-mb
nach Bedarf an.
- Legen Sie dazu
Optional: Passen Sie die Lautstärkeattribute an. Passen Sie bei Bedarf die folgenden Volume-Attribute an:
fileCacheForRangeRead
für zufällige oder teilweise Lesevorgänge.metadataTypeCacheCapacity
undmetadataStatCacheCapacity
für Trainingsarbeitslasten.
Klicken Sie auf einen der folgenden Tabs, um zu erfahren, wie Sie den parallelen Download aktivieren können, je nachdem, ob Sie sitzungsspezifische Speichervolumes oder die statische Bereitstellung verwenden:
Sitzungsspezifischer Speicher
apiVersion: v1
kind: Pod
metadata:
name: gcs-fuse-csi-example-ephemeral
namespace: NAMESPACE
annotations:
gke-gcsfuse/volumes: "true"
spec:
containers:
...
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: BUCKET_NAME
mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:parallel-downloads-per-file:4,file-cache:max-parallel-downloads:-1,file-cache:download-chunk-size-mb:3"
fileCacheCapacity: "-1"
Statische Bereitstellung
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:parallel-downloads-per-file:4
- file-cache:max-parallel-downloads:-1
- file-cache:download-chunk-size-mb:3
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: BUCKET_NAME
volumeAttributes:
fileCacheCapacity: "-1"
Bereitstellung von Cloud Storage FUSE-Buckets konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie die Cloud Storage FUSE-Volumes konfigurieren können.
Bereitstellungsoptionen
Der Cloud Storage FUSE CSI-Treiber unterstützt Bereitstellungs-Flags, um zu konfigurieren, wie Cloud Storage-Buckets in Ihrem lokalen Dateisystem bereitgestellt werden. Eine vollständige Liste der unterstützten Bereitstellungs-Flags finden Sie in der Dokumentation zur gcsfuse-Befehlszeile.
Sie können die Bereitstellungs-Flags so angeben:
- Im Feld
spec.mountOptions
für einPersistentVolume
-Manifest, wenn Sie die statische Bereitstellung verwenden. - Im Feld
spec.volumes[n].csi.volumeAttributes.mountOptions
, wenn Sie sitzungsspezifische CSI-Volumes verwenden.
Volume-Attribute
Mit dem Cloud Storage FUSE CSI-Treiber können Sie die Cloud Storage FUSE-Konfigurationsdatei nicht direkt angeben. Sie können einige Felder in der Konfigurationsdatei mit den folgenden Volume-Attributen konfigurieren. Die Werte werden in die Felder der Konfigurationsdatei übersetzt.
gcsfuseLoggingSeverity
Beschreibung: der Schweregrad der Logs, die Cloud Storage FUSE generieren soll, ausgedrückt als Enum. Wenn Sie bereits die Bereitstellungsoptionen
debug_fuse
,debug_fs
oderdebug_gcs
verwenden, wird diese neue Konfiguration automatisch auftrace
gesetzt. Dieses Volume-Attribut wird in das Feldlogging:severity
der Konfigurationsdatei übersetzt.Gültige Werte (sortiert vom niedrigsten zum höchsten Schweregrad):
trace
debug
info
warning
error
Standardwert:
info
.
fileCacheCapacity
Beschreibung: Die maximale Größe, die der Dateicache verwenden darf. Wenn ein Wert ungleich null vorhanden ist, aktiviert dieses Volume-Attribut das Datei-Caching in Cloud Storage FUSE. Dieses Volume-Attribut wird in das Feld
file-cache:max-size-mb
der Konfigurationsdatei übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,10Gi
. - "-1": verwendet die gesamte verfügbare Kapazität des Cache-Volumes.
- "0": Der Datei-Cache ist deaktiviert.
- Mengenwerte, z. B.
Standardwert: "0"
fileCacheForRangeRead
Beschreibung: Gibt an, ob das vollständige Objekt asynchron heruntergeladen und im Cache-Verzeichnis von Cloud Storage FUSE gespeichert werden soll, wenn der erste Lesevorgang aus einem Offset ungleich null erfolgt. Dies sollte auf "wahr" gesetzt sein, wenn Sie mehrere zufällige oder partielle Lesevorgänge ausführen möchten. Dieses Volume-Attribut wird in das Feld
file-cache:cache-file-for-range-read
der Konfigurationsdatei übersetzt.Zulässige Werte:
- Boolesche Werte im Stringformat: "true", "false".
Standardwert: "false".
metadataStatCacheCapacity
Beschreibung: Die maximale Größe, die der Statistik-Cache verwenden darf. Der Statistik-Cache befindet sich immer vollständig im Arbeitsspeicher. Wenn Sie die Bereitstellungsoption
stat-cache-capacity
bereits verwenden, wird der Wert weiterhin berücksichtigt und entsprechend in diese neue Konfiguration übersetzt. Dieses Volume-Attribut wird in das Feldmetadata-cache:stat-cache-max-size-mb
der Konfigurationsdatei übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,1Gi
. - „-1“: Damit der Statistik-Cache so viel Arbeitsspeicher wie nötig verwendet.
- „0“: Der Statistik-Cache ist deaktiviert.
- Verwenden Sie den Standardwert
32Mi
,wenn Ihre Arbeitslast bis zu 20.000 Dateien umfasst. Wenn Ihre Arbeitslast mehr als 20.000 Dateien enthält, erhöhen Sie die Größe um Werte von 10 MiB pro weitere 6.000 Dateien, also durchschnittlich etwa 1.500 Byte pro Datei.
- Mengenwerte, z. B.
Standardwert:
32Mi
.
metadataTypeCacheCapacity
Beschreibung: Die maximale Größe pro Verzeichnis, die der Typ-Cache verwenden kann. Der Typcache wird immer vollständig im Arbeitsspeicher abgelegt. Dieses Volume-Attribut wird in das Feld
metadata-cache:type-cache-max-size-mb
der Konfigurationsdatei übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,1Gi
. - "-1": damit der Typ-Cache so viel Speicher wie nötig verwenden kann.
- "0": Der Typ-Cache ist deaktiviert.
- Verwenden Sie den Standardwert
4Mi
,wenn die maximale Anzahl von Dateien in einem einzelnen Verzeichnis aus dem bereitgestellten Bucket maximal 20.000 Dateien umfasst. Wenn die maximale Anzahl von Dateien in einem einzelnen Verzeichnis,das Sie bereitstellen, mehr als 20.000 Dateien enthält,erhöhen Sie die Größe um 1 MiB pro 5.000 Dateien, durchschnittlich ca. 200 Byte pro Datei.
- Mengenwerte, z. B.
Standardwert:
4Mi
.
metadataCacheTTLSeconds
Beschreibung: Die Gültigkeitsdauer (TTL) der im Cache gespeicherten Metadateneinträge in Sekunden. Wenn Sie bereits die Bereitstellungsoptionen
stat-cache-ttl
odertype-cache-ttl
verwenden, werden die Werte weiterhin berücksichtigt und entsprechend in diese neue Konfiguration übersetzt. Dieses Volume-Attribut wird in das Feldmetadata-cache:ttl-secs
der Konfigurationsdatei übersetzt.Zulässige Werte:
- Ganzzahlwerte im Stringformat, z. B. „600“.
- "-1": Ein TTL-Ablauf wird umgangen und die Datei wird aus dem Cache bereitgestellt, wann immer sie verfügbar ist.
- "0": Die aktuelle Datei wird gelesen. Bei Verwendung des Werts
0
wird einGet
-Metadatenaufruf ausgegeben, um sicherzustellen, dass die Objektgenerierung für die Datei im Cache mit dem übereinstimmt, was in Cloud Storage gespeichert ist.
Standardwert: "60"
Sie können die Volume-Attribute so angeben:
- Im Feld
spec.csi.volumeAttributes
für einPersistentVolume
-Manifest, wenn Sie die statische Bereitstellung verwenden. - Im Feld
spec.volumes[n].csi.volumeAttributes
, wenn Sie sitzungsspezifische CSI-Volumes verwenden.
Hinweise
Beachten Sie beim Konfigurieren von Bereitstellungen die folgenden Hinweise:
- Die folgenden Flags sind nicht zulässig:
app-name
,temp-dir
,foreground
,log-file
,log-format
,key-file
,token-url
undreuse-token-from-url
. - Cloud Storage FUSE macht die impliziten Verzeichnisse nicht standardmäßig sichtbar. Wenn Sie diese Verzeichnisse sichtbar machen möchten, können Sie das Bereitstellungs-Flag
implicit-dirs
aktivieren. Weitere Informationen finden Sie in der GitHub-Dokumentation zu Cloud Storage FUSE unter Dateien und Verzeichnisse. - Wenn Sie einen Sicherheitskontext für Ihren Pod oder Container verwenden oder wenn Ihr Container-Image einen Nicht-Root-Nutzer oder eine Gruppe verwendet, müssen Sie die Bereitstellungs-Flags
uid
undgid
festlegen. Außerdem müssen Sie die Bereitstellungs-Flagsfile-mode
unddir-mode
verwenden, um die Dateisystemberechtigungen festzulegen. Beachten Sie, dass Sie die Befehlechmod
,chown
oderchgrp
nicht für ein Cloud Storage FUSE-Dateisystem ausführen können. Daher sind die Bereitstellungs-Flagsuid
,gid
,file-mode
unddir-mode
erforderlich, um Zugriff für einen Nutzer oder eine Gruppe von Root-Nutzern zu gewähren. - Wenn Sie nur ein Verzeichnis im Bucket und nicht den gesamten Bucket bereitstellen möchten, übergeben Sie das Verzeichnis mit dem relativen Pfad mit dem Flag
only-dir=relative/path/to/the/bucket/root
. - Konfigurieren Sie Volume-Attribute, um das Caching-Verhalten von Cloud Storage FUSE zu optimieren. Weitere Informationen finden Sie in der Dokumentation zum Caching von Cloud Storage FUSE.
- Wenn Sie eine maximale Anzahl an TCP-Verbindungen pro Server angeben möchten, können Sie dies mit dem
max-conns-per-host
-Flag tun. Die von Ihnen festgelegte maximale Anzahl an TCP-Verbindungen wird wirksam, wenn--client-protocol
aufhttp1
festgelegt ist. Der Standardwert ist 0, was bedeutet, dass es kein Limit für TCP-Verbindungen gibt (die durch die Maschinenspezifikationen begrenzt sind). - Wenn Sie die Linux-Kernel-Bereitstellungsoptionen konfigurieren müssen, können Sie die Optionen über das Flag
o
übergeben. Wenn Sie beispielsweise keine direkte Ausführung von Binärdateien im bereitgestellten Dateisystem zulassen möchten, legen Sie das Flago=noexec
fest. Für jede Option ist ein separates Flag erforderlich, z. B.o=noexec,o=noatime
. Nur die folgenden Optionen sind zulässig:exec
,noexec
,atime
,noatime
,sync
,async
unddirsync
. - Wenn Sie Probleme mit Cloud Storage FUSE beheben müssen, legen Sie die Flags
debug_fuse
,debug_fs
unddebug_gcs
fest. Wenn eine der drei Optionen angegeben ist, wird das Volume-AttributgcsfuseLoggingSeverity
automatisch auftrace
gesetzt. - Mit dem Cloud Storage FUSE CSI-Treiber können Sie das Feld
cache-dir
in der Cloud Storage FUSE-Konfigurationsdatei nicht ändern. Verwenden Sie das Volume-AttributfileCacheCapacity
, um das Datei-Caching zu aktivieren oder zu deaktivieren. Um das Standard-VolumeemptyDir
für das Datei-Caching zu ersetzen, können Sie ein benutzerdefiniertes Cache-Volume für den Sidecar-Container konfigurieren.
CSI-Treiber für Cloud Storage FUSE deaktivieren
Sie können den Cloud Storage FUSE CSI-Treiber nicht für Autopilot-Cluster deaktivieren.
Sie können den CSI-Treiber für Cloud Storage FUSE mit dem Google Cloud CLI auf einem vorhandenen Standardcluster deaktivieren.
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=DISABLED
Ersetzen Sie CLUSTER_NAME
durch den Namen Ihres Clusters.
Fehlerbehebung
Informationen zur Behebung von Problemen bei der Verwendung des CSI-Treibers für Cloud Storage FUSE finden Sie in der Anleitung zur Fehlerbehebung in der Dokumentation zum GitHub-Projekt.