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 Dateilesevorgänge wiederholt werden können, um sie schneller von einem Cache-Speicher Ihrer Wahl bereitzustellen. Je nach Ihren Preis-Leistungs-Anforderungen können Sie aus einer Reihe von Speicheroptionen für den Lesecache auswählen, darunter lokale SSDs und nichtflüchtiger 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 Dateicache aktiviert sind, können Sie mit der Funktion paralleler Download das Lesen großer Dateien aus Cloud Storage für Downloads mit mehreren Threads beschleunigen. Mit dieser Funktion können Sie die Modellladezeiten verbessern, insbesondere bei Lesevorgängen 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.
- Sie können Messwertstatistiken für Cloud Storage FUSE aufrufen, darunter die Nutzung des Dateisystems, von Cloud Storage und des Dateicaches.
Hinweise
Führen Sie die folgenden Aufgaben aus, 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.
- Wenn Sie die Cloud Storage FUSE-Messwerte aufrufen möchten, muss in Ihrem Cluster die GKE-Version 1.31.1-gke.1621000 oder höher ausgeführt werden. Diese Messwerte sind standardmäßig aktiviert.
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 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
default
-Kubernetes-Dienstkontos.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. Informationen zum Ermitteln der 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. Informationen zum Ermitteln der 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. Die Ressourcenlimits sind nicht festgelegt (für Standardcluster):
- 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 Autopilot 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 von Cloud Storage FUSE.
- Wenn Ihre Arbeitslasten eine große Anzahl von Dateien verarbeiten müssen und der Metadaten-Cache 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.
- Für das Datei-Caching 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 Volumeattribute.
- 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-/Schreibsemantik in der GitHub-Dokumentation zu Cloud Storage FUSE.
- Mit dem Wert
"0"
können Sie alle Ressourcenlimits oder ‑anfragen für Standardcluster aufheben. Die Annotationgke-gcsfuse/memory-limit: "0"
lässt beispielsweise das Arbeits-Speicherlimit des Sidecar-Containers bei der Standardarbeitsspeicheranforderung leer. Das ist nützlich, wenn Sie sich nicht sicher sind, wie viele Ressourcen Cloud Storage FUSE für Ihre Arbeitslasten benötigt, und Cloud Storage FUSE alle verfügbaren Ressourcen auf einem Knoten nutzen lassen möchten. 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 vorkommen, wenn Sie aus Sicherheitsgründen private Knoten verwenden müssen. 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 die Einschleusung des Sidecar-Containers 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 Containerregistrierung.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-emptyDir
-Volume für Cloud Storage FUSE ersetzen müssen, um die Dateien bei Schreibvorgängen zu stapeln.
Sie können jeden von GKE unterstützten Speichertyp angeben, z. B. PersistentVolumeClaim
. GKE verwendet dann das angegebene Volume für die Zwischenspeicherung von Schreibvorgängen.
Das ist nützlich, wenn Sie Dateien mit mehr als 10 GiB in Autopilot-Clustern schreiben müssen.
Wenn Sie das benutzerdefinierte Zwischenspeicher-Volume verwenden möchten, müssen Sie fsGroup
ungleich null angeben.
Im folgenden Beispiel wird gezeigt, wie Sie ein vordefiniertes PVC als Puffervolumen 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 in Cloud Storage FUSE konfigurieren.
Dieses Szenario kann zutreffen, wenn Sie das Standard-emptyDir
-Volume für Cloud Storage FUSE ersetzen müssen, um die Dateien bei Lesevorgängen im Cache zu speichern.
Sie können jeden von GKE unterstützten Speichertyp angeben, z. B. PersistentVolumeClaim
. GKE verwendet dann das angegebene Volume für das Datei-Caching.
Das ist nützlich, wenn Sie Dateien mit einer Größe von mehr als 10 GiB in Autopilot-Clustern im Cache speichern möchten.
Wenn Sie das benutzerdefinierte Cache-Volume verwenden möchten, müssen Sie fsGroup
ungleich null angeben.
Im folgenden Beispiel wird gezeigt, wie Sie ein vordefiniertes PVC als Cache-Volumen 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 Volumeattribute 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 claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
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 Volumeattribute 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 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.
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
Die Datei-Caching-Funktion 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 Cloud Storage FUSE-Datei-Caching, das vom Bootlaufwerk der VM des Knotens unterstützt wird. Wenn Sie Local SSD auf dem Knoten aktivieren, verwendet GKE die lokale SSD, um das emptyDir
-Volume zu unterstützen.
Sie können ein benutzerdefiniertes Lese-Cache-Volume für den Sidecar-Container konfigurieren, um das Standard-emptyDir
-Volume für das Datei-Caching bei 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 lokalen 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 sie 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 mit parallelem Cloud Storage FUSE-Download 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.
- Wiederherstellung von Checkpoints, bei der 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 nur einem 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"
claimRef:
name: gcs-fuse-csi-static-pvc
namespace: NAMESPACE
Bereitstellung von Cloud Storage FUSE-Buckets konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie die Cloud Storage FUSE-Volumes konfigurieren.
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 der Felder in der Konfigurationsdatei mithilfe der folgenden Volume-Attribute konfigurieren. Die Werte werden in die Felder der Konfigurationsdatei übertragen.
gcsfuseLoggingSeverity
Beschreibung: der Schweregrad der Logs, die Cloud Storage FUSE generieren soll, ausgedrückt als Enum. Dieses Volume-Attribut wird in das Konfigurationsdateifeld
logging:severity
übersetzt.Zulässige Werte (in absteigender Reihenfolge der Schwere):
trace
debug
info
warning
error
Standardwert:
info
.
fileCacheCapacity
Beschreibung: Die maximale Größe, die der Dateicache verwenden kann. Wenn ein Wert ungleich 0 angegeben ist, wird mit diesem Volume-Attribut das Datei-Caching in Cloud Storage FUSE aktiviert. Dieses Volume-Attribut wird in das Konfigurationsdateifeld
file-cache:max-size-mb
übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,10Gi
. - „-1“: Die gesamte verfügbare Kapazität des Cache-Volumes wird verwendet.
- „0“: Der Datei-Cache ist deaktiviert.
- Mengenwerte, z. B.
Standardwert: "0"
fileCacheForRangeRead
Beschreibung: Gibt an, ob das vollständige Objekt asynchron heruntergeladen und im Cloud Storage FUSE-Cacheverzeichnis gespeichert werden soll, wenn die erste Leseoperation von einem nicht nullwertigen Offset aus erfolgt. Diese Option sollte auf „true“ gesetzt werden, wenn Sie mehrere zufällige oder teilweise Lesevorgänge ausführen möchten. Dieses Volume-Attribut wird in das Konfigurationsdateifeld
file-cache:cache-file-for-range-read
übersetzt.Zulässige Werte:
- Boolesche Werte im Stringformat: „wahr“ oder „falsch“.
Standardwert: „false“.
metadataStatCacheCapacity
Beschreibung: Die maximale Größe, die der Statistik-Cache verwenden kann. Der Statistik-Cache wird immer vollständig im Arbeitsspeicher aufbewahrt. Wenn Sie die
stat-cache-capacity
-Montageoption bereits verwenden, wird der Wert weiterhin berücksichtigt und in die neue Konfiguration übernommen. Dieses Volume-Attribut wird in das Konfigurationsdateifeldmetadata-cache:stat-cache-max-size-mb
übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,1Gi
. - „-1“: Der Statistik-Cache kann so viel Arbeitsspeicher wie nötig verwenden.
- „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 Typcache verwenden kann. Der Typ-Cache wird immer vollständig im Arbeitsspeicher gehalten. Dieses Volume-Attribut wird in das Konfigurationsdateifeld
metadata-cache:type-cache-max-size-mb
übersetzt.Zulässige Werte:
- Mengenwerte, z. B.
500Mi
,1Gi
. - „-1“: Der Typ-Cache kann so viel Arbeitsspeicher wie erforderlich nutzen.
- „0“: Der Typ-Cache ist deaktiviert.
- Verwenden Sie den Standardwert
4Mi
,wenn die maximale Anzahl von Dateien in einem einzelnen Verzeichnis des bereitgestellten Buckets 20.000 Dateien oder weniger beträgt. 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) in Sekunden der im Cache gespeicherten Metadateneinträge. Wenn Sie bereits die Bereitstellungsoptionen
stat-cache-ttl
odertype-cache-ttl
verwenden, werden die Werte weiterhin berücksichtigt und in die neue Konfiguration übernommen. Dieses Volume-Attribut wird in das Konfigurationsdateifeldmetadata-cache:ttl-secs
ü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. Wenn du den Wert
0
verwendest, wird einGet
-Metadatenaufruf ausgeführt, um sicherzustellen, dass die Objektgenerierung für die Datei im Cache mit den in Cloud Storage gespeicherten Daten übereinstimmt.
Standardwert: "60"
Sie können die Volume-Attribute auf folgende Weise 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
. - Wenn Sie das Caching-Verhalten von Cloud Storage FUSE optimieren möchten, konfigurieren Sie die Volumeattribute. 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 das Flag
log-severity
aufTRACE
fest. Das LautstärkeattributgcsfuseLoggingSeverity
wird dann 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. Wenn Sie das Standard-emptyDir
-Volume für das Datei-Caching ersetzen möchten, können Sie ein benutzerdefiniertes Cache-Volume für den Sidecar-Container konfigurieren.
Cloud Storage FUSE-Messwerte
Die folgenden Cloud Storage FUSE-Messwerte sind jetzt über die GKE Monitoring API verfügbar. Details zu Cloud Storage FUSE-Messwerten wie Labels, Typ und Einheit finden Sie unter GKE-Systemmesswerte. Diese Messwerte sind für jeden Pod verfügbar, der Cloud Storage FUSE verwendet. Sie können Statistiken pro Volume und Bucket konfigurieren.
Dateisystemmesswerte
Mit Dateisystemmesswerten werden die Leistung und der Zustand Ihres Dateisystems erfasst, einschließlich der Anzahl der Vorgänge, Fehler und der Ausführungsgeschwindigkeit. Diese Messwerte können Ihnen helfen, Engpässe zu identifizieren und die Leistung zu optimieren.
gcsfusecsi/fs_ops_count
gcsfusecsi/fs_ops_error_count
gcsfusecsi/fs_ops_latency
Cloud Storage-Messwerte
Sie können Cloud Storage-Messwerte wie Datenvolumen, Geschwindigkeit und Anfrageaktivität überwachen, um zu sehen, wie Ihre Anwendungen mit Cloud Storage-Buckets interagieren. Anhand dieser Daten können Sie Bereiche für Optimierungen ermitteln, z. B. die Lesemuster verbessern oder die Anzahl der Anfragen reduzieren.
gcsfusecsi/gcs_download_bytes_count
gcsfusecsi/gcs_read_count
gcsfusecsi/gcs_read_bytes_count
gcsfusecsi/gcs_reader_count
gcsfusecsi/gcs_request_count
gcsfusecsi/gcs_request_latencies
Dateicache-Messwerte
Sie können Datei-Cache-Messwerte wie das Datenlesevolumen, die Geschwindigkeit und die Cache-Trefferquote überwachen, um Cloud Storage FUSE und die Anwendungsleistung zu optimieren. Analysieren Sie diese Messwerte, um Ihre Caching-Strategie zu verbessern und Cache-Treffer zu maximieren.
gcsfusecsi/file_cache_read_bytes_count
gcsfusecsi/file_cache_read_latencies
gcsfusecsi/file_cache_read_count
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.