Escalabilidad automática vertical de pods en Azure Kubernetes Service (AKS)

En este artículo se proporciona información general sobre el uso del escalador automático vertical de pods (VPA) de Azure Kubernetes Service (AKS), que se basa en la versión de código abierto de Kubernetes.

Cuando se configura, el VPA establece automáticamente las solicitudes de recursos y los límites de los contenedores por carga de trabajo en función del uso pasado. El VPA libera CPU y memoria para otros pods y ayuda a garantizar el uso eficaz de los clústeres de AKS. El escalador automático vertical de pods proporciona recomendaciones sobre el uso de recursos a lo largo del tiempo. Para administrar aumentos repentinos en el uso de recursos, use el escalador automático horizontal de pods, que escala el número de réplicas de pod según sea necesario.

Ventajas

El escalador automático vertical de pods proporciona las siguientes ventajas:

  • Analiza y ajusta los recursos de procesador y memoria para ajustar el tamaño correcto de las aplicaciones. VPA no solo es responsable del escalado vertical, sino también de la reducción vertical en función del uso de recursos a lo largo del tiempo.
  • Un pod con un modo de escalado establecido en automático o volver a crear se expulsa si necesita cambiar sus solicitudes de recursos.
  • Puede establecer restricciones de CPU y memoria para contenedores individuales mediante la especificación de una directiva de recursos.
  • Garantiza que los nodos tienen los recursos correctos para la programación de pods.
  • Ofrece un registro configurable de los ajustes realizados en los recursos de procesador o memoria realizados.
  • Mejora el uso de recursos del clúster y libera CPU y memoria para otros pods.

Limitaciones y consideraciones

Tenga en cuenta las siguientes limitaciones y consideraciones al usar el escalador automático vertical de pods:

  • El escalador automático vertical de pods admite como máximo 1000 pods asociados a objetos VerticalPodAutoscaler por clúster.
  • El escalador automático vertical de pods puede recomendar más recursos de los disponibles en el clúster, lo que impide que el pod se asigne a un nodo y se ejecute debido a recursos insuficientes. Para superar esta limitación, establezca LimitRange en el número máximo de recursos disponibles por espacio de nombres, lo que garantiza que los pods no soliciten más recursos de los especificados. Además, puede establecer las recomendaciones máximas de recursos permitidos por pod en un objeto VerticalPodAutoscaler. El escalador automático vertical de pods no puede superar completamente un problema de recursos de nodo insuficientes. El intervalo de límite es fijo, pero el uso de recursos de nodo cambia dinámicamente.
  • No se recomienda usar el escalador automático vertical de pods con el escalador automático horizontal de pods, que escala en función de las mismas métricas de uso de CPU y memoria.
  • El recomendador del escalador automático vertical de pods solo almacena hasta ocho días de datos históricos.
  • El escalador automático vertical de pods no admite cargas de trabajo basadas en JVM debido a la visibilidad limitada del uso real de la memoria de la carga de trabajo.
  • El escalador automático vertical de pods no admite la ejecución de su propia implementación junto con él. Se admite tener un recomendador adicional o personalizado.
  • No se admiten contenedores de Windows de AKS.

Información general sobre VPA

El objeto VPA consta de tres componentes:

  • Recomendador: el recomendador supervisa el consumo de recursos actual y pasado, incluidos el historial de métricas, los eventos de memoria insuficiente (OOM) y las especificaciones de implementación del escalador automático vertical de pods, y usa la información que recopila para proporcionar valores recomendados para las solicitudes y límites de CPU y memoria del contenedor.
  • Actualizador: el actualizador supervisa los pods administrados para asegurarse de que sus solicitudes de recursos están configuradas correctamente. Si no es así, quita esos pods para que sus controladores puedan volver a crearlos con las solicitudes actualizadas.
  • Controlador de admisión del escalador automático vertical de pods: establece las solicitudes de recursos correctas en los nuevos pods (creados o recreados por su controlador debido a la actividad del actualizador).

Controlador de admisión de VPA

