Accedi alle istanze Managed Lustre su GKE con il driver CSI Managed Lustre

Questa guida descrive come creare un nuovo volume Kubernetes supportato dal driver Managed Lustre CSI in GKE con provisioning dinamico. Il driver Managed Lustre CSI ti consente di creare spazio di archiviazione supportato da istanze Managed Lustre on demand e di accedervi come volumi per i carichi di lavoro 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 Managed Lustre CSI è abilitato per impostazione predefinita per utilizzare tutte le schede di interfaccia di rete (NIC) disponibili per una maggiore velocità effettiva. Questo supporto aggrega la larghezza di banda distribuendo il traffico di archiviazione TCP sulle 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 risiedere nella stessa rete VPC.
  • Considerazioni su RDMA: ai nodi possono essere collegate anche NIC RDMA; tuttavia, il driver Managed Lustre CSI utilizza solo le NIC standard per il traffico di archiviazione TCP.

Se vuoi disabilitare il supporto multi-NIC, consulta Disabilitare multi-NIC per Lustre.

Porte di comunicazione Lustre

Il driver GKE Managed Lustre CSI utilizza porte diverse per la comunicazione con le istanze Managed Lustre, a seconda della versione del cluster GKE e delle configurazioni Managed Lustre esistenti.

  • Porta predefinita (consigliata): per i nuovi cluster GKE che eseguono la versione 1.33.2-gke.4780000 o successive, il driver utilizza per impostazione predefinita la porta 988 per la comunicazione Lustre.

  • Porta legacy (ritirata): utilizza la porta 6988 aggiungendo il flag --enable-legacy-lustre-port ai comandi gcloud nei seguenti scenari:

    • Versioni GKE precedenti: se il cluster GKE esegue una versione precedente alla 1.33.2-gke.4780000, il flag --enable-legacy-lustre-port risolve un conflitto di porte con gke-metadata-server sui 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-port nei comandi gcloud, indipendentemente dalla versione del cluster. Senza questo flag, il cluster GKE non riuscirà a montare l'istanza Lustre esistente.

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 Kubernetes Engine.
  • Abilita le API
  • Se vuoi 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 gcloud components update comando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

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 risiedono 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 cluster GKE; ad esempio, us-central1-a.
  • CLUSTER_VERSION: la versione del cluster GKE.

Configura una rete VPC

Devi specificare la stessa rete VPC quando crei l'istanza Managed Lustre e i cluster GKE o quando ti connetti tramite Network Connectivity Center se utilizzi una rete VPC con peering.

  1. Per abilitare il networking di servizio, esegui il seguente comando:

    gcloud services enable servicenetworking.googleapis.com \
        --project=${PROJECT_ID}
    
  2. Crea una rete VPC. L'impostazione del flag --mtu su 8896 comporta un aumento delle prestazioni del 10%.

    gcloud compute networks create ${NETWORK_NAME} \
        --subnet-mode=auto --project=${PROJECT_ID} \
        --mtu=8896
    
  3. Crea 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}
    
  4. Recupera l'intervallo CIDR associato all'intervallo creato nel passaggio precedente.

    CIDR_RANGE=$(
      gcloud compute addresses describe ${IP_RANGE_NAME} \
          --global  \
          --format="value[separator=/](address, prefixLength)" \
          --project=${PROJECT_ID}
    )
    
  5. Crea una regola firewall per consentire il traffico TCP dall'intervallo di indirizzi IP creato.

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
        --allow=tcp:988,tcp:6988 \
        --network=${NETWORK_NAME} \
        --source-ranges=${CIDR_RANGE} \
        --project=${PROJECT_ID}
    
  6. Per configurare il peering di rete per il tuo progetto, verifica di disporre delle autorizzazioni IAM necessarie, in particolare del ruolo compute.networkAdmin o servicenetworking.networksAdmin.

    1. Vai a Google Cloud console > IAM e amministrazione, quindi cerca l'entità Project Owner.
    2. Fai clic sull'icona a forma di matita, quindi su + AGGIUNGI UN ALTRO RUOLO.
    3. Seleziona Amministratore rete Compute o Amministratore networking di servizio.
    4. Fai clic su Salva.
  7. 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 Managed Lustre CSI

