Questa guida descrive come creare un nuovo volume Kubernetes supportato dal driver CSI Managed Lustre in GKE con il provisioning dinamico. Il driver CSI Managed Lustre ti consente di creare spazio di archiviazione supportato da istanze Managed Lustre on demand e di accedervi come volumi per i tuoi workload stateful.
Supporto multi-NIC per il networking ad alte prestazioni
Per i cluster GKE che eseguono la versione 1.35.2-gke.1842000 o successive, il driver CSI di Managed Lustre è abilitato per impostazione predefinita per utilizzare tutte le schede di interfaccia di rete (NIC) disponibili per un throughput maggiore. Questo supporto aggrega la larghezza di banda distribuendo il traffico di archiviazione TCP tra le interfacce di rete.
Per utilizzare il supporto multi-NIC, i nodi devono soddisfare i seguenti requisiti:
- NIC standard per TCP: i nodi devono utilizzare NIC standard, come Google Virtual NIC (gVNIC) o VirtIO-Net, per gestire il traffico di archiviazione TCP.
- Stesso VPC: tutte le NIC standard devono trovarsi nella stessa rete VPC.
- Considerazioni su RDMA: ai nodi possono essere collegate anche NIC RDMA; tuttavia, il driver CSI di Managed Lustre utilizza solo le NIC standard per il traffico di archiviazione TCP.
Se vuoi disattivare il supporto multi-NIC, consulta Disattiva multi-NIC per Lustre.
Porte di comunicazione Lustre
Il driver CSI di GKE Managed Lustre utilizza porte diverse per la comunicazione con le istanze di Managed Lustre, a seconda della versione del cluster GKE e delle configurazioni di Managed Lustre esistenti.
Porta predefinita (consigliata): per i nuovi cluster GKE che eseguono la versione
1.33.2-gke.4780000o successive, il driver utilizza la porta988per la comunicazione Lustre per impostazione predefinita.Porta legacy (deprecata): utilizza la porta
6988aggiungendo il flag--enable-legacy-lustre-portai comandigcloudnei seguenti scenari:- Versioni precedenti di GKE: se il tuo cluster GKE esegue una versione precedente alla
1.33.2-gke.4780000, il flag--enable-legacy-lustre-portrisolve un conflitto di porte congke-metadata-serversui nodi GKE. - Istanze Lustre esistenti: se ti connetti a un'istanza Managed Lustre esistente creata con il flag
gke-support-enabled, devi comunque includere--enable-legacy-lustre-portnei comandigcloud, indipendentemente dalla versione del cluster. Senza questo flag, il cluster GKE non riuscirà a montare l'istanza Lustre esistente.
- Versioni precedenti di GKE: se il tuo cluster GKE esegue una versione precedente alla
Puoi configurare i cluster nuovi ed esistenti in modo che utilizzino la porta predefinita 988 o la porta legacy 6988.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Cloud Managed Lustre e l'API Google Kubernetes Engine. Abilita le API
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Per limitazioni e requisiti, consulta la panoramica del driver CSI.
- Assicurati di abilitare il driver CSI di Managed Lustre. È disabilitato per impostazione predefinita nei cluster Standard e Autopilot.
Imposta le variabili di ambiente
Imposta le seguenti variabili di ambiente:
export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
export CLUSTER_VERSION=CLUSTER_VERSION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.PROJECT_ID: il tuo Google Cloud ID progetto.LUSTRE_NETWORK: la rete Virtual Private Cloud (VPC) condivisa in cui si trovano sia il cluster GKE sia l'istanza Managed Lustre.LUSTRE_IP_RANGE: il nome dell'intervallo di indirizzi IP creato per il peering di rete VPC con Managed Lustre.LUSTRE_FIREWALL_RULE: il nome della regola firewall per consentire il traffico TCP dall'intervallo di indirizzi IP.ZONE: la zona geografica del tuo cluster GKE, ad esempious-central1-a.CLUSTER_VERSION: la versione del cluster GKE.
Configura una rete VPC
Devi specificare la stessa rete VPC durante la creazione dell'istanza Managed Lustre e dei cluster GKE o connessa tramite Network Connectivity Center se utilizzi una rete VPC in peering.
Per abilitare il networking dei servizi, esegui questo comando:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}Crea una rete VPC. L'impostazione del flag
--mtusu8896comporta un aumento delle prestazioni del 10%.gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896Crea un intervallo di indirizzi IP.
gcloud compute addresses create ${IP_RANGE_NAME} \ --global \ --purpose=VPC_PEERING \ --prefix-length=20 \ --description="Managed Lustre VPC Peering" \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID}Recupera l'intervallo CIDR associato all'intervallo che hai creato nel passaggio precedente.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )Crea una regola firewall per consentire il traffico TCP dall'intervallo di indirizzi IP che hai creato.
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}Per configurare il peering di rete per il tuo progetto, verifica di disporre delle autorizzazioni IAM necessarie, in particolare del ruolo
compute.networkAdminoservicenetworking.networksAdmin.- Vai alla console Google Cloud > IAM e amministrazione, quindi cerca l'entità Project Owner.
- Fai clic sull'icona a forma di matita, poi su + AGGIUNGI UN ALTRO RUOLO.
- Seleziona Compute Network Admin o Service Networking Admin.
- Fai clic su Salva.
Connetti il peering.
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
Configura il driver CSI di Managed Lustre
Questa sezione spiega come attivare e disattivare il driver CSI di Managed Lustre.
Abilita il driver CSI di Managed Lustre su un nuovo cluster GKE
Le sezioni seguenti descrivono come abilitare il driver CSI di Managed Lustre su un nuovo cluster GKE.
Utilizza la porta predefinita 988
Per abilitare il driver CSI di Managed Lustre durante la creazione di un nuovo cluster GKE che esegue la versione 1.33.2-gke.4780000 o successive, esegui questo comando:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver
Utilizza la porta legacy 6988
Per abilitare il driver CSI di Managed Lustre durante la creazione di un nuovo cluster GKE che esegue una versione precedente alla 1.33.2-gke.4780000, esegui questo comando:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver \
--enable-legacy-lustre-port
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
Abilita il driver CSI di Managed Lustre sui cluster GKE esistenti
Le sezioni seguenti descrivono come attivare il driver CSI di Managed Lustre sui cluster GKE esistenti.
Utilizza la porta predefinita 988
Per abilitare il driver CSI di Managed Lustre su un cluster GKE esistente che esegue la versione 1.33.2-gke.4780000 o successive, esegui questo comando:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
Utilizza la porta legacy 6988
Per abilitare il driver CSI di Managed Lustre su un cluster GKE esistente, potresti dover utilizzare la porta legacy 6988 aggiungendo il flag --enable-legacy-lustre-port. Questo flag è obbligatorio nei seguenti scenari:
- Se il tuo cluster GKE viene eseguito su una versione precedente alla
1.33.2-gke.4780000. Se intendi connettere questo cluster a un'istanza Managed Lustre esistente creata con il flag
gke-support-enabled.gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
Upgrade dei nodi richiesto sui cluster esistenti
L'abilitazione del driver CSI di Managed Lustre sui cluster esistenti può attivare la nuova creazione dei nodi per aggiornare i moduli kernel necessari per il client di Managed Lustre. Per una disponibilità immediata, ti consigliamo di eseguire l'upgrade manuale dei node pool.
I cluster GKE su un canale di rilascio eseguono l'upgrade in base all'implementazione pianificata, che può richiedere diverse settimane a seconda del periodo di manutenzione. Se utilizzi una versione GKE statica, devi eseguire l'upgrade manuale dei node pool.
Fino al completamento dell'upgrade dei nodi, il pod del driver CSI potrebbe entrare in un ciclo di arresti anomali sui nodi in attesa di aggiornamento. Se visualizzi un errore Operation not permitted nei log dei pod del driver CSI, significa che è necessario eseguire l'upgrade o la ricreazione del nodo.
Dopo l'upgrade del pool di nodi, i nodi CPU potrebbero sembrare utilizzare un'immagine GPU nell'output della console Google Cloud o della CLI. Si tratta di un comportamento normale. L'immagine GPU viene riutilizzata sui nodi CPU per installare in modo sicuro i moduli kernel di Managed Lustre. Non ti verrà addebitato alcun costo per l'utilizzo della GPU.
(Facoltativo) Crea un pool di nodi multi-NIC
Per utilizzare il networking ad alte prestazioni, devi creare un pool di nodi con un tipo di istanza che supporti più interfacce di rete. Il supporto multi-NIC è abilitato per impostazione predefinita nei cluster GKE che eseguono la versione 1.35.2-gke.1842000 o successive. Assicurati che le interfacce di rete secondarie si trovino nella stessa rete VPC dell'interfaccia principale.
Esegui questo comando:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--machine-type=MACHINE_TYPE \
--enable-gvnic \
--additional-node-network network=NETWORK_NAME,subnetwork=SECONDARY_SUBNET
Sostituisci quanto segue:
NODE_POOL_NAME: il nome del pool di nodi.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del tuo cluster.MACHINE_TYPE: il tipo di macchina per il pool di nodi, ad esempioa3-megagpu-8g, che viene spesso utilizzato con multi-NIC per prestazioni elevate. La funzionalità multi-NIC è supportata su qualsiasi tipo di macchina.NETWORK_NAME: il nome della rete VPC.SECONDARY_SUBNET: il nome della subnet secondaria.
Disabilita multi-NIC su Lustre
Sebbene il supporto multi-NIC sia consigliato per i workload ad alte prestazioni, potresti volerlo disattivare in scenari specifici. Ad esempio, potresti non voler distribuire il traffico Lustre su tutte le interfacce hardware disponibili o potresti dover isolare i problemi di connettività a un singolo percorso di rete per la risoluzione dei problemi.
Nota: se disattivi il supporto multi-NIC sui nodi in esecuzione, potresti dover ricreare o eseguire l'upgrade manuale dei node pool per applicare la modifica.
Per un cluster
Per disattivare il networking ad alte prestazioni per l'intero cluster, utilizza il flag --disable-multi-nic-lustre durante la creazione o l'aggiornamento del cluster. Ad esempio:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--disable-multi-nic-lustre
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del tuo cluster.
Per un pool di nodi
Per disattivare il networking ad alte prestazioni per un pool di nodi specifico, aggiorna il pool di nodi in modo da impostare l'etichetta lustre.csi.storage.gke.io/multi-nic su false:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false
Sostituisci quanto segue:
NODE_POOL_NAME: il nome del pool di nodi.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la zona del tuo cluster.
Disabilita il driver CSI Managed Lustre
Puoi disattivare il driver CSI di Managed Lustre su un cluster GKE esistente utilizzando Google Cloud CLI.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
Dopo la disattivazione del driver CSI, GKE ricrea automaticamente i nodi e disinstalla i moduli kernel di Managed Lustre.
Crea un nuovo volume utilizzando il driver CSI di Managed Lustre
Le sezioni seguenti descrivono la procedura tipica per la creazione di un volume Kubernetes supportato da un'istanza Managed Lustre in GKE:
- Crea una classe StorageClass.
- Usa un oggetto PersistentVolumeClaim per accedere al volume.
- Crea un workload che utilizza il volume.
Crea un oggetto StorageClass
Quando il driver CSI di Managed Lustre è abilitato, GKE crea automaticamente un oggetto StorageClass per il provisioning delle istanze di Managed Lustre. La classe StorageClass dipende dal livello di prestazioni di Managed Lustre ed è una delle seguenti:
lustre-rwx-125mbps-per-tiblustre-rwx-250mbps-per-tiblustre-rwx-500mbps-per-tiblustre-rwx-1000mbps-per-tib
GKE fornisce un oggetto StorageClass predefinito per ogni livello di prestazioni di Managed Lustre supportato. In questo modo, il provisioning dinamico delle istanze di Managed Lustre viene semplificato, poiché puoi utilizzare le classi StorageClasses integrate senza dover definire le tue.
Per i cluster di zona, il driver CSI esegue il provisioning delle istanze di Managed Lustre nella stessa zona del cluster. Per i cluster a livello di regione, esegue il provisioning dell'istanza in una delle zone all'interno della regione.
L'esempio seguente mostra come creare una classe StorageClass personalizzata con requisiti di topologia specifici:
Salva il seguente manifest in un file denominato
lustre-class.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-class provisioner: lustre.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete parameters: perUnitStorageThroughput: "1000" network: LUSTRE_NETWORK allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - us-central1-aPer l'elenco completo dei campi supportati in StorageClass, consulta la documentazione di riferimento del driver CSI di Managed Lustre.
Crea la classe StorageClass eseguendo questo comando:
kubectl apply -f lustre-class.yaml
Usa un oggetto PersistentVolumeClaim per accedere al volume
Questa sezione mostra come creare una risorsa PersistentVolumeClaim che fa riferimento alla classe di archiviazione del driver CSI di Managed Lustre.
Salva il seguente manifest in un file denominato
lustre-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lustre-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 9000Gi storageClassName: lustre-classPer l'elenco completo dei campi supportati in PersistentVolumeClaim, consulta la documentazione di riferimento del driver CSI di Managed Lustre.
Crea l'oggetto PersistentVolumeClaim eseguendo questo comando:
kubectl apply -f lustre-pvc.yaml
Crea un workload per utilizzare il volume
Questa sezione mostra un esempio di come creare un pod che utilizza la risorsa PersistentVolumeClaim creata in precedenza.
Più pod possono condividere la stessa risorsa PersistentVolumeClaim.
Salva il seguente manifest in un file denominato
my-pod.yaml.apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: lustre-volume mountPath: /data volumes: - name: lustre-volume persistentVolumeClaim: claimName: lustre-pvcApplica il manifest al cluster.
kubectl apply -f my-pod.yamlVerifica che il pod sia in esecuzione. Il pod viene eseguito dopo il provisioning del PersistentVolumeClaim. Il completamento di questa operazione potrebbe richiedere alcuni minuti.
kubectl get podsL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 11s
Utilizza fsGroup con i volumi Managed Lustre
Puoi modificare la proprietà del gruppo della directory di livello root del file system montato in modo che corrisponda a un fsGroup richiesto dall'utente specificato nel SecurityContext del pod. fsGroup non modifica in modo ricorsivo la proprietà dell'intero file system Managed Lustre montato; viene interessata solo la directory root del punto di montaggio.
Risoluzione dei problemi
Per indicazioni sulla risoluzione dei problemi, consulta la pagina Risoluzione dei problemi nella documentazione di Managed Lustre.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi, elimina le risorse di archiviazione che hai creato in questa guida.
Elimina il pod e il PersistentVolumeClaim.
kubectl delete pod my-pod kubectl delete pvc lustre-pvcControlla lo stato del PersistentVolume.
kubectl get pvL'output è simile al seguente:
No resources foundL'eliminazione completa dell'istanza Managed Lustre sottostante potrebbe richiedere alcuni minuti.