Accede a instancias existentes de Managed Lustre en GKE con el controlador de CSI de Managed Lustre

En esta guía, se describe cómo puedes conectarte a una instancia de Managed Lustre existente con el controlador de CSI de Managed Lustre. Esto te permite acceder a instancias de Managed Lustre existentes como volúmenes para tus cargas de trabajo con estado, de una manera controlada y predecible.

Compatibilidad con varias NIC para redes de alto rendimiento

En el caso de los clústeres de GKE que ejecutan la versión 1.35.2-gke.1842000 o versiones posteriores, el controlador de CSI de Managed Lustre está habilitado de forma predeterminada para usar todas las tarjetas de interfaz de red (NIC) disponibles para aumentar la capacidad de procesamiento. Esta compatibilidad agrega ancho de banda mediante la propagación del tráfico de almacenamiento de TCP en tus interfaces de red.

Para usar la compatibilidad con varias NIC, tus nodos deben cumplir con los siguientes requisitos:

  • NIC estándar para TCP: Tus nodos deben usar NIC estándar, como la NIC virtual de Google (gVNIC) o VirtIO-Net, para controlar el tráfico de almacenamiento de TCP.
  • Misma VPC: Todas las NIC estándar deben residir en la misma red de VPC.
  • Consideraciones de RDMA: Tus nodos también pueden tener NIC de RDMA conectadas; sin embargo, el controlador de CSI de Managed Lustre solo usa las NIC estándar para el tráfico de almacenamiento de TCP.

Si deseas inhabilitar la compatibilidad con varias NIC, consulta Inhabilita varias NIC para Lustre.

Puertos de comunicación de Lustre

El controlador de CSI de Managed Lustre para GKE usa diferentes puertos para la comunicación con instancias de Managed Lustre, según la versión del clúster de GKE y las configuraciones existentes de Managed Lustre.

  • Puerto predeterminado (recomendado): Para los clústeres de GKE nuevos que ejecutan la versión 1.33.2-gke.4780000 o versiones posteriores, el controlador usa el puerto 988 para la comunicación de Lustre de forma predeterminada.

  • Puerto heredado: Usa el puerto 6988 agregando la marca --enable-legacy-lustre-port a tus comandos de gcloud en las siguientes situaciones:

    • Versiones anteriores de GKE: Si tu clúster de GKE ejecuta una versión anterior a 1.33.2-gke.4780000, la marca --enable-legacy-lustre-port soluciona un conflicto de puertos con gke-metadata-server en los nodos de GKE.
    • Instancias de Lustre existentes: Si te conectas a una instancia de Managed Lustre existente que se creó con la marca gke-support-enabled, debes incluir --enable-legacy-lustre-port en tus comandos de gcloud, independientemente de la versión del clúster. Sin esta marca, tu clúster de GKE no podrá activar la instancia de Lustre existente. Para obtener información sobre la marca gke-support-enabled, consulta la descripción de las marcas opcionales en Crea una instancia.

Puedes configurar los clústeres nuevos y existentes para que usen el puerto predeterminado 988 o el puerto heredado 6988.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Cloud Managed Lustre y la API de Google Kubernetes Engine.
  • Habilita las APIs
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si instalaste gcloud CLI anteriormente, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.

Configura variables de entorno

Configura las siguientes variables de entorno:

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

Reemplaza lo siguiente:

Configura el controlador de CSI de Managed Lustre

En esta sección, se explica cómo habilitar y inhabilitar el controlador de CSI de Managed Lustre.

Habilita el controlador de CSI de Managed Lustre en un clúster de GKE nuevo

En las siguientes secciones, se describe cómo habilitar el controlador de CSI de Managed Lustre en un clúster de GKE nuevo.

Usa el puerto predeterminado 988

Para habilitar el controlador de CSI de Managed Lustre cuando creas un clúster de GKE nuevo que ejecuta la versión 1.33.2-gke.4780000 o versiones posteriores, ejecuta el siguiente comando:

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --enable-lustre-csi-driver

