Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz

Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz
Para dominar completamente Kubernetes, necesita conocer diferentes formas de escalar los recursos del clúster: mediante según los desarrolladores del sistemaEsta es una de las principales tareas de Kubernetes. Hemos proporcionado una descripción general de alto nivel de los mecanismos de cambio de tamaño de clúster y escalado automático horizontal y vertical, así como recomendaciones sobre cómo usarlos de manera efectiva.

Artículo Kubernetes Autoescaling 101: Autoescalador de clúster, Autoescalador horizontal y Autoescalador de pod vertical traducido por el equipo que implementó el escalado automático en Kubernetes aaS de Mail.ru.

Por qué es importante pensar en escalar

Kubernetes - una herramienta para la gestión y orquestación de recursos. Por supuesto, es bueno jugar con las funciones interesantes de implementar, monitorear y administrar pods (un pod es un grupo de contenedores que se lanzan en respuesta a una solicitud).

Sin embargo, también debes pensar en las siguientes preguntas:

  1. ¿Cómo escalar módulos y aplicaciones?
  2. ¿Cómo mantener los contenedores operativos y eficientes?
  3. ¿Cómo responder a los constantes cambios de código y cargas de trabajo de los usuarios?

Configurar clústeres de Kubernetes para equilibrar los recursos y el rendimiento puede ser un desafío y requiere un conocimiento experto del funcionamiento interno de Kubernetes. La carga de trabajo de su aplicación o servicios puede fluctuar a lo largo del día o incluso en el transcurso de una hora, por lo que es mejor considerar el equilibrio como un proceso continuo.

Niveles de escalado automático de Kubernetes

El escalado automático eficaz requiere coordinación entre dos niveles:

  1. Nivel de pod, incluido el escalador automático horizontal (Horizontal Pod Autoscaler, HPA) y el vertical (Vertical Pod Autoscaler, VPA). Se trata de escalar los recursos disponibles para sus contenedores.
  2. Nivel de clúster, que es administrado por Cluster Autoscaler (CA), que aumenta o disminuye la cantidad de nodos dentro del clúster.

Módulo de escalador automático horizontal (HPA)

Como sugiere el nombre, HPA aumenta la cantidad de réplicas de pods. La mayoría de los desarrolladores utilizan la carga de CPU y memoria como desencadenantes para cambiar la cantidad de réplicas. Sin embargo, es posible escalar el sistema basándose en métricas personalizadas, ellos combinación o métricas externas.

Diagrama operativo HPA de alto nivel:

  1. El HPA verifica continuamente los valores métricos especificados durante la instalación en un intervalo predeterminado de 30 segundos.
  2. El HPA intenta aumentar el número de módulos si se alcanza el umbral especificado.
  3. El HPA actualiza la cantidad de réplicas dentro del controlador de implementación/replicación.
  4. Luego, el controlador de implementación/replicación implementa los módulos adicionales necesarios.

Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz
HPA inicia el proceso de implementación del módulo cuando se alcanza un umbral de métrica

Al utilizar HPA, considere lo siguiente:

  • El intervalo de verificación de HPA predeterminado es de 30 segundos. Está fijado por la bandera. período-de-sincronización-del-autoscaler-pod-horizontal en el administrador del controlador.
  • El error relativo predeterminado es del 10%.
  • Tras el último aumento en el número de módulos, HPA espera que las métricas se estabilicen en tres minutos. Este intervalo lo establece la bandera. retardo-exclusivo-de-escalador-automático-pod-horizontal.
  • Después de la última reducción del número de módulos, el HPA espera cinco minutos para estabilizarse. Este intervalo lo establece la bandera. retardo-de-reducción-de-escala-automática-pod-horizontal.
  • HPA funciona mejor con objetos de implementación que con controladores de replicación. El ajuste de escala automático horizontal es incompatible con la actualización continua, que manipula directamente los controladores de replicación. Con la implementación, la cantidad de réplicas depende directamente de los objetos de implementación.

Escalado automático vertical de pods

El escalado automático vertical (VPA) asigna más (o menos) tiempo de CPU o memoria a los pods existentes. Adecuado para pods con o sin estado, pero destinado principalmente a servicios con estado. Sin embargo, también puede utilizar VPA para módulos sin estado si necesita ajustar automáticamente la cantidad de recursos asignados inicialmente.

