Escala tu almacenamiento de Managed Lustre en GKE

En este documento, se describe cómo aumentar de forma dinámica la capacidad de almacenamiento de los volúmenes de Managed Lustre para tus cargas de trabajo con estado en Google Kubernetes Engine (GKE) sin interrumpir tus aplicaciones.

Por ejemplo, si tus trabajos de entrenamiento de IA o AA de larga duración tienen requisitos de almacenamiento dinámicos e impredecibles, habilita la expansión de volúmenes de Managed Lustre para aumentar la capacidad de almacenamiento de tu PersistentVolume (PV) de Managed Lustre existente.

Este documento está dirigido a administradores y operadores de plataformas, DevOps, administradores de almacenamiento e ingenieros de aprendizaje automático (AA) que administran el almacenamiento para cargas de trabajo con estado en GKE.

Cuando expandes un volumen, tus costos aumentan en función de la nueva capacidad, que es mayor, según los Cloud de Confiance by S3NS precios estándar de Managed Lustre.

Antes de comenzar

Prepara el entorno.

Requisitos

Asegúrate de cumplir con los siguientes requisitos:

  • Debes tener un clúster de GKE con la versión 1.35.0-gke.2331000 o una posterior.
  • Debes habilitar el controlador de CSI de Managed Lustre en un clúster existente. El controlador está inhabilitado de forma predeterminada en los clústeres de Standard y Autopilot.

Limitaciones

  • Solo puedes aumentar el tamaño de un volumen existente, no puedes disminuirlo.
  • No puedes usar la expansión de volumen con el modo de acceso ReadOnlyMany.
  • Cuando cambies el tamaño de los volúmenes de Lustre, sigue los límites de capacidad mínima y máxima, y los tamaños de los pasos que establece el nivel de rendimiento de tu volumen. Para obtener más información, consulta Consideraciones sobre el rendimiento.
  • Especifica los tamaños de los volúmenes de Lustre en GiB como múltiplos de 1,000. Kubernetes traduce unidades como Ti en valores binarios (por ejemplo, 18 Ti se interpreta como 18,432 GiB), lo que hace que la API de Lustre rechace la solicitud.

Habilita la expansión de volúmenes para una StorageClass

  1. Verifica si tu StorageClass admite la expansión de volúmenes:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    Reemplaza STORAGECLASS_NAME por el nombre de tu StorageClass.

    Si el resultado del comando no genera nada o devuelve false, debes actualizar de forma explícita la configuración de StorageClass para permitir la expansión.

  2. Abre la configuración de StorageClass para editarla:

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. En el editor, agrega el campo allowVolumeExpansion: true a la configuración de StorageClass:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-sc
    provisioner: lustre.csi.storage.gke.io
    ...
    allowVolumeExpansion: true

Expande una PersistentVolumeClaim

Para iniciar la expansión de volumen, edita tu PersistentVolumeClaim (PVC) y solicita un aumento del tamaño del volumen.

  1. Identifica el tamaño nuevo y válido para la expansión, como se describe en Determina los tamaños de expansión válidos.
  2. Abre la configuración de PVC para editarla:

    kubectl edit pvc PVC_NAME
    

    Reemplaza PVC_NAME por el nombre de tu PVC.

  3. En el editor, actualiza el campo spec.resources.requests.storage con el tamaño de expansión válido. Por ejemplo, para expandir un volumen de 9000Gi a 18000Gi, modifica el campo storage de la siguiente manera:

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

Verifica la expansión del volumen

  1. Supervisa el progreso de la expansión revisando los eventos de la PVC:

    kubectl describe pvc PVC_NAME
    

    Los siguientes eventos en el resultado de la PVC indican el progreso o el resultado actual de la solicitud de expansión del volumen:

    • ExternalExpanding: Indica que Kubernetes está esperando que el external-resizer expanda la PVC.
    • Resizing: Indica que la operación de cambio de tamaño está en curso. Esta operación puede tardar hasta 90 minutos en el caso de aumentos de capacidad más grandes.
    • VolumeResizeSuccessful: Confirma que el volumen se expandió correctamente.
    • VolumeResizeFailed: Indica que se produjo un error. El mensaje del evento contiene detalles de la API de Google Cloud Managed Lustre. Este estado puede ser transitorio y resolverse por sí solo.
  2. Una vez que se complete la expansión, verifica la configuración actualizada de la PVC:

    kubectl get pvc PVC_NAME -o yaml
    
  3. Asegúrate de que el campo status.capacity refleje el nuevo tamaño aumentado.

