Acceder a instancias de Managed Lustre en GKE mediante el controlador CSI de Managed Lustre

En esta guía se describe cómo conectarse a una instancia de Managed Lustre mediante el controlador CSI de Managed Lustre. De esta forma, puedes acceder a las instancias de Managed Lustre que ya tengas como volúmenes para tus cargas de trabajo con estado de una forma controlada y predecible.

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Cloud Managed Lustre y la API de Google Kubernetes Engine.
  • Habilitar APIs
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.
  • Para obtener información sobre las limitaciones y los requisitos, consulta el [resumen del controlador CSI].
  • Asegúrate de habilitar el controlador CSI de Lustre gestionado. Está inhabilitado de forma predeterminada en los clústeres Standard y Autopilot.

Configurar variables de entorno

Define las siguientes variables de entorno:

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export LOCATION=ZONE

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • LUSTRE_NETWORK: la red Virtual Private Cloud compartida en la que residen tanto el clúster de GKE como la instancia de Lustre gestionada.
  • ZONE: la zona geográfica de tu clúster de GKE. Por ejemplo, us-central1-a.

Configurar el controlador de CSI de Managed Lustre

En esta sección se explica cómo habilitar e inhabilitar el controlador CSI de Lustre gestionado, si es necesario.

Habilitar el controlador de CSI de Lustre gestionado en un clúster de GKE nuevo

Para habilitar el controlador CSI de Lustre gestionado al crear un clúster de GKE, sigue estos pasos:

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

Estándar

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

Habilitar el controlador de CSI de Lustre gestionado en un clúster de GKE

Si quieres habilitar el controlador de CSI de Lustre gestionado en un clúster de GKE, usa el siguiente comando:

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

Una vez que el controlador CSI de Lustre gestionado esté habilitado en tu clúster, puede que observes que se han recreado tus nodos y que los nodos de CPU parecen usar una imagen de GPU en laGoogle Cloud consola o en la salida de la CLI. Por ejemplo:

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

Este comportamiento es el esperado. La imagen de GPU se reutiliza en los nodos de CPU para instalar de forma segura los módulos del kernel de Lustre gestionado. No se te cobrará de más por el uso de la GPU.

Inhabilitar el controlador de CSI de Managed Lustre

Puedes inhabilitar el controlador CSI de Lustre gestionado en un clúster de GKE con la CLI de Google Cloud.

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

Una vez que se haya inhabilitado el controlador CSI, los nodos se volverán a crear automáticamente y los módulos del kernel de Lustre gestionado se desinstalarán de los nodos de GKE.

Acceder a una instancia de Managed Lustre con el controlador de CSI de Managed Lustre

Si ya has aprovisionado una instancia de Managed Lustre en la misma red que tu clúster de GKE, puedes seguir estas instrucciones para aprovisionar de forma estática un PersistentVolume que haga referencia a tu instancia.

En las siguientes secciones se describe el proceso habitual para acceder a una instancia de Lustre gestionada mediante el controlador CSI de Lustre gestionado:

  1. Crea un PersistentVolume que haga referencia a la instancia de Managed Lustre.
  2. Usa un PersistentVolumeClaim para acceder al volumen.
  3. Crea una carga de trabajo que consuma el volumen.

Crear un PersistentVolume

  1. Para localizar tu instancia de Lustre gestionado, ejecuta el siguiente comando.

    gcloud lustre instances list \
        --project=${PROJECT_ID} \
        --location=${LOCATION}
    

    La salida debería ser similar a la siguiente. Antes de continuar con el siguiente paso, anota los campos Nombre de la instancia de Lustre gestionada, Sistema de archivos y Punto de montaje.

    capacityGib: '9000'
    createTime: '2025-04-28T22:42:11.140825450Z'
    filesystem: testlfs
    gkeSupportEnabled: true
    mountPoint: 10.90.1.4@tcp:/testlfs
    name: projects/my-project/locations/us-central1-a/instances/my-lustre
    network: projects/my-project/global/networks/default
    perUnitStorageThroughput: '1000'
    state: ACTIVE
    updateTime: '2025-04-28T22:51:41.559098631Z'
    
  2. Guarda el siguiente manifiesto en un archivo llamado lustre-pv.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: 9000Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      claimRef:
        namespace: default
        name: lustre-pvc
      csi:
        driver: lustre.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME"
        volumeAttributes:
          ip: IP_ADDRESS
          filesystem: FILESYSTEM
    

    Haz los cambios siguientes:

    • storageClassName: el nombre de tu StorageClass. El valor puede ser una cadena vacía, pero debe cumplir las especificaciones de tu PersistentVolumeClaim.
    • volumeHandle: el identificador de este volumen.
      • PROJECT_ID: el ID del proyecto. Google Cloud
      • LOCATION: la ubicación zonal de tu instancia de Lustre. Debes especificar una zona admitida para el controlador de CSI de Lustre gestionado.
      • INSTANCE_NAME: el nombre de tu instancia de Lustre.
    • ip: la dirección IP de tu instancia de Lustre. Puedes obtenerlo del campo mountPoint en la salida del comando anterior.
    • filesystem: el nombre del sistema de archivos de tu instancia de Managed Lustre.

    Para ver la lista completa de los campos admitidos en el objeto PersistentVolume, consulta la documentación de referencia del controlador CSI de Lustre gestionado.

  3. Para crear el PersistentVolume, ejecuta este comando:

    kubectl apply -f lustre-pv.yaml
    