VPA también responde a eventos OOM (sin memoria). Para cambiar el tiempo de CPU y la memoria es necesario reiniciar los pods. Cuando se reinicia, el AVA respeta el presupuesto de asignación (Presupuesto de distribución de pods, PDB) para garantizar el número mínimo requerido de módulos.

Puede establecer los recursos mínimos y máximos para cada módulo. Por lo tanto, puede limitar la cantidad máxima de memoria asignada a 8 GB. Esto es útil si los nodos actuales definitivamente no pueden asignar más de 8 GB de memoria por contenedor. Las especificaciones detalladas y el mecanismo operativo se describen en wiki oficial del AVA.

Además, VPA tiene una interesante función de recomendación (VPA Recommender). Supervisa el uso de recursos y los eventos OOM de todos los módulos para sugerir nuevos valores de memoria y tiempo de CPU basándose en un algoritmo inteligente basado en métricas históricas. También hay una API que toma un identificador de pod y devuelve valores de recursos sugeridos.

Vale la pena señalar que VPA Recommender no rastrea el "límite" de recursos. Esto puede dar como resultado que el módulo monopolice los recursos dentro de los nodos. Es mejor establecer el límite en el nivel del espacio de nombres para evitar un gran consumo de memoria o CPU.

Esquema de operación del VPA de alto nivel:

  1. VPA verifica continuamente los valores métricos especificados durante la instalación en un intervalo predeterminado de 10 segundos.
  2. Si se alcanza el umbral especificado, el VPA intenta cambiar la cantidad de recursos asignados.
  3. El VPA actualiza la cantidad de recursos dentro del controlador de implementación/replicación.
  4. Cuando se reinician los módulos, todos los recursos nuevos se aplican a las instancias creadas.

Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz
VPA agrega la cantidad requerida de recursos

Tenga en cuenta los siguientes puntos al utilizar VPA:

  • El escalado requiere un reinicio obligatorio del pod. Esto es necesario para evitar un funcionamiento inestable después de realizar cambios. Para mayor confiabilidad, los módulos se reinician y distribuyen entre nodos según los recursos recién asignados.
  • VPA y HPA aún no son compatibles entre sí y no pueden ejecutarse en los mismos pods. Si está utilizando ambos mecanismos de escalado en el mismo clúster, asegúrese de que su configuración impida que se activen en los mismos objetos.
  • VPA ajusta las solicitudes de recursos de los contenedores basándose únicamente en el uso pasado y actual. No establece límites de uso de recursos. Puede haber problemas con las aplicaciones que no funcionan correctamente y comienzan a consumir cada vez más recursos, lo que hará que Kubernetes apague este pod.
  • El VPA se encuentra todavía en una etapa temprana de desarrollo. Esté preparado para que el sistema pueda sufrir algunos cambios en un futuro próximo. Puedes leer sobre limitaciones conocidas и planes de desarrollo. Así, hay planes para implementar la operación conjunta de VPA y HPA, así como el despliegue de módulos junto con una política de autoescalado vertical para ellos (por ejemplo, una etiqueta especial 'requiere VPA').

Escalado automático de un clúster de Kubernetes

Cluster Autoscaler (CA) cambia la cantidad de nodos según la cantidad de pods en espera. El sistema comprueba periódicamente si hay módulos pendientes y aumenta el tamaño del clúster si se necesitan más recursos y si el clúster no supera los límites establecidos. La CA se comunica con el proveedor de servicios en la nube, le solicita nodos adicionales o libera los inactivos. La primera versión de CA disponible de forma generalizada se introdujo en Kubernetes 1.8.

Esquema de alto nivel de operación SA:

  1. CA busca módulos pendientes en un intervalo predeterminado de 10 segundos.
  2. Si uno o más pods están en estado de espera porque el clúster no tiene suficientes recursos disponibles para asignarlos, intenta aprovisionar uno o más nodos adicionales.
  3. Cuando el proveedor de servicios en la nube asigna el nodo requerido, se une al clúster y está listo para atender los pods.
  4. El programador de Kubernetes distribuye los pods pendientes a un nuevo nodo. Si después de esto algunos módulos aún permanecen en estado de espera, el proceso se repite y se agregan nuevos nodos al clúster.

Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz
Aprovisionamiento automático de nodos del clúster en la nube

