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
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
Verifica si tu StorageClass admite la expansión de volúmenes:
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Reemplaza
STORAGECLASS_NAMEpor 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.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 de volumen, edita tu PersistentVolumeClaim (PVC) y solicita un aumento del tamaño del volumen.
- 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.
Abre la configuración de 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 de la PVC:
kubectl describe pvc PVC_NAMELos 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 elexternal-resizerexpanda 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.
Una vez que se complete la expansión, verifica la configuración actualizada de la PVC:
kubectl get pvc PVC_NAME -o yamlAsegúrate de que el campo
status.capacityrefleje 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:
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. 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> 26mBusca la ubicación del volumen y el nombre de la instancia 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 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 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 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
- 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.
- 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 eventoVolumeResizeFailedcon un mensaje de error que contienecode = Internal.
Causa
Este error indica un problema con el servicio de Managed Lustre subyacente.
Solución
- 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.
- 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
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 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-resizervuelve a intentar la operación automáticamente después de un período de retirada. Sigue supervisando los eventos de PVC para detectar un eventoVolumeResizeSuccessful. - Si la PVC permanece en el estado
Resizingdurante 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.storageen tu PVC, pero el estado de la 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
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
Verifica la configuración de StorageClass y que el campo
allowVolumeExpansion: trueesté configurado:kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Si falta
allowVolumeExpansiono se establece enfalse, actualiza la StorageClass para permitir la expansión del volumen.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
VolumeResizeFaileden 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?
- Obtén más información sobre el almacenamiento para clústeres de GKE.
- Lee la documentación sobre los volúmenes persistentes y el aprovisionamiento de GKE.