Questa sezione spiega come abilitare e disabilitare il driver Managed Lustre CSI.

Abilita il driver Managed Lustre CSI su un nuovo cluster GKE

Le sezioni seguenti descrivono come abilitare il driver Managed Lustre CSI su un nuovo cluster GKE.

Utilizza la porta predefinita 988

Per abilitare il driver Managed Lustre CSI durante la creazione di un nuovo cluster GKE che esegue la versione 1.33.2-gke.4780000 o successive, esegui il seguente 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 Managed Lustre CSI durante la creazione di un nuovo cluster GKE che esegue una versione precedente alla 1.33.2-gke.4780000, esegui il seguente 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 Managed Lustre CSI sui cluster GKE esistenti

Le sezioni seguenti descrivono come abilitare il driver Managed Lustre CSI sui cluster GKE esistenti.

Utilizza la porta predefinita 988

Per abilitare il driver Managed Lustre CSI su un cluster GKE esistente che esegue la versione 1.33.2-gke.4780000 o successive, esegui il seguente comando:

  gcloud container clusters update ${CLUSTER_NAME} \
      --location=${LOCATION} \
      --update-addons=LustreCsiDriver=ENABLED

Utilizza la porta legacy 6988

Per abilitare il driver Managed Lustre CSI su un cluster GKE esistente, potrebbe essere necessario utilizzare la porta legacy 6988 aggiungendo il flag --enable-legacy-lustre-port. Questo flag è obbligatorio nei seguenti scenari:

  • Se il cluster GKE esegue una versione precedente a 1.33.2-gke.4780000.
  • Se intendi connettere questo cluster a un'istanza Managed Lustre esistente creata con il gke-support-enabled flag.

    gcloud container clusters update ${CLUSTER_NAME} \
        --location=${LOCATION} \
        --enable-legacy-lustre-port
    

È necessario l'upgrade dei nodi sui cluster esistenti

L'abilitazione del driver Managed Lustre CSI sui cluster esistenti può attivare la ricreazione dei nodi per aggiornare i moduli kernel necessari per il client Managed Lustre. Per la disponibilità immediata, ti consigliamo di eseguire manualmente l'upgrade dei node pool.

I cluster GKE su un canale di rilascio vengono sottoposti ad upgrade in base al rollout pianificato, che può richiedere diverse settimane a seconda del periodo di manutenzione. Se utilizzi una versione GKE statica, devi eseguire manualmente l'upgrade dei node pool.

Fino al completamento dell'upgrade dei nodi, il pod del driver CSI potrebbe entrare in un loop di arresto anomalo sui nodi in attesa di aggiornamento. Se nei log dei pod del driver CSI viene visualizzato un errore Operation not permitted, significa che è necessario eseguire l'upgrade o la ricreazione dei nodi.

Dopo l'upgrade del pool di nodi, i nodi CPU potrebbero sembrare utilizzare un'immagine GPU nell'output della Google Cloud console o della CLI. Questo comportamento è previsto. L'immagine GPU viene riutilizzata sui nodi CPU per installare in modo sicuro i moduli kernel 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 sui 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 esempio a3-megagpu-8g, spesso utilizzato con multi-NIC per prestazioni elevate. Multi-NIC è supportato 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 carichi di lavoro ad alte prestazioni, potresti volerlo disabilitare in scenari specifici. Ad esempio, potresti non voler distribuire il traffico Lustre su tutte le interfacce hardware disponibili oppure potresti dover isolare i problemi di connettività a un singolo percorso di rete per la risoluzione dei problemi.

Nota: se disabiliti il supporto multi-NIC sui nodi in esecuzione, potrebbe essere necessario ricreare o eseguire manualmente l'upgrade dei node pool affinché questa modifica abbia effetto.

