Il driver CSI Filestore è il modo principale per utilizzare le istanze di Filestore con Google Kubernetes Engine (GKE). Il driver CSI Filestore fornisce un'esperienza completamente gestita grazie al driver CSI Google Cloud Filestore open source.
La versione del driver CSI Filestore è legata ai numeri di versione secondari di Kubernetes. La versione del driver CSI di Filestore è in genere il driver più recente disponibile al momento del rilascio della versione secondaria di Kubernetes. I driver vengono aggiornati automaticamente quando viene eseguito l'upgrade del cluster alla patch GKE più recente.
Vantaggi
Il driver CSI Filestore offre i seguenti vantaggi:
Hai accesso all'archiviazione NFS completamente gestita tramite le API Kubernetes (
kubectl
).Puoi utilizzare il driver CSI di GKE Filestore per eseguire dinamicamente il provisioning dei PersistentVolume.
Puoi utilizzare snapshot di volumi con il driver CSI GKE Filestore. Gli snapshot di volumi CSI possono essere utilizzati per creare backup Filestore.
Un backup di Filestore crea una copia differenziale della condivisione file, che include tutti i dati e i metadati dei file, e la archivia separatamente dall'istanza. Puoi ripristinare questa copia solo in una nuova istanza Filestore. Il ripristino in un'istanza Filestore esistente non è supportato. Puoi utilizzare l'API CSI Volume Snapshot per attivare i backup di Filestore, aggiungendo un campo
type:backup
nella classe di snapshot del volume.Puoi utilizzare l'espansione del volume con il driver CSI di GKE Filestore. L'espansione del volume consente di ridimensionare la capacità del volume.
Puoi accedere alle istanze Filestore esistenti utilizzando le istanze Filestore di cui è stato eseguito il pre-provisioning nei carichi di lavoro Kubernetes. Puoi anche creare o eliminare dinamicamente le istanze Filestore e utilizzarle nei carichi di lavoro Kubernetes con un elemento StorageClass o un deployment.
Supporta Multishares Filestore per GKE. Questa funzionalità consente di creare un'istanza Filestore e allocare contemporaneamente più oggetti PersistentVolume montati su NFS più piccoli su un numero qualsiasi di cluster GKE.
Requisiti
- Per utilizzare il driver CSI Filestore, i cluster devono utilizzare GKE versione 1.21 o successiva.
- Per utilizzare la funzionalità di condivisione multipla di Filestore, i cluster devono utilizzare GKE versione 1.23 o successiva.
- Il driver CSI Filestore è supportato per i cluster che utilizzano solo Linux. I nodi di Windows Server non sono supportati.
- La dimensione minima dell'istanza per Filestore è di almeno 1 TiB. La dimensione minima dell'istanza dipende dal livello di servizio Filestore selezionato. Per saperne di più, consulta Livelli di servizio.
- Filestore utilizza il protocollo del file system NFSv3 sull'istanza Filestore e supporta qualsiasi client compatibile con NFSv3.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Cloud Filestore e l'API Google Kubernetes Engine. Abilita le API
- Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo
gcloud components update
.
- Se vuoi utilizzare Filestore su una rete VPC condivisa, consulta le istruzioni di configurazione aggiuntive in Utilizzare Filestore con il VPC condiviso.
Abilita il driver CSI Filestore su un nuovo cluster
Per abilitare il driver CSI del driver CSI Filestore quando crei un nuovo cluster Standard, segui questi passaggi con Google Cloud CLI o con la console Google Cloud.
gcloud
gcloud container clusters create CLUSTER_NAME \
--addons=GcpFilestoreCsiDriver \
--cluster-version=VERSION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del tuo cluster.VERSION
: il numero di versione di GKE. Per utilizzare questa funzionalità, devi selezionare una versione 1.21 o successiva. In alternativa, puoi utilizzare il flag--release-channel
e specificare un canale di rilascio.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_box Crea.
Scegli la modalità cluster Standard, quindi fai clic su Configura.
Configura il cluster come preferisci.
Nel riquadro di navigazione, in Cluster, fai clic su Funzionalità.
Seleziona la casella di controllo Abilita il driver CSI Filestore.
Fai clic su Crea.
Se vuoi utilizzare Filestore su una rete VPC condivisa, consulta Abilitare il driver CSI Filestore su un nuovo cluster con VPC condiviso.
Dopo aver abilitato il driver CSI Filestore, puoi utilizzarlo nei volumi Kubernetes
utilizzando il nome del driver e del provisioner: filestore.csi.storage.gke.io
.
Abilita il driver CSI Filestore su un cluster esistente
Per abilitare il driver CSI Filestore nei cluster esistenti, utilizza Google Cloud CLI o la console Google Cloud.
Per abilitare il driver su un cluster esistente, completa i seguenti passaggi:
gcloud
gcloud container clusters update CLUSTER_NAME \
--update-addons=GcpFilestoreCsiDriver=ENABLED
Sostituisci CLUSTER_NAME
con il nome del cluster esistente.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
In Funzionalità, accanto al campo Driver CSI Filestore, fai clic su edit Modifica driver CSI Filestore.
Seleziona la casella di controllo Abilita il driver CSI Filestore.
Fai clic su Salva modifiche.
Disabilita il driver CSI Filestore
Puoi disabilitare il driver CSI Filestore su un cluster Autopilot o Standard esistente utilizzando Google Cloud CLI o la console Google Cloud.
gcloud
gcloud container clusters update CLUSTER_NAME \
--update-addons=GcpFilestoreCsiDriver=DISABLED \
--region REGION
Sostituisci i seguenti valori:
CLUSTER_NAME
: il nome del cluster esistente.REGION
: la regione del cluster (ad esempious-central1
).
Console
Nella console Google Cloud, vai al menu di Google Kubernetes Engine.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
In Funzionalità, accanto al campo Driver CSI Filestore, fai clic su edit Modifica driver CSI Filestore.
Deseleziona la casella di controllo Abilita il driver CSI Filestore.
Fai clic su Salva modifiche.
Accedi alle istanze Filestore preesistenti utilizzando il driver CSI Filestore
Questa sezione descrive il processo tipico per utilizzare un volume Kubernetes per accedere a istanze Filestore preesistenti utilizzando il driver CSI Filestore in GKE:
Crea un PersistentVolume e un PersistentVolumeClaim per accedere all'istanza
Crea un file manifest come quello mostrato nell'esempio seguente e assegnagli il nome
preprov-filestore.yaml
:apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "" capacity: storage: 1Ti accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem csi: driver: filestore.csi.storage.gke.io volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME" volumeAttributes: ip: FILESTORE_INSTANCE_IP volume: FILESTORE_SHARE_NAME --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: "" volumeName: PV_NAME resources: requests: storage: 1Ti
Per creare le risorse
PersistentVolumeClaim
ePersistentVolume
in base al file manifestpreprov-filestore.yaml
, esegui questo comando:kubectl apply -f preprov-filestore.yaml
Quindi, passa alla creazione di un deployment che utilizzi il volume.
Crea un volume utilizzando il driver CSI Filestore
Le seguenti sezioni descrivono il processo tipico per l'utilizzo di un volume Kubernetes supportato da un driver CSI Filestore in GKE:
- Crea un oggetto StorageClass
- Utilizza un oggetto PersistentVolumeClaim per accedere al volume
- Crea un deployment che consumi il volume
Creazione di un oggetto StorageClass
Dopo aver abilitato il driver CSI Filestore, GKE installa automaticamente le seguenti StorageClasses per il provisioning delle istanze Filestore:
zonal-rwx
, utilizzando il livello Filestore di zona. Disponibile solo per la banda di capacità maggiore. Questo oggetto StorageClass è disponibile nei cluster GKE che eseguono la versione 1.27 o successive.enterprise-rwx
, utilizzando il livello Filestore aziendale, in cui ogni PersistentVolume di Kubernetes è mappato a un'istanza Filestore. Questo oggetto StorageClass è disponibile nei cluster GKE che eseguono la versione 1.23 o successive.enterprise-multishare-rwx
, utilizzando il livello Filestore aziendale, in cui ogni PersistentVolume di Kubernetes viene mappato a una quota di una determinata istanza Filestore. Questo oggetto StorageClass è disponibile nei cluster GKE che eseguono la versione 1.23 o successive. Per scoprire di più, consulta Multishares di Filestore per Google Kubernetes Engine.standard-rwx
, utilizzando il livello di servizio base di Filestore HDD.premium-rwx
, utilizzando il livello di servizio Filestore SSD di base.
Puoi trovare il nome della StorageClass
installata eseguendo questo comando:
kubectl get sc
Puoi anche installare un StorageClass
diverso che utilizzi il driver CSI Filestore
aggiungendo filestore.csi.storage.gke.io
nel campo provisioner
.
Salva il seguente manifest con il nome
filestore-example-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: filestore-example provisioner: filestore.csi.storage.gke.io volumeBindingMode: Immediate allowVolumeExpansion: true parameters: tier: standard network: default
Dal file manifest, considera la seguente configurazione dei parametri:
- L'impostazione di
volumeBindingMode
suImmediate
consente di iniziare immediatamente il provisioning del volume. Questo è possibile perché le istanze Filestore sono accessibili da qualsiasi zona. Pertanto, GKE non ha bisogno di conoscere la zona in cui è pianificato il pod, a differenza del disco permanente di Compute Engine. Se il criterio è impostato suWaitForFirstConsumer
, GKE inizia il provisioning solo dopo la pianificazione del pod. Per ulteriori informazioni, consulta VolumeBindingMode. - Qualsiasi livello può essere specificato nel parametro
tier
(ad esempiostandard
,premium
,zonal
oenterprise
). + Il parametronetwork
può essere utilizzato durante il provisioning delle istanze Filestore su VPC non predefiniti. I VPC non predefiniti richiedono la configurazione di regole firewall speciali.
- L'impostazione di
Per creare una risorsa
StorageClass
basata sul file manifestfilestore-example-class.yaml
, esegui questo comando:kubectl create -f filestore-example-class.yaml
Se vuoi utilizzare Filestore su una rete VPC condivisa, consulta Creare un oggetto StorageClass quando si utilizza il driver CSI Filestore con VPC condiviso.
Usa un oggetto PersistentVolumeClaim per accedere al volume
Puoi creare una risorsa PersistentVolumeClaim
che fa riferimento al
driver CSI Filestore StorageClass
.
Puoi usare un StorageClass
preinstallato o personalizzato.
Il seguente file manifest di esempio crea un
PersistentVolumeClaim
che fa riferimento al StorageClass
denominato filestore-example
.
Salva il seguente file manifest con il nome
pvc-example.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: filestore-example resources: requests: storage: 1Ti
Per creare una risorsa
PersistentVolume
basata sul file manifestpvc-example.yaml
, esegui questo comando:kubectl create -f pvc-example.yaml
crea un deployment che consuma il volume
Il seguente manifest di deployment di esempio consuma la risorsa PersistentVolume
denominata pvc-example.yaml
.
Più pod possono condividere la stessa risorsa PersistentVolumeClaim
.
Salva il seguente manifest con il nome
filestore-example-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: web-server-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: filestore-example resources: requests: storage: 1Ti
Per creare un deployment basato sul file manifest
filestore-example-deployment.yaml
, esegui questo comando:kubectl apply -f filestore-example-deployment.yaml
Verifica che il deployment sia stato creato correttamente:
kubectl get deployment
Il completamento del provisioning delle istanze Filestore potrebbe richiedere un po' di tempo. Prima di questa data, i deployment non mostreranno lo stato
READY
. Puoi controllare l'avanzamento monitorando lo stato della PVC eseguendo questo comando:kubectl get pvc
Una volta completato il provisioning del volume, dovresti vedere che la PVC raggiunge lo stato
BOUND
.
Etichetta le istanze Filestore
Puoi utilizzare le etichette per raggruppare le istanze correlate e archiviare i metadati relativi a un'istanza. Un'etichetta è una coppia chiave-valore che ti aiuta a organizzare le istanze Filestore. Puoi associare un'etichetta a ogni risorsa, quindi filtrare le risorse in base alle etichette.
Puoi fornire le etichette utilizzando la chiave labels
in StorageClass.parameters
.
Un'istanza Filestore può essere etichettata con informazioni sullo scopo PersistentVolumeClaim
/PersistentVolume
per cui è stata creata l'istanza. Le chiavi e i valori delle etichette personalizzate devono essere conformi alla convenzione di denominazione delle etichette.
Vedi l'esempio di classe di archiviazione Kubernetes per applicare etichette personalizzate all'istanza Filestore.
Utilizza fsgroup con i volumi Filestore
Kubernetes utilizza fsGroup
per modificare le autorizzazioni e la proprietà del volume in modo che corrisponda a un valore fsGroup
richiesto dall'utente nel campo SecurityContext del pod.
Un fsGroup
è un gruppo supplementare che si applica a tutti i container in un pod.
Puoi applicare un fsgroup ai volumi di cui è stato eseguito il provisioning dal driver CSI Filestore.
Utilizza Filestore con VPC condiviso
Questa sezione illustra come utilizzare un'istanza Filestore su una rete VPC condiviso da un progetto di servizio.
Configura un cluster con VPC condiviso
Per configurare i cluster con una rete VPC condiviso, segui questi passaggi:
- Crea un progetto host e di servizio.
- Abilita l'API Google Kubernetes Engine sui progetti host e di servizio.
- Nel progetto host, crea una rete e una subnet.
- Abilita il VPC condiviso nel progetto host.
- Nel progetto host, concedi l'associazione del ruolo utente
HostServiceAgent
per l'account di servizio GKE del progetto di servizio. - Abilita l'accesso privato ai servizi nella VPC condiviso condivisa.
Abilita il driver CSI Filestore su un nuovo cluster con VPC condiviso
Per abilitare il driver CSI Filestore su un nuovo cluster con VPC condiviso, segui questi passaggi:
Verifica le subnet utilizzabili e gli intervalli secondari. Quando crei un cluster, devi specificare una subnet e gli intervalli di indirizzi IP secondari da utilizzare per i pod e il servizio del cluster.
gcloud container subnets list-usable \ --project=SERVICE_PROJECT_ID \ --network-project=HOST_PROJECT_ID
L'output è simile al seguente:
PROJECT REGION NETWORK SUBNET RANGE HOST_PROJECT_ID us-central1 shared-net tier-1 10.0.4.0/22 ┌──────────────────────┬───────────────┬─────────────────────────────┐ │ SECONDARY_RANGE_NAME │ IP_CIDR_RANGE │ STATUS │ ├──────────────────────┼───────────────┼─────────────────────────────┤ │ tier-1-pods │ 10.4.0.0/14 │ usable for pods or services │ │ tier-1-services │ 10.0.32.0/20 │ usable for pods or services │ └──────────────────────┴───────────────┴─────────────────────────────┘
Creare un cluster GKE. Gli esempi seguenti mostrano come utilizzare gcloud CLI per creare un cluster Autopilot o Standard configurato per il VPC condiviso. Gli esempi seguenti utilizzano i nomi di rete, subnet e intervalli descritti nella sezione Creazione di una rete e due subnet.
Autopilot
gcloud container clusters create-auto tier-1-cluster \ --project=SERVICE_PROJECT_ID \ --region=COMPUTE_REGION \ --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \ --cluster-secondary-range-name=tier-1-pods \ --services-secondary-range-name=tier-1-services
Standard
gcloud container clusters create tier-1-cluster \ --project=SERVICE_PROJECT_ID \ --zone=COMPUTE_REGION \ --enable-ip-alias \ --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \ --cluster-secondary-range-name=tier-1-pods \ --services-secondary-range-name=tier-1-services \ --addons=GcpFilestoreCsiDriver
Crea regole firewall per consentire la comunicazione tra nodi, pod e servizi nel cluster. L'esempio seguente mostra come creare una regola firewall denominata
my-shared-net-rule-2
.gcloud compute firewall-rules create my-shared-net-rule-2 \ --project HOST_PROJECT_ID \ --network=NETWORK_NAME \ --allow=tcp,udp \ --direction=INGRESS \ --source-ranges=10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
Nell'esempio, i valori IP degli intervalli di origine provengono dal passaggio precedente in cui hai verificato le subnet utilizzabili e gli intervalli secondari.
Crea un oggetto StorageClass quando utilizzi il driver CSI Filestore con VPC condiviso
L'esempio seguente mostra come creare un oggetto StorageClass quando si utilizza il driver CSI di Filestore con un VPC condiviso:
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: filestore-sharedvpc-example
provisioner: filestore.csi.storage.gke.io
parameters:
network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
connect-mode: PRIVATE_SERVICE_ACCESS
reserved-ip-range: RESERVED_IP_RANGE_NAME
allowVolumeExpansion: true
EOF
Sostituisci quanto segue:
HOST_PROJECT_ID
: l'ID o il nome del progetto host della rete VPC condiviso.SHARED_VPC_NAME
: il nome della rete VPC condiviso che hai creato in precedenza.RESERVED_IP_RANGE_NAME
: il nome dello specifico intervallo di indirizzi IP riservati in cui eseguire il provisioning dell'istanza Filestore. Questo campo è facoltativo. Se viene specificato un intervallo di indirizzi IP riservati, deve essere un intervallo di indirizzi denominato anziché un valore CIDR diretto.
Se vuoi eseguire il provisioning di un volume supportato dalle istanze multishare di Filestore sui cluster GKE in esecuzione 1.23 o versioni successive, consulta Ottimizzare l'archiviazione con le condivisioni multiple di Filestore per GKE.
Riconnetti i volumi a condivisione singola di Filestore
Se utilizzi Filestore con il livello HDD di base, SSD di base o aziendale (condivisione singola), puoi seguire queste istruzioni per riconnettere l'istanza Filestore esistente ai carichi di lavoro GKE.
Trova i dettagli dell'istanza Filestore di cui è stato eseguito il pre-provisioning seguendo le istruzioni riportate in Ottenere informazioni su un'istanza specifica.
Esegui nuovamente il deployment della specifica del PersistentVolume. Nel campo
volumeAttributes
, modifica i seguenti campi in modo da utilizzare gli stessi valori dell'istanza Filestore del passaggio 1:ip
: modifica questo valore impostando l'indirizzo IP dell'istanza Filestore di cui è stato eseguito il pre-provisioning.volume
: modifica questo valore impostando il nome di condivisione dell'istanza Filestore di cui è stato eseguito il pre-provisioning.
Esegui nuovamente il deployment della specifica PersistentVolumeClaim. In
volumeName
assicurati di fare riferimento allo stesso nome del PersistentVolume del passaggio 2.Controlla lo stato di associazione dell'oggetto PersistentVolumeClaim e del PersistentVolume eseguendo
kubectl get pvc
.Esegui nuovamente il deployment della specifica del pod e assicurati che il pod sia in grado di accedere di nuovo alla condivisione di Filestore.
Passaggi successivi
- Scopri come eseguire il deployment di un carico di lavoro Filestore stateful su GKE.
- Scopri come condividere un'istanza Enterprise di Filestore con più volumi permanenti.
- Scopri come utilizzare l'espansione del volume.
- Scopri come utilizzare gli snapshot dei volumi.
- Scopri di più sul driver CSI su GitHub.