Si tienes algún problema durante el proceso de expansión, consulta Solución de problemas.

Determina los tamaños de expansión válidos

Para determinar el nuevo tamaño del volumen, primero identifica el nivel de rendimiento del volumen y el tamaño del paso correspondiente.

Identifica el nivel de rendimiento del volumen

Puedes encontrar el nivel de rendimiento de tu volumen con cualquiera de las siguientes opciones:

StorageClass

Ejecuta el siguiente comando y busca el valor perUnitStorageThroughput (por ejemplo, 1000). Este valor indica el nivel de rendimiento en MBps por TiB.

kubectl get sc STORAGECLASS_NAME -o yaml

Reemplaza STORAGECLASS_NAME por el nombre de tu StorageClass.

Instancia de Lustre

Para identificar el nivel de rendimiento de tu volumen, verifica directamente las propiedades de la instancia de Managed Lustre subyacente:

  1. Busca el nombre del PV vinculado a tu PVC:

    kubectl get pvc PVC_NAME
    

    Reemplaza PVC_NAME por el nombre de tu PVC.

    El resultado es similar al siguiente. Toma nota del nombre del PV en la columna VOLUME, por ejemplo, pv-lustre.

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-lustre   Bound    pv-lustre   9000Gi     RWX            lustre-rwx     <unset>                 26m
    
  2. Busca la ubicación del volumen y el nombre de la instancia en el campo volumeHandle:

    kubectl get pv PV_NAME -o yaml
    

    Reemplaza PV_NAME por el nombre del PV del paso anterior.

    El valor volumeHandle tiene el formato PROJECT_ID/LOCATION/INSTANCE_NAME. Toma nota de INSTANCE_NAME y LOCATION para el siguiente paso.

  3. Para verificar las propiedades del nivel de rendimiento, describe la instancia de Managed Lustre:

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    Reemplaza INSTANCE_NAME y LOCATION por los valores del paso anterior.

    En el resultado, busca el campo perUnitStorageThroughput. Este valor indica el nivel de rendimiento en MBps por TiB.

Límites de capacidad y tamaños de los pasos

Después de identificar el nivel de rendimiento, consulta la siguiente tabla para encontrar los límites de capacidad asociados y el tamaño del paso requerido.

Nivel (perUnitStorageThroughput) Capacidad mínima Capacidad máxima Tamaño del paso
1,000 MBps por TiB 9,000 GiB 954,000 GiB (~1 PiB) 9,000 GiB
500 MBps por TiB 18,000 GiB 1,908,000 GiB (~2 PiB) 18,000 GiB
250 MBps por TiB 36,000 GiB 3,816,000 GiB (~4 PiB) 36,000 GiB
125 MBps por TiB 72,000 GiB 7,632,000 GiB (~8 PiB) 72,000 GiB

Los volúmenes se deben aumentar según el tamaño del paso asignado a su nivel. Cualquier aumento de capacidad debe ser un múltiplo de ese tamaño de paso específico. Por ejemplo, si tu volumen de nivel de 1,000 MBps tiene una capacidad de 9,000 GiB, puedes aumentarlo a 18,000 GiB, 27,000 GiB y otros múltiplos.

Soluciona problemas

En esta sección, se proporcionan soluciones para problemas comunes que puedes encontrar cuando expandes volúmenes de Lustre.

La expansión falla con un error "Argumento no válido"

Síntoma

  • La PVC entra en un estado Resizing, pero luego falla.
  • Cuando ejecutas el comando kubectl describe pvc PVC_NAME, ves un error similar a VolumeResizeFailed: rpc error: code = InvalidArgument desc = ....

Causa

Por lo general, este error significa que el tamaño de almacenamiento solicitado no es válido para el nivel de rendimiento del volumen de Lustre por uno de los siguientes motivos:

  • El tamaño solicitado no es un múltiplo del tamaño del paso requerido para el nivel.
  • El tamaño solicitado es inferior a la capacidad mínima o superior a la capacidad máxima del nivel.