El controlador de admisión del escalador automático vertical de pods es un binario que se registra como un webhook de admisión de mutación. Con cada pod creado, el controlador de admisión del escalador automático vertical de pods obtiene una solicitud del servidor de API y evalúa si hay una configuración de escalador automático vertical de pods coincidente, o busca una correspondiente y usa la recomendación actual para establecer solicitudes de recursos en el pod.

Un trabajo independiente se ejecuta fuera del controlador de admisión del escalador automático vertical de pods, llamado overlay-vpa-cert-webhook-check. El trabajo overlay-vpa-cert-webhook-check se usa para crear y renovar los certificados y registrar el controlador de admisión del escalador automático vertical de pods como MutatingWebhookConfiguration.

Modos de operación de objetos de VPA

Se inserta un recurso de escalador automático vertical de pods, más conocido como implementación, por cada controlador cuyos requisitos de recursos quiera que se calculen automáticamente.

Hay cuatro modos en los que funciona el escalador automático vertical de pods:

  • Auto: el escalador automático vertical de pods asigna solicitudes de recursos durante la creación de pods y actualiza los pods existentes mediante el mecanismo de actualización preferido. Auto, que es equivalente a Recreate, es el modo predeterminado. Una vez que esté disponible la actualización sin reinicio (in situ) de las solicitudes de pods, el modo Auto podrá utilizarla como mecanismo de actualización preferente. Al usar el modo Auto, el escalador automático vertical de pods expulsa un pod si necesita cambiar sus solicitudes de recursos. Puede hacer que los pods se reinicien todos a la vez, lo que puede provocar incoherencias de la aplicación. Puede limitar los reinicios y mantener la coherencia en esta situación mediante PodDisruptionBudget.
  • Recreate: el escalador automático vertical de pods asigna solicitudes de recursos durante la creación de los pods y actualiza los pods existentes expulsándolos cuando los recursos solicitados difieren significativamente de la nueva recomendación (respetando el presupuesto de interrupción de pods, si se define). Solo debe usar este modo si necesita asegurarse de que los pods se reinician siempre que cambie la solicitud de recursos. De lo contrario, se recomienda usar el modo Auto, que aprovecha las actualizaciones sin reinicio una vez que estén disponibles.
  • Initial: el escalador automático vertical de pods solo asigna solicitudes de recursos durante la creación de los pods. No actualiza los pods existentes. Este modo es útil para probar y comprender el comportamiento del escalador automático vertical de pods sin afectar a los pods en ejecución.
  • Off: el escalador automático vertical de pods no cambia automáticamente los requisitos de recursos de los pods. Las recomendaciones se calculan y se pueden inspeccionar en el objeto de VPA.

Patrón de implementación para el desarrollo de aplicaciones

Si no está familiarizado con el escalador automático vertical de pods, le recomendamos seguir el patrón de implementación durante el desarrollo de aplicaciones con el fin de identificar sus características de uso de recursos únicos, probar el escalador automático vertical de pods para comprobar que funciona correctamente y probarlo junto con otros componentes de Kubernetes para optimizar el uso de recursos del clúster:

  1. Establezca UpdateMode = "Off" en el clúster de producción y ejecute el escalador automático vertical de pods en modo de recomendación para que pueda probarlo y familiarizarse con él. UpdateMode = "Off" puede evitar la introducción de una configuración incorrecta que puede provocar una interrupción.
  2. Establezca primero la observabilidad mediante la recopilación de telemetría de uso real de recursos durante un período determinado de tiempo, lo que le ayuda a comprender el comportamiento y los signos de problemas de los recursos de contenedor y pod influidos por las cargas de trabajo que se ejecutan en ellos.
  3. Familiarícese con los datos de supervisión para comprender las características de rendimiento. En función de esta información, establezca las solicitudes o límites deseados en consecuencia y, luego, en la siguiente implementación o actualización.
  4. Establezca el valor updateMode en Auto, Recreate o Initial, según sus requisitos.

Pasos siguientes

Para obtener información sobre cómo configurar el escalador automático vertical de pods en el clúster de AKS, consulte Uso del escalador automático vertical de pods en AKS.