Per un cluster

Per disabilitare il networking ad alte prestazioni per l'intero cluster, utilizza il flag --disable-multi-nic-lustre quando crei o aggiorni il 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 disabilitare 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 Managed Lustre CSI

Puoi disabilitare il driver Managed Lustre CSI su un cluster GKE esistente utilizzando Google Cloud CLI.

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --update-addons=LustreCsiDriver=DISABLED

Dopo aver disabilitato il driver CSI, GKE ricrea automaticamente i nodi e disinstalla i moduli kernel Managed Lustre.

Crea un nuovo volume utilizzando il driver Managed Lustre CSI

Le sezioni seguenti descrivono la procedura tipica per la creazione di un volume Kubernetes supportato da un'istanza Managed Lustre in GKE:

  1. Crea un oggetto StorageClass.
  2. Usa un oggetto PersistentVolumeClaim per accedere al volume.
  3. Crea un carico di lavoro che utilizza il volume.

Crea un oggetto StorageClass

Quando il driver Managed Lustre CSI è abilitato, GKE crea automaticamente un oggetto StorageClass per il provisioning delle istanze Managed Lustre. L'oggetto StorageClass dipende dal livello di prestazioni di Managed Lustre , ed è uno dei seguenti:

  • lustre-rwx-125mbps-per-tib
  • lustre-rwx-250mbps-per-tib
  • lustre-rwx-500mbps-per-tib
  • lustre-rwx-1000mbps-per-tib

GKE fornisce un oggetto StorageClass predefinito per ogni livello di prestazioni Managed Lustre supportato. Questo semplifica il provisioning dinamico delle istanze Managed Lustre, in quanto puoi utilizzare gli oggetti StorageClass integrati senza doverne definire di tuoi.

Per i cluster zonali, il driver CSI esegue il provisioning delle istanze Managed Lustre nella stessa zona del cluster. Per i cluster regionali, esegue il provisioning dell'istanza in una delle zone all'interno della regione.

L'esempio seguente mostra come creare un oggetto StorageClass personalizzato con requisiti di topologia specifici:

  1. 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-a
    

    Per l'elenco completo dei campi supportati in StorageClass, consulta la documentazione di riferimento del driver Managed Lustre CSI.

  2. Crea l'oggetto 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 all'oggetto StorageClass del driver Managed Lustre CSI.

  1. 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-class
    

    Per l'elenco completo dei campi supportati in PersistentVolumeClaim, consulta la documentazione di riferimento del driver Managed Lustre CSI.

  2. Crea l'oggetto PersistentVolumeClaim eseguendo questo comando:

    kubectl apply -f lustre-pvc.yaml
    

Crea un carico di lavoro 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.

  1. 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-pvc
    
  2. Applica il manifest al cluster.

    kubectl apply -f my-pod.yaml
    
  3. Verifica che il pod sia in esecuzione. Il pod viene eseguito dopo il provisioning di PersistentVolumeClaim. Il completamento di questa operazione potrebbe richiedere alcuni minuti.

    kubectl get pods
    

    L'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 in SecurityContext del pod. fsGroup non modificherà in modo ricorsivo la proprietà dell'intero file system Managed Lustre montato; solo la directory root del punto di montaggio è interessata.

Risoluzione dei problemi

Per indicazioni sulla risoluzione dei problemi, consulta la pagina Risoluzione dei problemi nella documentazione di Managed Lustre.

Libera spazio

Per evitare che ti vengano addebitati dei costi, elimina le risorse di archiviazione che hai creato in questa guida. Google Cloud

  1. Elimina il pod e l'oggetto PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Controlla lo stato di PersistentVolume.

    kubectl get pv
    

    L'output è simile al seguente:

    No resources found
    

    Potrebbero essere necessari alcuni minuti prima che l'istanza Managed Lustre sottostante venga eliminata completamente.

Passaggi successivi