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 CSI Managed Lustre in GKE con il provisioning dinamico. Il driver CSI Managed Lustre consente di creare spazio di archiviazione supportato da istanze Managed Lustre on demand e di accedervi come volumi per i tuoi workload stateful.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Cloud Managed Lustre e l'API Google 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 gcloud components update.

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • PROJECT_ID: il tuo Trusted Cloud by S3NS 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 esempio, us-central1-a.

Configura una rete VPC

Devi specificare la stessa rete VPC quando crei l'istanza Managed Lustre e i cluster GKE.

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

    gcloud services enable servicenetworking.googleapis.com \
        --project=${PROJECT_ID}
    
  2. Crea una rete VPC. Se imposti il flag --mtu su 8896, il rendimento aumenta 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. Ottieni 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}
    )
    
  5. 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}
    
  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 alla Trusted Cloud console > IAM e amministrazione, quindi cerca l'entità proprietario del progetto.
    2. Fai clic sull'icona a forma di matita e poi su + AGGIUNGI UN ALTRO RUOLO.
    3. Seleziona Amministratore di rete Compute o Amministratore di Service Networking.
    4. Fai clic su Salva.
  7. Collega 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 Managed Lustre

Questa sezione spiega come attivare e disattivare il driver CSI Lustre gestito, se necessario.

Abilita il driver CSI di Managed Lustre su un nuovo cluster GKE

Per abilitare il driver CSI Lustre gestito durante la creazione di un nuovo cluster GKE, segui questi passaggi:

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --enable-lustre-csi-driver \
    --enable-legacy-lustre-port

Standard

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --addons=LustreCsiDriver \
    --enable-legacy-lustre-port

Quando viene specificato il flag enable-legacy-lustre-port, il driver CSI configura LNet (il livello di rete virtuale per il modulo kernel Managed Lustre) in modo che utilizzi la porta 6988. Questo flag è necessario per risolvere un conflitto di porte con gke-metadata-server sui nodi GKE.

Abilita il driver CSI di Managed Lustre su un cluster GKE esistente

Per abilitare il driver CSI Lustre gestito su un cluster GKE esistente, utilizza il seguente comando:

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

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

I cluster GKE su un canale di rilascio vengono aggiornati in base all'implementazione pianificata, che può richiedere diverse settimane a seconda della finestra di manutenzione. Se utilizzi una versione GKE statica, devi eseguire l'upgrade manualmente dei tuoi node pool.

Dopo l'upgrade del pool di nodi, i nodi CPU potrebbero sembrare utilizzare un'immagine GPU nell'output della consoleTrusted Cloud o della CLI. Ad esempio:

config:
  imageType: COS_CONTAINERD
  nodeImageConfig:
    image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda

Si tratta di un comportamento normale. L'immagine GPU viene riutilizzata sui nodi CPU per installare in modo sicuro i moduli del kernel Managed Lustre. Non ti verrà addebitato alcun costo per l'utilizzo della GPU.

Disabilita il driver CSI Lustre gestito

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 del kernel Lustre gestito.

Crea un nuovo volume utilizzando il driver CSI Lustre gestito

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

  1. Crea una StorageClass.
  2. Usa un oggetto PersistentVolumeClaim per accedere al volume.
  3. Crea un workload che utilizzi il volume.

Crea una StorageClass

Quando il driver CSI Lustre gestito è abilitato, GKE crea automaticamente una StorageClass per il provisioning delle istanze Lustre gestite. StorageClass dipende dal livello di prestazioni di Managed Lustre. GKE e deve essere 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 una StorageClass predefinita per ogni livello di prestazioni Managed Lustre supportato. In questo modo viene semplificato il provisioning dinamico delle istanze Managed Lustre, in quanto puoi utilizzare le StorageClass integrate senza dover definire le tue.

Per i cluster zonali, il driver CSI esegue il provisioning delle istanze di 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 una StorageClass personalizzata 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 CSI Managed Lustre.

  2. Crea 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 a StorageClass del driver CSI Managed Lustre.

  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: 18000Gi
      storageClassName: lustre-class
    

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

  2. 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.

  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 dell'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
    

Utilizzare fsGroup con i volumi Managed Lustre

Puoi modificare la proprietà del gruppo della directory di livello radice 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; viene interessata solo la directory radice 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 Trusted Cloud by S3NS vengano addebitati costi, elimina le risorse di archiviazione che hai creato in questa guida.

  1. Elimina il pod e 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