Solución

  1. Revisa los límites de capacidad y los tamaños de los pasos para encontrar los tamaños de los pasos y los límites de capacidad válidos para el nivel de rendimiento de tu volumen.
  2. Vuelve a editar la PVC para solicitar un tamaño de almacenamiento válido que cumpla con los límites de tamaño del paso y de capacidad.

La expansión falla con un "Error interno"

Síntoma

  • No se puede cambiar el tamaño de la PVC.
  • Cuando ejecutas el comando kubectl describe pvc PVC_NAME, es posible que veas un evento VolumeResizeFailed con un mensaje de error que contiene code = Internal.

Causa

Este error indica un problema con el servicio de Managed Lustre subyacente.

Solución

  1. Vuelve a intentar la expansión aplicando el manifiesto de PVC de nuevo con el tamaño nuevo solicitado. Esto podría resolver problemas transitorios del backend.
  2. Si el reintento falla, comunícate con Atención al cliente de Cloud.

La expansión se detiene en el estado "Cambiando el tamaño"

Síntoma

  • La PVC permanece en el estado Resizing durante un período prolongado (más de 30 minutos para expansiones más pequeñas o más de 90 minutos para expansiones más grandes).
  • Es posible que veas un evento VolumeResizeFailed con un mensaje de error DEADLINE_EXCEEDED.

Causa

Este problema puede ocurrir con aumentos de capacidad grandes, que pueden tardar hasta 90 minutos en completarse. Es posible que se agote el tiempo de espera del componente csi-external-resizer mientras espera que responda la API de Google Cloud Managed Lustre, aunque la operación de expansión subyacente aún esté en curso.

Solución

  • El csi-external-resizer vuelve a intentar la operación automáticamente después de un período de retirada. Sigue supervisando los eventos de PVC para detectar un evento VolumeResizeSuccessful.
  • Si la PVC permanece en el estado Resizing durante más de 90 minutos, comunícate con el equipo de Atención al cliente de Cloud.

La expansión no se inicia o se detiene en el estado ExternalExpanding

Síntoma

  • Actualizas el campo spec.resources.requests.storage en tu PVC, pero el estado de la PVC no cambia a Resizing.
  • Cuando ejecutas el comando kubectl describe pvc PVC_NAME, el registro de eventos solo muestra el estado ExternalExpanding y no avanza al estado Resizing:
Events:
  Type    Reason             Age                From             Message
  ----    ------             ----               ----             -------
  Normal  ExternalExpanding  21m (x2 over 58m)  volume_expand    waiting for an external controller to expand this PVC

Causa

Este comportamiento suele indicar uno de los siguientes problemas:

  • La StorageClass asociada con la PVC no permite la expansión de volúmenes.
  • Hay un problema con el contenedor sidecar csi-external-resizer, que es el componente responsable de iniciar la expansión.

Solución

  1. Verifica la configuración de StorageClass y que el campo allowVolumeExpansion: true esté configurado:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. Si falta allowVolumeExpansion o se establece en false, actualiza la StorageClass para permitir la expansión del volumen.

  3. Si la StorageClass está configurada correctamente, es probable que el problema se deba a los componentes del plano de control de GKE que administran la operación de cambio de tamaño. Comunícate con Atención al cliente de Cloud para obtener asistencia.

La expansión falla debido a un problema de cuota o capacidad

Síntoma

  • El cambio de tamaño de la PVC falla y aparece un evento VolumeResizeFailed en la PVC.
  • Cuando ejecutas el comando kubectl describe pvc PVC_NAME, el mensaje de evento del backend de Managed Lustre indica un problema de cuota o capacidad.

Causa

No se puede completar la expansión válida solicitada porque supera la capacidad o la cuota general disponible para el servicio de Managed Lustre en tu proyecto o región.

Solución

  • Vuelve a editar tu PVC y solicita un aumento de almacenamiento menor.
  • Comunícate con el administrador de Cloud de Confiance by S3NS tu organización para solicitar un aumento de las cuotas o la capacidad generales del servicio de Lustre para tu proyecto.

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Cloud de Confiance by S3NS por los recursos que usaste en este documento, borra la PVC. Esta operación también borra el PV asociado y la instancia de Managed Lustre subyacente si el reclaimPolicy se establece en Delete.

kubectl delete pvc PVC_NAME

Reemplaza PVC_NAME por el nombre de tu PVC.

¿Qué sigue?