In dieser Anleitung wird beschrieben, wie Sie Ressourcen für den Sidecar-Container des Cloud Storage FUSE CSI-Treibers konfigurieren, einschließlich der Einrichtung eines privaten Images, eines benutzerdefinierten Schreibpuffers und eines benutzerdefinierten Lesecache-Volumes. In der Regel müssen Sie diese Einstellungen nicht ändern.
Der Cloud Storage FUSE-CSI-Treiber verwendet einen anpassbaren Sidecar-Container, um Cloud Storage-Buckets effizient bereitzustellen und darauf zuzugreifen. Durch die Konfiguration des Sidecars können Sie die Anwendungsleistung und die Ressourcennutzung optimieren. Dies kann zu einem schnelleren Datenzugriff, kürzeren Verarbeitungszeiten und einem potenziell geringeren Gesamtresourcenverbrauch für Ihre Anwendung führen.
Diese Anleitung richtet sich an Entwickler, Administratoren und Architekten, die die Leistung, Sicherheit und Effizienz ihrer Anwendungen optimieren möchten, die mit GKE interagieren.
Bevor Sie diese Seite lesen, sollten Sie mit den Grundlagen von Cloud Storage, Kubernetes und Containerisierung vertraut sein.
Funktionsweise des Sidecar-Containers
Der Cloud Storage FUSE CSI-Treiber verwendet einen Sidecar-Container, um Cloud Storage-Buckets bereitzustellen, damit sie für Kubernetes-Anwendungen als lokale Dateisysteme zugänglich sind. Dieser Sidecar-Container namens gke-gcsfuse-sidecar
wird zusammen mit dem Arbeitslastcontainer im selben Pod ausgeführt. Wenn der Treiber die Annotation gke-gcsfuse/volumes: "true"
in einer Pod-Spezifikation erkennt, wird der Sidecar-Container automatisch eingefügt. Dieser Sidecar-Container-Ansatz trägt dazu bei, die Sicherheit zu gewährleisten und Ressourcen effektiv zu verwalten.
Der Sidecar-Container übernimmt die Komplexität der Bereitstellung der Cloud Storage-Buckets und bietet Dateisystemzugriff auf die Anwendungen, ohne dass Sie die Cloud Storage FUSE-Laufzeit direkt verwalten müssen. Sie können Ressourcenlimits für den Sidecar-Container mit Annotationen wie gke-gcsfuse/cpu-limit
und gke-gcsfuse/memory-limit
konfigurieren. Das Sidecar-Container-Modell sorgt auch dafür, dass die Cloud Storage FUSE-Instanz an den Lebenszyklus der Arbeitslast gebunden ist, sodass sie nicht unnötig Ressourcen verbraucht. Das bedeutet, dass der Sidecar-Container automatisch beendet wird, wenn die Arbeitslastcontainer beendet werden, insbesondere bei Job-Arbeitslasten oder Pods mit einem RestartPolicy
von Never
.
Istio-Kompatibilität
Der Sidecar-Container des Cloud Storage FUSE CSI-Treibers und Istio können gleichzeitig in Ihrem Pod ausgeführt werden. Der Sidecar-Proxy von Istio verwaltet den Netzwerkverkehr, während der CSI-Sidecar den Speicherzugriff optimiert. So können Ihre Anwendungen effizient mit Google Cloud Storage interagieren und profitieren von einer besseren Leistung und Beobachtbarkeit.
Benutzerdefinierten Schreib-Zwischenspeicher konfigurieren
Cloud Storage FUSE stellt Schreibvorgänge in einem lokalen Verzeichnis bereit und lädt sie dann bei close
- oder fsync
-Vorgängen in Cloud Storage hoch.
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 Standardvolume emptyDir
für Cloud Storage FUSE ersetzen müssen, um die Dateien in Schreibvorgängen zu stagen. Das ist nützlich, wenn Sie Dateien mit mehr als 10 GiB in Autopilot-Clustern schreiben müssen.
Sie können jeden vom Cloud Storage FUSE CSI-Treiber unterstützten Speichertyp für das Datei-Caching angeben, z. B. eine lokale SSD, einen auf Persistent Disk basierenden Speicher und eine RAM-Disk (Arbeitsspeicher). GKE verwendet das angegebene Volume für die Zwischenspeicherung von Dateischreibvorgängen. Weitere Informationen zu diesen Optionen finden Sie unter Speicher für das Sichern Ihres Dateicache auswählen.
Wenn Sie das benutzerdefinierte Zwischenspeicher-Volume verwenden möchten, müssen Sie fsGroup
ungleich null angeben.
Im folgenden Beispiel wird gezeigt, wie Sie einen vordefinierten PersistentVolumeClaim als Puffervolume 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 Folgendes:
- FS_GROUP: die fsGroup-ID.
- BUFFER_VOLUME_PVC ist der Name des vordefinierten PVC.
Benutzerdefiniertes Lese-Cache-Volume 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 Standardvolume emptyDir
für Cloud Storage FUSE ersetzen müssen, um die Dateien bei Lesevorgängen zu cachen. Sie können jeden von GKE unterstützten Speichertyp angeben, z. B. einen PersistentVolumeClaim. GKE verwendet das angegebene Volume für das Dateicaching. Dies ist nützlich, wenn Sie Dateien mit einer Größe von 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.
Im folgenden Beispiel wird gezeigt, wie Sie einen vordefinierten PersistentVolumeClaim 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 Folgendes:
FS_GROUP
: diefsGroup
-ID.CACHE_VOLUME_PVC
ist der Name des vordefinierten PersistentVolumeClaim.
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 aus Sicherheitsgründen private Knoten verwenden müssen.
So konfigurieren und verwenden Sie das private Sidecar-Container-Image:
- In dieser GKE-Kompatibilitätstabelle 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 Feld „image“ enthält. GKE verwendet das angegebene Sidecar-Container-Image, um die Injektion 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 Container-Registry.PRIVATE_IMAGE_TAG
: durch Ihr privates Sidecar-Container-Image-Tag.
Ressourcen für Sidecar-Container konfigurieren
Standardmäßig ist der gke-gcsfuse-sidecar
-Container mit den folgenden Ressourcenanfragen und ‑limits für Standard- und Autopilot-Cluster konfiguriert:
Anfragen:
- 250 mCPU
- 256 MiB Arbeitsspeicher
- Sitzungsspezifischer 5 GiB-Speicher
Grenzwerte (GKE-Version 1.29.1-gke.1670000
und höher):
- Unbegrenzte CPU
- Unbegrenzter Speicher
- Unbegrenzter flüchtiger Speicher
Limits (vor GKE-Version 1.29.1-gke.1670000
):
- 250 mCPU
- 256 MiB Arbeitsspeicher
- Sitzungsspezifischer 5 GiB-Speicher
Standardmäßig ist der gke-gcsfuse-metadata-prefetch
-Container mit den folgenden Ressourcenanfragen und ‑limits für Standard- und Autopilot-Cluster konfiguriert:
Anfragen:
- 10 mCPU
- 10 MiB Arbeitsspeicher
- 10 MiB sitzungsspezifischer Speicher
Beschränkungen:
- 50 mCPU
- 250 MiB Arbeitsspeicher
- Unbegrenzter flüchtiger Speicher
In Standard- und Autopilot-Clustern können Sie die Standardwerte überschreiben. Wie GKE Containerressourcen verarbeitet, hängt vom Betriebsmodus des Clusters ab:
- Standardcluster: Wenn eine der Anfragen oder Limits festgelegt und die andere nicht festgelegt ist, werden die Ressourcenlimits und -anfragen der Pods auf denselben Wert gesetzt. Wenn sowohl Anforderungen als auch Limits festgelegt sind, verwenden Pods die von Ihnen angegebenen genauen Ressourcenanforderungen und ‑limits. Wenn Sie keine Werte festlegen, werden die oben beschriebenen Standardressourcen direkt angewendet.
- Autopilot-Cluster: Wenn eine der Anfragen oder Limits festgelegt und die andere nicht festgelegt ist, werden die Ressourcenlimits und -anfragen der Pods auf denselben Wert gesetzt. Unter Ressourcenlimits in Autopilot festlegen erfahren Sie, wie sich Ressourcenüberschreibungen und die festgelegten Standardressourcenwerte auf das Pod-Verhalten auswirken.
Wenn Sie die Standardwerte für den gke-gcsfuse-sidecar
-Container ü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:
Wenn Sie die Standardwerte für den gke-gcsfuse-metadata-prefetch
-Container (ab GKE-Version 1.32.3-gke.1717000
) überschreiben möchten, können Sie optional die Annotation gke-gcsfuse/[metadata-prefetch-cpu-limit|metadata-prefetch-memory-limit|metadata-prefetch-ephemeral-storage-limit|metadata-prefetch-cpu-request|metadata-prefetch-memory-request|metadata-prefetch-ephemeral-storage-request]
angeben, wie im folgenden Beispiel gezeigt:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
# gke-gcsfuse-sidecar overrides
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
# gke-gcsfuse-metadata-prefetch overrides
gke-gcsfuse/metadata-prefetch-cpu-limit: "10"
gke-gcsfuse/metadata-prefetch-memory-limit: 10Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-limit: 1Ti
gke-gcsfuse/metadata-prefetch-cpu-request: 500m
gke-gcsfuse/metadata-prefetch-memory-request: 1Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-request: 50Gi
Mit dem Wert "0"
können Sie alle Ressourcenlimits oder -anforderungen aufheben. Beachten Sie jedoch, dass für den gke-gcsfuse-sidecar
-Container bereits alle Limits (cpu-limit
, memory-limit
und ephemeral-storage-limit
) aufgehoben sind und für den gke-gcsfuse-metadata-prefetch
-Container bereits ephemeral-storage-limit
aufgehoben ist. Das Festlegen dieser Limits auf "0"
in einem Cluster mit GKE-Version 1.32.3-gke.1717000
oder höher hätte also keine Auswirkungen.
Wenn Sie beispielsweise gke-gcsfuse/metadata-prefetch-memory-limit: "0"
festlegen, wird das Speicherlimit des Containers gke-gcsfuse-metadata-prefetch
nicht festgelegt.
Das ist nützlich, wenn Sie sich nicht sicher sind, wie viele Ressourcen die Funktion zum Vorabrufen von Metadaten für Ihre Arbeitslasten benötigt, und möchten, dass das Vorabrufen von Metadaten alle verfügbaren Ressourcen auf einem Knoten verbraucht.
Logging-Ausführlichkeit konfigurieren
Standardmäßig werden im gke-gcsfuse-sidecar
-Container Logs auf den Ebenen info
und error
generiert.
Für die Fehlerbehebung oder eine detailliertere Analyse müssen Sie jedoch möglicherweise die Ausführlichkeit der Protokollierung anpassen. In diesem Abschnitt wird beschrieben, wie Sie den Logging-Level erhöhen oder verringern.
Sie können entweder Bereitstellungsoptionen verwenden, um die Ausführlichkeit des Loggings zu konfigurieren, oder die Möglichkeit des CSI-Treibers nutzen, Volumenattributwerte in die erforderlichen gcsfuse-Konfigurationseinstellungen zu übersetzen.
Fügen Sie in das Manifest des Ziel-Pods die folgenden Konfigurationen ein:
volumeAttributes:
bucketName: BUCKET_NAME
mountOptions: "implicit-dirs"
gcsfuseLoggingSeverity: LOGGING_SEVERITY
Wenn Sie die Bereitstellungsoptionen verwenden möchten, fügen Sie dem Ziel-Pod-Manifest die folgende Konfiguration hinzu:
mountOptions: "logging:severity:LOGGING_SEVERITY"
Ersetzen Sie Folgendes:
BUCKET_NAME
: Name Ihres Cloud Storage-Buckets.LOGGING_SEVERITY
: einer der folgenden Werte, je nach Ihren Anforderungen:trace
debug
info
warning
error
Nachdem der Pod bereitgestellt wurde, initiiert der CSI-Treiber gcsfuse mit der neu konfigurierten Logging-Ebene.
Mit dem folgenden Filter können Sie prüfen, ob der Schweregrad der Protokollierung angewendet wird:
resource.labels.container_name="gke-gcsfuse-sidecar"
resource.type="k8s_container"
resource.labels.pod_name="POD_NAME"
"severity:"
Nächste Schritte
- Informationen zum Optimieren der Leistung des CSI-Treibers für Cloud Storage FUSE
- Weitere Beispiele für die Verwendung des CSI-Treibers auf GitHub
- Weitere Informationen zu Cloud Storage FUSE