Estándar

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --addons=LustreCsiDriver

Usa el puerto heredado 6988

Para habilitar el controlador de CSI de Managed Lustre cuando creas un clúster de GKE nuevo que ejecuta una versión anterior a 1.33.2-gke.4780000, ejecuta el siguiente 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

Estándar

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

Habilita el controlador de CSI de Managed Lustre en clústeres de GKE existentes

En las siguientes secciones, se describe cómo habilitar el controlador de CSI de Managed Lustre en clústeres de GKE existentes.

Usa el puerto predeterminado 988

Para habilitar el controlador de CSI de Managed Lustre en un clúster de GKE existente que ejecuta la versión 1.33.2-gke.4780000 o versiones posteriores, ejecuta el siguiente comando:

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

Usa el puerto heredado 6988

Para habilitar el controlador de CSI de Managed Lustre en un clúster de GKE existente, es posible que debas usar el puerto heredado 6988 agregando la marca --enable-legacy-lustre-port. Esta marca es obligatoria en las siguientes situaciones:

  • Si tu clúster de GKE se ejecuta en una versión anterior a 1.33.2-gke.4780000.
  • Si deseas conectar este clúster a una instancia de Managed Lustre existente que se creó con la gke-support-enabled marca.

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

Se requiere la actualización de nodos en clústeres existentes

Habilitar el controlador de CSI de Managed Lustre en clústeres existentes puede activar la recreación de nodos para actualizar los módulos del kernel necesarios para el cliente de Managed Lustre. Para obtener disponibilidad inmediata, te recomendamos que actualices los grupos de nodos de forma manual.

Los clústeres de GKE en un canal de versiones se actualizan según su implementación programada, que puede tardar varias semanas según tu período de mantenimiento. Si usas una versión estática de GKE, debes actualizar los grupos de nodos de forma manual.

Hasta que se complete la actualización del nodo, es posible que el Pod del controlador de CSI se bloquee en los nodos pendientes de actualización. Si ves un error Operation not permitted en los registros del Pod del controlador de CSI, esto indica que se requiere la actualización o la recreación del nodo.

Después de la actualización del grupo de nodos, es posible que los nodos de CPU parezcan usar una imagen de GPU en la Google Cloud consola o en el resultado de la CLI. Se espera que esto suceda. La imagen de GPU se reutiliza en los nodos de CPU para instalar de forma segura los módulos del kernel de Managed Lustre. No se te cobrará por el uso de GPU.

Crea un grupo de nodos con varias NIC (opcional)

Para usar redes de alto rendimiento, debes crear un grupo de nodos con un tipo de instancia que admita varias interfaces de red. La compatibilidad con varias NIC está habilitada de forma predeterminada en los clústeres de GKE que ejecutan la versión 1.35.2-gke.1842000 o versiones posteriores. Asegúrate de que tus interfaces de red secundarias residan en la misma red de VPC que tu interfaz principal.

Ejecuta el siguiente 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

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es el nombre de tu grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster
  • LOCATION: la región o zona de tu clúster
  • MACHINE_TYPE: el tipo de máquina para el grupo de nodos, como a3-megagpu-8g, que se usa con frecuencia con varias NIC para un alto rendimiento La función de varias NIC es compatible con cualquier tipo de máquina.
  • NETWORK_NAME: el nombre de la red de VPC
  • SECONDARY_SUBNET: el nombre de la subred secundaria

Inhabilita varias NIC en Lustre

Si bien se recomienda la compatibilidad con varias NIC para las cargas de trabajo de alto rendimiento, es posible que desees inhabilitarla en situaciones específicas. Por ejemplo, es posible que no desees propagar el tráfico de Lustre en todas las interfaces de hardware disponibles o que necesites aislar los problemas de conectividad a una sola ruta de red para solucionar problemas.