Considere lo siguiente al utilizar CA:

  • CA garantiza que todos los pods del clúster tengan espacio para ejecutarse, independientemente de la carga de la CPU. También intenta garantizar que no haya nodos innecesarios en el clúster.
  • CA registra la necesidad de escalar después de aproximadamente 30 segundos.
  • Una vez que ya no se necesita un nodo, la CA espera de forma predeterminada 10 minutos antes de escalar horizontalmente el sistema.
  • El sistema de escalado automático tiene el concepto de expansores. Estas son diferentes estrategias para seleccionar un grupo de nodos al que se agregarán nuevos nodos.
  • Utilice la opción de forma responsable cluster-autoscaler.kubernetes.io/safe-to-evict (verdadero). Si instala muchos pods, o si muchos de ellos están dispersos en todos los nodos, perderá en gran medida la capacidad de escalar horizontalmente el clúster.
  • uso PodDisruptionPresupuestospara evitar que se eliminen pods, lo que podría provocar que partes de su aplicación fallen por completo.

Cómo interactúan los escaladores automáticos de Kubernetes entre sí

Para lograr una armonía perfecta, el escalado automático se debe aplicar tanto a nivel de módulo (HPA/VPA) como a nivel de clúster. Interactúan entre sí de forma relativamente sencilla:

  1. Los HPA o VPA actualizan las réplicas de pods o los recursos asignados a los pods existentes.
  2. Si no hay suficientes nodos para el escalado planificado, la CA detecta la presencia de pods en estado de espera.
  3. La CA asigna nuevos nodos.
  4. Los módulos se distribuyen a nuevos nodos.

Tres niveles de escalado automático en Kubernetes: cómo utilizarlos de forma eficaz
Sistema colaborativo de escalamiento horizontal de Kubernetes

Errores comunes en el escalado automático de Kubernetes

Hay varios problemas comunes con los que se encuentran los desarrolladores al intentar implementar el escalado automático.

HPA y VPA dependen de métricas y algunos datos históricos. Si se asignan recursos insuficientes, los módulos se minimizarán y no podrán generar métricas. En este caso, el ajuste de escala automático nunca se producirá.

La operación de escalado en sí es urgente. Queremos que los módulos y el clúster escale rápidamente, antes de que los usuarios noten cualquier problema o falla. Por lo tanto, se debe tener en cuenta el tiempo de escalado promedio para los pods y el clúster.

Escenario ideal - 4 minutos:

  1. 30 segundos. Actualizar métricas de destino: 30 a 60 segundos.
  2. 30 segundos. HPA verifica los valores métricos: 30 segundos.
  3. Menos de 2 segundos. Los pods se crean y pasan al estado de espera: 1 segundo.
  4. Menos de 2 segundos. CA ve los módulos en espera y envía llamadas a los nodos de aprovisionamiento: 1 segundo.
  5. 3 minutos. El proveedor de la nube asigna nodos. K8 espera hasta que esté listo: hasta 10 minutos (dependiendo de varios factores).

El peor de los casos (más realista): 12 minutos:

  1. 30 segundos. Actualizar las métricas objetivo.
  2. 30 segundos. HPA verifica los valores métricos.
  3. Menos de 2 segundos. Los pods se crean y entran en estado de espera.
  4. Menos de 2 segundos. La CA ve los módulos en espera y realiza llamadas para aprovisionar los nodos.
  5. 10 minutos. El proveedor de la nube asigna nodos. K8 espera hasta que estén listos. El tiempo de espera depende de varios factores, como la demora del proveedor, la demora del sistema operativo y las herramientas de soporte.

No confunda los mecanismos de escalamiento de los proveedores de la nube con nuestra CA. Este último se ejecuta dentro de un clúster de Kubernetes, mientras que el motor del proveedor de la nube opera según la distribución de nodos. No sabe qué está pasando con sus pods o su aplicación. Estos sistemas funcionan en paralelo.

Cómo gestionar el escalado en Kubernetes

  1. Kubernetes es una herramienta de orquestación y gestión de recursos. Las operaciones para gestionar pods y recursos de clúster son un hito clave para dominar Kubernetes.
  2. Comprenda la lógica de la escalabilidad del pod teniendo en cuenta HPA y VPA.
  3. CA solo debe usarse si comprende bien las necesidades de sus pods y contenedores.
  4. Para configurar de manera óptima un clúster, es necesario comprender cómo funcionan juntos los diferentes sistemas de escalado.
  5. Al estimar el tiempo de escalamiento, tenga en cuenta los peores y mejores escenarios.

Fuente: habr.com

Añadir un comentario