Usa PersistentVolumeClaim para acceder al volumen

Puedes crear un recurso PersistentVolumeClaim que haga referencia a la StorageClass del controlador CSI de Lustre gestionado.

El siguiente archivo de manifiesto muestra un ejemplo de cómo crear un PersistentVolumeClaim en el ReadWriteMany modo de acceso , que hace referencia al StorageClass que ha creado anteriormente.

  1. Guarda el siguiente manifiesto en un archivo llamado lustre-pvc.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lustre-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: "STORAGE_CLASS_NAME"
      volumeName: lustre-pv
      resources:
        requests:
          storage: STORAGE_SIZE
    

    Sustituye STORAGE_SIZE por el tamaño de almacenamiento. Por ejemplo, 9000Gi. Debe coincidir con la especificación de tu PersistentVolume.

  2. Para crear el PersistentVolumeClaim, ejecuta este comando:

    kubectl create -f lustre-pvc.yaml
    

Crea una carga de trabajo que consuma el volumen

En esta sección se muestra cómo crear un pod que consuma el recurso PersistentVolumeClaim que has creado anteriormente.

Varios pods pueden compartir el mismo recurso PersistentVolumeClaim.

  1. Guarda el siguiente manifiesto en un archivo llamado 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. Ejecuta el siguiente comando para aplicar el manifiesto al clúster:

    kubectl apply -f my-pod.yaml
    

    El pod espera hasta que GKE aprovisione el PersistentVolumeClaim antes de empezar a ejecutarse. Esta operación puede tardar varios minutos en completarse.

  3. Comprueba que el pod se está ejecutando:

    kubectl get pods
    

    El Pod puede tardar unos minutos en alcanzar el estado Running.

    El resultado debería ser similar al siguiente:

    NAME           READY   STATUS    RESTARTS   AGE
    my-pod         1/1     Running   0          11s
    

Usar fsGroup con volúmenes de Managed Lustre

Puedes cambiar la propiedad del grupo del directorio de nivel raíz del sistema de archivos montado para que coincida con un fsGroup solicitado por el usuario y especificado en el SecurityContext del pod.

Solución de problemas

Para obtener instrucciones sobre cómo solucionar problemas, consulta la página de solución de problemas de la documentación de Lustre gestionado.

Limpieza

Para evitar que se apliquen cargos en tu cuenta de Google Cloud , elimina los recursos de almacenamiento que has creado en esta guía.

  1. Elimina el pod y PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Comprueba el estado de PersistentVolume. Después de eliminar el pod y PersistentVolumeClaim, el PersistentVolume debería mostrar el estado "Released":

    kubectl get pv
    

    El resultado debería ser similar al siguiente:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                 STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX            Retain        Released   default/preprov-pvc                           2m28s
    
  3. Reutiliza el PersistentVolume. Para reutilizar el PersistentVolume, elimina la referencia de reclamación (claimRef):

    kubectl patch pv lustre-pv --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'
    

    El PersistentVolume ahora debería mostrar el estado "Available" (Disponible), lo que indica que está listo para enlazarse a un nuevo PersistentVolumeClaim. Comprueba el estado de PersistentVolume:

    kubectl get pv
    

    El resultado debería ser similar al siguiente:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX           Retain         Available                                   19m
    
  4. Elimina el PersistentVolume si ya no lo necesitas. Si ya no necesitas el PersistentVolume, elimínalo:

    kubectl delete pv lustre-pv
    

    Al eliminar el PersistentVolume, no se elimina la instancia de Lustre gestionada subyacente.

Siguientes pasos