Nota: Si inhabilitas la compatibilidad con varias NIC en los nodos en ejecución, es posible que debas volver a crear o actualizar de forma manual los grupos de nodos para que se aplique este cambio.

Para un clúster

Para inhabilitar las redes de alto rendimiento para todo el clúster, usa la marca --disable-multi-nic-lustre cuando crees o actualices el clúster. Por ejemplo:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --disable-multi-nic-lustre

Reemplaza lo siguiente:

  • CLUSTER_NAME: el nombre del clúster
  • LOCATION: la región o zona de tu clúster

Para un grupo de nodos

Para inhabilitar las redes de alto rendimiento para un grupo de nodos específico, actualiza el grupo de nodos para establecer la etiqueta lustre.csi.storage.gke.io/multi-nic en false:

gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es el nombre de tu grupo de nodos.
  • CLUSTER_NAME: el nombre del clúster
  • LOCATION: la zona de tu clúster

Inhabilita el controlador de CSI de Managed Lustre

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

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

Después de inhabilitar el controlador de CSI, GKE vuelve a crear automáticamente los nodos y desinstala los módulos del kernel de Managed Lustre.

Accede a una instancia de Managed Lustre existente con el controlador de CSI de Managed Lustre

Si ya aprovisionaste 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 típico para acceder a una instancia de Managed Lustre existente con el controlador de CSI de Managed Lustre:

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

Crea un PersistentVolume

  1. Para ubicar tu instancia de Managed Lustre, ejecuta el siguiente comando.

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

    El resultado debería ser similar al siguiente. Antes de continuar con el siguiente paso, asegúrate de anotar los campos Nombre de la instancia de Managed Lustre, filesystem y mountPoint.

    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 como 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
    

    Reemplaza lo siguiente:

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

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

  3. Ejecuta el siguiente comando para crear el PersistentVolume:

    kubectl apply -f lustre-pv.yaml
    

Usa el PersistentVolumeClaim para acceder al volumen

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

En el siguiente archivo de manifiesto, se muestra un ejemplo de cómo crear un PersistentVolumeClaim en ReadWriteMany modo de acceso , que hace referencia a la StorageClass que creaste antes.

  1. Guarda el siguiente manifiesto como 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
    

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

  2. Ejecuta el siguiente comando para crear la PersistentVolumeClaim:

    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 de PersistentVolumeClaim que creaste antes.

Varios Pods pueden compartir el mismo recurso PersistentVolumeClaim.

  1. Guarda el siguiente manifiesto como 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 PersistentVolumeClaim antes de comenzar a ejecutarse. Esta operación puede tardar varios minutos en completarse.

  3. Verifica que el Pod se esté ejecutando.

    kubectl get pods
    

    Es posible que el Pod tarde unos minutos en alcanzar el estado Running.

    El resultado es similar a este:

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

Usa fsGroup con volúmenes de Managed Lustre

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

Soluciona problemas

Para obtener orientación sobre la solución de problemas, consulta la página Solución de problemas en la documentación de Managed Lustre.

Limpia

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

  1. Borra el Pod y el PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Verifica el estado de PersistentVolume. Después de borrar el Pod y el PersistentVolumeClaim, el PersistentVolume debería informar un estado "Released":

    kubectl get pv
    

    El resultado es similar a este:

    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, quita la referencia de la reclamación (claimRef):

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

    El PersistentVolume ahora debería informar un estado "Available", lo que indica que está listo para vincularse a un PersistentVolumeClaim nuevo. Verifica el estado de PersistentVolume:

    kubectl get pv
    

    El resultado es similar a este:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX           Retain         Available                                   19m
    
  4. Borra el PersistentVolume si ya no es necesario. Si ya no es necesario el PersistentVolume, bórralo:

    kubectl delete pv lustre-pv
    

    Borrar el PersistentVolume no quita la instancia de Managed Lustre subyacente.

¿Qué sigue?