En este documento, se describe cómo aumentar de forma dinámica la capacidad de almacenamiento de los volúmenes de Lustre administrados 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/ML de larga duración tienen requisitos de almacenamiento dinámicos e impredecibles, habilita la expansión del volumen 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, profesionales de 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 según la nueva capacidad más grande, de acuerdo con los precios estándar de Managed Lustre.Google Cloud
Antes de comenzar
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 posterior.
- Debes habilitar el controlador de CSI de Lustre administrado 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 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 paso establecidos por 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 volumen para una StorageClass
Verifica si tu StorageClass admite la expansión de volumen:
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Reemplaza
STORAGECLASS_NAMEpor el nombre de tu StorageClass.Si el comando no genera ningún resultado o devuelve
false, debes actualizar explícitamente la configuración de StorageClass para permitir la expansión.Abre la configuración de StorageClass para editarla:
kubectl edit storageclass STORAGECLASS_NAMEEn el editor, agrega el campo
allowVolumeExpansion: truea 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 del volumen, edita tu PersistentVolumeClaim (PVC) para solicitar un aumento en el tamaño del volumen.
- Identifica el nuevo tamaño válido para la expansión, como se describe en Cómo determinar tamaños de expansión válidos.
Abre la configuración del PVC para editarla:
kubectl edit pvc PVC_NAMEReemplaza
PVC_NAMEpor el nombre de tu PVC.En el editor, actualiza el campo
spec.resources.requests.storagecon el tamaño de expansión válido. Por ejemplo, para expandir un volumen de9000Gia18000Gi, modifica el campostoragede la siguiente manera:spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
Verifica la expansión del volumen
Supervisa el progreso de la expansión revisando los eventos del PVC:
kubectl describe pvc PVC_NAMELos siguientes eventos en el resultado del PVC indican el progreso o el resultado actual de la solicitud de expansión del volumen:
ExternalExpanding: Indica que Kubernetes está esperando a queexternal-resizerexpanda el 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.
Una vez que se complete la expansión, verifica la configuración actualizada del PVC:
kubectl get pvc PVC_NAME -o yamlAsegúrate de que el campo
status.capacityrefleje el tamaño nuevo y aumentado.
Si tienes algún problema durante el proceso de expansión, consulta Solución de problemas.
Cómo determinar 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 su tamaño de 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 de perUnitStorageThroughput (por ejemplo, 1000). Este valor indica el nivel de rendimiento en MB/s 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:
Busca el nombre del PV vinculado a tu PVC:
kubectl get pvc PVC_NAMEReemplaza
PVC_NAMEpor el nombre de tu PVC.El resultado es similar al siguiente. Observa el nombre de la 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> 26mBusca la ubicación y el nombre de la instancia del volumen en el campo
volumeHandle:kubectl get pv PV_NAME -o yamlReemplaza
PV_NAMEpor el nombre del PV del paso anterior.El valor
volumeHandletiene el formatoPROJECT_ID/LOCATION/INSTANCE_NAME. Toma nota deINSTANCE_NAMEyLOCATIONpara el siguiente paso.Para verificar las propiedades del nivel de rendimiento, describe la instancia de Managed Lustre:
gcloud lustre instances describe INSTANCE_NAME --location=LOCATIONReemplaza
INSTANCE_NAMEyLOCATIONpor 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 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 de 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 (aproximadamente 1 PiB) | 9,000 GiB |
| 500 MBps por TiB | 18,000 GiB | 1,908,000 GiB (aproximadamente 2 PiB) | 18,000 GiB |
| 250 MBps por TiB | 36,000 GiB | 3,816,000 GiB (aproximadamente 4 PiB) | 36,000 GiB |
| 125 MBps por TiB | 72,000 GiB | 7,632,000 GiB (aproximadamente 8 PiB) | 72,000 GiB |
Los volúmenes deben aumentarse según el tamaño del paso asignado a su nivel. Cualquier aumento en la capacidad debe ser un múltiplo de ese tamaño de paso específico. Por ejemplo, si tu volumen de nivel de 1,000 MB/s tiene una capacidad de 9,000 GiB, puedes aumentarla a 18,000 GiB, 27,000 GiB y otros múltiplos.
Soluciona problemas
En esta sección, se proporcionan soluciones para los problemas comunes que puedes encontrar cuando expandes volúmenes de Lustre.
La expansión falla con un error de "Invalid Argument"
Síntoma
- El PVC entra en un estado
Resizing, pero luego falla. - Cuando ejecutas el comando
kubectl describe pvc PVC_NAME, ves un error similar aVolumeResizeFailed: 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 de paso requerido para el nivel.
- El tamaño solicitado es inferior al mínimo o superior a la capacidad máxima del nivel.
Solución
- Revisa Límites de capacidad y tamaños de paso para encontrar los tamaños de paso y los límites de capacidad válidos para el nivel de rendimiento de tu volumen.
- Vuelve a editar la PVC para solicitar un tamaño de almacenamiento válido que cumpla con los límites de capacidad y tamaño de paso.
La expansión falla con un "Error interno"
Síntoma
- Falla el cambio de tamaño del PVC.
- Cuando ejecutas el comando
kubectl describe pvc PVC_NAME, es posible que veas un eventoVolumeResizeFailedcon un mensaje de error que contienecode = Internal.
Causa
Este error indica un problema con el servicio subyacente de Lustre administrado.
Solución
- Vuelve a intentar la expansión aplicando el manifiesto de PVC con el nuevo tamaño solicitado. Esto podría resolver problemas transitorios del backend.
- Si el reintento falla, comunícate con Atención al cliente de Cloud.
La expansión está detenida en el estado "Cambiando el tamaño"
Síntoma
- El PVC permanece en el estado
Resizingdurante 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
VolumeResizeFailedcon un mensaje de errorDEADLINE_EXCEEDED.
Causa
Este problema puede ocurrir con grandes aumentos de capacidad, que pueden tardar hasta 90 minutos en completarse. Es posible que el componente csi-external-resizer agote el tiempo de espera mientras espera la respuesta de la API de Google Cloud Managed Lustre, aunque la operación de expansión subyacente aún esté en curso.
Solución
csi-external-resizervuelve a intentar la operación automáticamente después de un período de espera. Sigue supervisando los eventos de PVC para detectar un eventoVolumeResizeSuccessful.- Si el PVC permanece en el estado
Resizingdurante más de 90 minutos, comunícate con Atención al cliente de Cloud.
La expansión no se inicia o se queda en el estado ExternalExpanding
Síntoma
- Actualizas el campo
spec.resources.requests.storageen tu PVC, pero el estado del PVC no cambia aResizing. - Cuando ejecutas el comando
kubectl describe pvc PVC_NAME, el registro de eventos solo muestra el estadoExternalExpandingy no avanza al estadoResizing:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalExpanding 21m (x2 over 58m) volume_expand waiting for an external controller to expand this PVC
Causa
Por lo general, este comportamiento indica uno de los siguientes problemas:
- La StorageClass asociada con el PVC no permite la expansión del volumen.
- Hay un problema con el contenedor secundario
csi-external-resizer, que es el componente responsable de iniciar la expansión.
Solución
Verifica la configuración de StorageClass y comprueba que el campo
allowVolumeExpansion: trueesté configurado:kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Si falta
allowVolumeExpansiono se configuró comofalse, actualiza la StorageClass para permitir la expansión del volumen.Si la clase de almacenamiento 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 ayuda.
La expansión falla debido a un problema de cuota o capacidad
Síntoma
- Falla el cambio de tamaño de la PVC y aparece un evento
VolumeResizeFaileden la PVC. - Cuando ejecutas el comando
kubectl describe pvc PVC_NAME, el mensaje de evento del backend de Lustre administrado indica un problema de cuota o capacidad.
Causa
No se puede satisfacer la expansión válida solicitada porque supera la capacidad o la cuota general disponible para el servicio de Lustre administrado en tu proyecto o región.
Solución
- Vuelve a editar tu PVC y solicita un aumento de almacenamiento más pequeño.
- Comunícate con el administrador de Google Cloud de tu organización para solicitar un aumento en 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 Google Cloud por los recursos que usaste en este documento, borra el PVC. Esta operación también borra el PV asociado y la instancia subyacente de Managed Lustre si reclaimPolicy se establece en Delete.
kubectl delete pvc PVC_NAME
Reemplaza PVC_NAME por el nombre de tu PVC.
¿Qué sigue?
- Obtén más información sobre el almacenamiento para clústeres de GKE.
- Lee la documentación sobre el aprovisionamiento y los volúmenes persistentes de GKE.