Con il driver CSI di Cloud Storage FUSE, i workload GKE possono accedere ai bucket Cloud Storage come file system locale. Il driver CSI integra Cloud Storage con GKE e semplifica il modo in cui le applicazioni containerizzate interagiscono con i set di dati di grandi dimensioni archiviati nei bucket. Il driver CSI fornisce un'interfaccia standard per l'archiviazione GKE. In questo documento, preparerai l'ambiente e collegherai i cluster GKE ai bucket Cloud Storage utilizzando il driver CSI di Cloud Storage FUSE.
Questo documento è destinato a sviluppatori, amministratori e specialisti dell'archiviazione che integrano i workload GKE con l'archiviazione di oggetti. Per saperne di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti GKE.
Creare il bucket Cloud Storage
Se non l'hai ancora fatto, crea i bucket Cloud Storage. Questi bucket verranno montati come volumi nel cluster GKE. Per migliorare le prestazioni, imposta il tipo di località su Regione e seleziona una regione che corrisponda al cluster GKE.
Abilitare il driver CSI di Cloud Storage FUSE
Segui questi passaggi, a seconda che tu stia utilizzando cluster GKE Autopilot o Standard. Ti consigliamo di utilizzare un cluster Autopilot per un'esperienza Kubernetes completamente gestita. Per scegliere la modalità più adatta ai tuoi workload, consulta Scegliere una modalità di funzionamento di GKE.
Autopilot
Il driver CSI di Cloud Storage FUSE è abilitato per impostazione predefinita per i cluster Autopilot. Puoi passare a Configurare l'accesso ai bucket Cloud Storage.
Standard
Se il driver CSI di Cloud Storage FUSE è abilitato nel cluster Standard, vai a Configurare l'accesso ai bucket Cloud Storage.
Il driver CSI di Cloud Storage FUSE non è abilitato per impostazione predefinita nei cluster Standard. Per creare un cluster Standard con il driver CSI di Cloud Storage FUSE
abilitato, puoi utilizzare il gcloud container clusters create comando:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.svc.id.goog
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.VERSION: il numero di versione di GKE. Devi selezionare la versione 1.24 o successive.LOCATION: la regione o la zona di Compute Engine per il cluster.PROJECT_ID: il tuo ID progetto.
Per abilitare il driver su un cluster Standard esistente, utilizza il gcloud container clusters update
comando:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Per verificare che il driver CSI di Cloud Storage FUSE sia abilitato nel cluster, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
Configurare l'accesso ai bucket Cloud Storage
Il driver CSI di Cloud Storage FUSE utilizza Workload Identity Federation for GKE per consentirti di impostare autorizzazioni granulari su come i pod GKE possono accedere ai dati archiviati in Cloud Storage.
Per rendere accessibili i bucket Cloud Storage al cluster GKE, esegui l'autenticazione utilizzando Workload Identity Federation for GKE con il bucket Cloud Storage che vuoi montare nella specifica del pod:
- Se non hai abilitato Workload Identity Federation for GKE, segui questi passaggi per abilitarlo. Se vuoi utilizzare un pool di nodi esistente, abilita manualmente Workload Identity Federation for GKE nel pool di nodi dopo aver abilitato Workload Identity Federation for GKE nel cluster.
Recupera le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster in cui è abilitato Workload Identity Federation for GKE.LOCATION: la regione o la zona di Compute Engine per il cluster.
Crea uno spazio dei nomi da utilizzare per il service account Kubernetes. Puoi anche utilizzare lo spazio dei nomi
defaulto qualsiasi spazio dei nomi esistente.kubectl create namespace NAMESPACESostituisci
NAMESPACEcon il nome dello spazio dei nomi Kubernetes per il service account Kubernetes.Crea un service account Kubernetes da utilizzare per l'applicazione. Puoi anche utilizzare qualsiasi service account Kubernetes esistente in qualsiasi spazio dei nomi, incluso il service account Kubernetes
default.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACESostituisci
KSA_NAMEcon il nome del service account Kubernetes.Concedi uno dei ruoli IAM per Cloud Storage al service account Kubernetes. Segui questi passaggi, a seconda che tu stia concedendo al service account Kubernetes l'accesso a un bucket Cloud Storage specifico o l'accesso globale a tutti i bucket del progetto.
Accesso a un bucket specifico
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"Sostituisci quanto segue:
BUCKET_NAME: il nome del bucket Cloud Storage.PROJECT_NUMBER: il numero del progetto numerico del cluster GKE. Per trovare il numero del progetto, consulta Identificare i progetti.PROJECT_ID: l'ID progetto del cluster GKE.NAMESPACE: il nome dello spazio dei nomi Kubernetes per il service account Kubernetes.KSA_NAME: il nome del nuovo service account Kubernetes.ROLE_NAME: il ruolo IAM da assegnare al service account Kubernetes.- Per i workload di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (
roles/storage.objectViewer). - Per i workload di lettura/scrittura, utilizza il ruolo Utente oggetti Storage (
roles/storage.objectUser).
- Per i workload di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (
Accesso globale ai bucket
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"Sostituisci quanto segue:
GCS_PROJECT: l'ID progetto dei bucket Cloud Storage.PROJECT_NUMBER: il numero del progetto numerico del cluster GKE. Per trovare il numero del progetto, consulta Identificare i progetti.PROJECT_ID: l'ID progetto del cluster GKE.NAMESPACE: il nome dello spazio dei nomi Kubernetes per il service account Kubernetes.KSA_NAME: il nome del nuovo service account Kubernetes.ROLE_NAME: il ruolo IAM da assegnare al service account Kubernetes.- Per i workload di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (
roles/storage.objectViewer). - Per i workload di lettura/scrittura, utilizza il ruolo Utente oggetti Storage (
roles/storage.objectUser).
- Per i workload di sola lettura, utilizza il ruolo Visualizzatore oggetti Storage (
Configurare l'accesso per i pod con la rete host
Per le versioni del cluster GKE precedenti a 1.33.3-gke.1226000, il driver CSI di Cloud Storage FUSE non supporta i pod in esecuzione sulla rete host (hostNetwork: true) a causa delle limitazioni di Workload Identity Federation for GKE. Tuttavia, per le versioni GKE successive, puoi configurare l'autenticazione sicura per i pod con hostNetwork abilitato quando utilizzi il driver CSI di Cloud Storage FUSE per montare i bucket Cloud Storage. Il supporto della rete host è disponibile solo nei cluster GKE Standard.
Assicurati che il cluster GKE soddisfi i seguenti requisiti:
- Sia il piano di controllo che i pool di nodi nel cluster GKE Standard devono avere la versione
1.33.3-gke.1226000o successive. - Abilita Workload Identity nel cluster.
- Concedi le autorizzazioni IAM necessarie al service account Kubernetes utilizzato dal pod con
hostNetworkabilitato per accedere al bucket Cloud Storage. Per saperne di più, consulta Eseguire l'autenticazione a Cloud Storage FUSE.
Specifica l'attributo del volume hostNetworkPodKSA: "true" nella definizione del pod o del PersistentVolume per consentire ai pod HostNetwork di accedere ai volumi Cloud Storage. La configurazione esatta varia in base alla modalità di gestione del container sidecar Cloud Storage FUSE.
Container collaterali gestiti
Questa sezione si applica se GKE inserisce e gestisce automaticamente il container sidecar Cloud Storage FUSE nei pod. Questa opzione è la configurazione predefinita e consigliata per il driver CSI di Cloud Storage FUSE.
Volume temporaneo
Il seguente manifest del pod configura un volume temporaneo per un pod HostNetwork per accedere a un bucket Cloud Storage.
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"
Volume permanente
Il seguente manifest PV configura un PV per un pod HostNetwork per accedere a un bucket Cloud Storage.
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"
Container collaterali privati
Questa sezione si applica se gestisci manualmente il container sidecar Cloud Storage FUSE all'interno dei pod o utilizzi un'immagine collaterale personalizzata.
Assicurati che l'immagine collaterale sia basata sulla versione v1.17.2 o successive del driver CSI di Cloud Storage FUSE.
Volume temporaneo
Il seguente manifest del pod configura un volume temporaneo per un pod HostNetwork per accedere a un bucket Cloud Storage.
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"
Nel campo identityProvider, sostituisci quanto segue:
PROJECT_ID: il tuo Google Cloud ID progetto.LOCATION: la località del cluster.CLUSTER_NAME: il nome del cluster GKE Standard.
Volume permanente
Il seguente manifest PV configura un PV per un pod HostNetwork per accedere a un bucket Cloud Storage.
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"
Nel campo identityProvider, sostituisci quanto segue:
PROJECT_ID: il tuo Google Cloud ID progetto.LOCATION: la località del cluster.CLUSTER_NAME: il nome del cluster GKE Standard.
Passaggi successivi
- Risolvere i problemi di Cloud Storage FUSE
- Scopri come montare i bucket Cloud Storage specificandoli in linea con la specifica del pod.
- Scopri come montare i bucket Cloud Storage utilizzando una risorsa PersistentVolume.
- Scopri di più sulla configurazione delle applicazioni per utilizzare Workload Identity Federation for GKE.
- Ottimizzare automaticamente le prestazioni con i profili Cloud Storage FUSE.
- Ottimizzare manualmente Cloud Storage FUSE per le prestazioni.