Mit dem CSI-Treiber für Cloud Storage FUSE können Ihre GKE-Arbeitslasten auf Cloud Storage-Buckets als lokales Dateisystem zugreifen. Der CSI-Treiber integriert Cloud Storage in GKE und vereinfacht die Interaktion Ihrer containerisierten Anwendungen mit großen Datensätzen, die in Buckets gespeichert sind. Der CSI-Treiber bietet eine Standardschnittstelle für den GKE-Speicher. In diesem Dokument bereiten Sie Ihre Umgebung vor und verbinden Ihre GKE-Cluster mit Cloud Storage-Buckets, indem Sie den CSI-Treiber für Cloud Storage FUSE verwenden.
Dieses Dokument richtet sich an Entwickler, Administratoren und Speicherexperten, die GKE-Arbeitslasten in den Objektspeicher integrieren. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Cloud Storage-Bucket erstellen
Erstellen Sie Ihre Cloud Storage-Buckets, falls noch nicht geschehen. Sie stellen diese Buckets als Volumes in Ihrem GKE-Cluster bereit. Zur Verbesserung der Leistung setzen Sie den Standorttyp auf Region und wählen eine Region aus, die Ihrem GKE-Cluster entspricht.
CSI-Treiber für Cloud Storage FUSE aktivieren
Führen Sie je nach Verwendung von GKE Autopilot- oder Standardclustern die folgenden Schritte aus. Für eine vollständig verwaltete Kubernetes-Umgebung empfehlen wir die Verwendung eines Autopilot-Clusters. Informationen zur Auswahl des für Ihre Arbeitslasten am besten geeigneten Modus finden Sie unter GKE-Betriebsmodus auswählen.
Autopilot
Der CSI-Treiber für Cloud Storage FUSE ist standardmäßig für Autopilot-Cluster aktiviert. Sie können mit Zugriff auf Cloud Storage-Buckets konfigurieren fortfahren.
Standard
Wenn in Ihrem Standardcluster der CSI-Treiber für Cloud Storage FUSE aktiviert ist, fahren Sie mit Zugriff auf Cloud Storage-Buckets konfigurieren fort.
Der CSI-Treiber für Cloud Storage FUSE ist in Standardclustern nicht standardmäßig aktiviert. Zum Erstellen eines Standardclusters mit aktiviertem CSI-Treiber für Cloud Storage FUSE
können Sie den gcloud container clusters create Befehl verwenden:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.svc.id.goog
Ersetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.VERSION: Die GKE-Versionsnummer. Sie müssen Version 1.24 oder höher auswählen.LOCATION: Die Compute Engine-Region oder -Zone für den Cluster.PROJECT_ID: Ihre Projekt-ID.
Verwenden Sie den gcloud container clusters update
Befehl, um den Treiber auf einem vorhandenen Standardcluster zu aktivieren:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Führen Sie den folgenden Befehl aus, um zu prüfen, ob der CSI-Treiber für Cloud Storage FUSE in Ihrem Cluster aktiviert ist:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
Zugriff auf Cloud Storage-Buckets konfigurieren
Der CSI-Treiber für Cloud Storage FUSE verwendet die Workload Identity Federation for GKE, damit Sie detaillierte Berechtigungen dafür festlegen können, wie Ihre GKE-Pods auf in Cloud Storage gespeicherte Daten zugreifen können.
So machen Sie Ihre Cloud Storage-Buckets für Ihren GKE-Cluster zugänglich: Authentifizieren Sie sich mit der Workload Identity Federation for GKE mit dem Cloud Storage-Bucket, den Sie in Ihrer Pod-Spezifikation bereitstellen möchten:
- Wenn die Workload Identity Federation for GKE nicht aktiviert ist, folgen Sie dieser Anleitung, um sie zu aktivieren. Wenn Sie einen vorhandenen Knotenpool verwenden möchten, aktivieren Sie die Workload Identity Federation for GKE manuell in Ihrem Knotenpool, nachdem Sie die Workload Identity Federation for GKE in Ihrem Cluster aktiviert haben.
Rufen Sie Anmeldedaten für Ihren Cluster ab:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters, für den die Workload Identity Federation for GKE aktiviert ist.LOCATION: Die Compute Engine-Region oder -Zone für den Cluster.
Erstellen Sie einen Namespace, der für das Kubernetes ServiceAccount verwendet werden soll. Sie können auch den Namespace
defaultoder einen vorhandenen Namespace verwenden.kubectl create namespace NAMESPACEErsetzen Sie
NAMESPACEdurch den Namen des Kubernetes-Namespace für das Kubernetes-ServiceAccount.Erstellen Sie ein Kubernetes-ServiceAccount für die Anwendung: Sie können auch ein beliebiges Kubernetes-ServiceAccount in einem beliebigen Namespace verwenden, einschließlich des Kubernetes-ServiceAccount
default.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACEErsetzen Sie
KSA_NAMEdurch den Namen des neuen Kubernetes-ServiceAccount.Gewähren Sie dem Kubernetes-ServiceAccount eine der IAM-Rollen für Cloud Storage. Führen Sie je nachdem, ob Sie dem Kubernetes-ServiceAccount nur Zugriff auf einen bestimmten Cloud Storage-Bucket oder globalen Zugriff auf alle Buckets im Projekt gewähren, die folgenden Schritte aus.
Zugriff auf bestimmte Buckets
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 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" (
Globaler Bucket-Zugriff
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 Folgendes:
GCS_PROJECT: Die Projekt-ID Ihrer Cloud Storage-Buckets.PROJECT_NUMBER: Die numerische Projektnummer Ihres GKE-Cluster. 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" (
Zugriff für Pods mit Hostnetzwerk konfigurieren
Bei GKE-Clusterversionen vor 1.33.3-gke.1226000 unterstützt der CSI-Treiber für Cloud Storage FUSE aufgrund von Einschränkungen der Workload Identity Federation for GKE keine Pods, die im Hostnetzwerk (hostNetwork: true) ausgeführt werden. Bei späteren GKE-Versionen können Sie jedoch eine sichere Authentifizierung für Pods mit aktivierter hostNetwork konfigurieren, wenn Sie den CSI-Treiber für Cloud Storage FUSE zum Bereitstellen von Cloud Storage-Buckets verwenden. Die Unterstützung für das Hostnetzwerk ist nur in GKE-Standardclustern verfügbar.
Ihr GKE-Cluster muss die folgenden Anforderungen erfüllen:
- Sowohl die Steuerungsebene als auch die Knotenpools in Ihrem GKE-Standardcluster müssen die Version
1.33.3-gke.1226000oder höher haben. - Aktivieren Sie die Workload Identity in Ihrem Cluster.
- Gewähren Sie dem Kubernetes-ServiceAccount, das Ihr Pod mit aktivierter
hostNetworkverwendet, um auf Ihren Cloud Storage-Bucket zuzugreifen, die erforderlichen IAM-Berechtigungen. Weitere Informationen finden Sie unter Bei Cloud Storage FUSE authentifizieren.
Sie geben das Volume-Attribut hostNetworkPodKSA: "true" in Ihrer Pod- oder PersistentVolume-Definition an, damit Ihre HostNetwork Pods auf Cloud Storage-Volumes zugreifen können. Die genaue Konfiguration hängt davon ab, wie Sie den Cloud Storage FUSE-Sidecar-Container verwalten.
Verwaltete Sidecars
Dieser Abschnitt gilt, wenn GKE den Cloud Storage FUSE-Sidecar-Container automatisch in Ihre Pods einfügt und verwaltet. Diese Option ist die Standard- und empfohlene Einrichtung für den CSI-Treiber für Cloud Storage FUSE.
Sitzungsspezifisches Volume
Das folgende Pod-Manifest konfiguriert ein sitzungsspezifisches Volume für einen HostNetwork-Pod, um auf einen Cloud Storage-Bucket zuzugreifen.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
Nichtflüchtiges Volume
Das folgende PV-Manifest konfiguriert ein PV für einen HostNetwork-Pod, um auf einen Cloud Storage-Bucket zuzugreifen.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
Private Sidecars
Dieser Abschnitt gilt, wenn Sie den Cloud Storage FUSE-Sidecar-Container in Ihren Pods manuell verwalten oder ein benutzerdefiniertes Sidecar-Image verwenden.
Ihr Sidecar-Image muss auf dem CSI-Treiber für Cloud Storage FUSE Version 1.17.2 oder höher basieren.
Sitzungsspezifisches Volume
Das folgende Pod-Manifest konfiguriert ein sitzungsspezifisches Volume für einen HostNetwork-Pod, um auf einen Cloud Storage-Bucket zuzugreifen.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
Ersetzen Sie im Feld identityProvider Folgendes:
PROJECT_ID: Ihre Google Cloud Projekt-ID.LOCATION: Der Standort Ihres Clusters.CLUSTER_NAME: Der Name Ihres GKE-Standardclusters.
Nichtflüchtiges Volume
Das folgende PV-Manifest konfiguriert ein PV für einen HostNetwork-Pod, um auf einen Cloud Storage-Bucket zuzugreifen.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
Ersetzen Sie im Feld identityProvider Folgendes:
PROJECT_ID: Ihre Google Cloud Projekt-ID.LOCATION: Der Standort Ihres Clusters.CLUSTER_NAME: Der Name Ihres GKE-Standardclusters.
Nächste Schritte
- Fehlerbehebung bei Cloud Storage FUSE
- Informationen zum Bereitstellen von Cloud Storage-Buckets, indem Sie Ihre Buckets direkt in der Pod-Spezifikation angeben.
- Informationen zum Bereitstellen von Cloud Storage-Buckets mit einer PersistentVolume-Ressource.
- Weitere Informationen zum Konfigurieren von Anwendungen für die Verwendung der Workload Identity Federation for GKE.
- Leistung mit Cloud Storage FUSE-Profilen automatisch optimieren.
- Cloud Storage FUSE manuell für die Leistung optimieren.