Configuración de varios nodos y habilitación de la escala a cero mediante AKS

Completado

Azure Kubernetes Service le permite crear diferentes grupos de nodos para hacer coincidir cargas de trabajo específicas con los nodos que se ejecutan en cada grupo de nodos. El proceso de hacer coincidir las cargas de trabajo con los nodos permite planear el cálculo del consumo y la optimización de costes.

La solución de seguimiento de drones de la empresa está implementada en Azure Kubernetes Service (AKS), como muchos servicios y aplicaciones en contenedores. El equipo ha desarrollado un nuevo servicio de modelado predictivo que procesa la información de las rutas de vuelo bajo condiciones climatológicas extremas y crea rutas de vuelo óptimas. Este servicio requiere compatibilidad con máquinas virtuales basadas en GPU y solo se ejecuta en días concretos de la semana.

Quiere configurar un grupo de nodos de clúster dedicado para procesar la información de rutas de vuelo. El proceso solo se ejecuta durante un par de horas al día y usted desea usar un grupo de nodos basado en GPU. Pero solo quiere pagar por los nodos cuando los use.

Ahora se verá cómo los grupos de nodos y cómo AKS usan los nodos, y cómo se puede escalar el número de nodos en un grupo de nodos.

¿Qué es un grupo de nodos?

Un grupo de nodos son una serie de nodos que tienen la misma configuración en un clúster de AKS. Estos nodos contienen las máquinas virtuales subyacentes en las que se ejecutan sus aplicaciones. En un clúster de Kubernetes administrado por AKS puede crear dos tipos de grupos de nodos:

  • Grupos de nodos de sistema

  • Grupos de nodos de usuario

Grupos de nodos de sistema

Los grupos de nodos del sistema hospedan pods críticos del sistema que componen el plano de control del clúster. Un grupo de nodos de sistema solo permite usar Linux como sistema operativo del nodo y solo ejecuta cargas de trabajo basadas en Linux. Los nodos de un grupo de nodos de sistema se reservan para las cargas de trabajo del sistema y, normalmente, no se usan para ejecutar cargas de trabajo personalizadas. Cada clúster de AKS debe contener al menos un grupo de nodos de sistema con al menos un nodo, y es necesario definir los tamaños de máquina virtual subyacentes de los nodos.

Grupos de nodos de usuario

Los grupos de nodos de usuario admiten sus cargas de trabajo y puede especificar Windows o Linux como sistema operativo del nodo. También puede definir el tamaño de las máquinas virtuales subyacentes de los nodos y ejecutar cargas de trabajo específicas. Por ejemplo, la solución de seguimiento de drones tiene un servicio de procesamiento por lotes que se implementa en un grupo de nodos con una configuración para máquinas virtuales de uso general. Para el nuevo servicio de modelado de predicción se necesitan máquinas virtuales basadas en GPU de mayor capacidad. Decide configurar un grupo de nodos independiente en el que se usen nodos habilitados para GPU.

Número de nodos de un grupo de nodos

Puede configurar hasta 100 nodos en un grupo de nodos. Pero el número de nodos que decida configurar depende del número de pods que se ejecuten por nodo.

Por ejemplo, en un grupo de nodos de sistema, es esencial establecer en 30 el número máximo de pods que se ejecutan en un único nodo. Este valor garantiza que haya suficiente espacio disponible como para ejecutar los pods del sistema relevantes para el mantenimiento del clúster. Cuando el número de pods supera este valor mínimo, se necesitan más nodos en el grupo para programar más cargas de trabajo. Por esta razón, debe haber al menos un nodo en el grupo de nodos de sistema. En entornos de producción, el número de nodos recomendado para un grupo de nodos de sistema es tres.

Los grupos de nodos de usuario están diseñados para ejecutar cargas de trabajo personalizadas y no tienen el requisito de 30 pods. Además, permiten establecer el número de nodos de un grupo en cero.

Administración de la demanda de aplicaciones en un clúster de AKS

En AKS, al aumentar o disminuir la cantidad de recursos de proceso en un clúster de Kubernetes, se escala. Se puede escalar el número de instancias de cargas de trabajo que es necesario ejecutar, o bien el número de nodos en los que se ejecutan estas cargas de trabajo. Hay dos maneras de escalar las cargas de trabajo de un clúster administrado por AKS. La primera opción consiste en escalar manualmente los pods o los nodos, según sea necesario. La segunda opción es a través de la automatización. Mediante esta, puede usar el escalador automático horizontal de pods para escalar pods y el escalador automático del clúster para escalar nodos.

Procedimiento para escalar un grupo de nodos de forma manual

Si ejecuta cargas de trabajo que se ejecutan durante un tiempo específico a intervalos concretos conocidos, el escalado manual del tamaño del grupo de nodos es una buena manera de controlar el costo de los nodos.

Supongamos que el servicio de modelado de predicción requiere un grupo de nodos basado en GPU y se ejecuta durante una hora diaria a mediodía. Puede configurar el grupo de nodos con nodos específicos basados en GPU y escalar el grupo de nodos a cero nodos cuando no esté usando el clúster.

Este es un ejemplo del comando az aks node pool add que puede usar para crear el grupo de nodos. Observe el parámetro --node-vm-size, que especifica el tamaño de máquina virtual basada en GPU Standard_NC6 para los nodos del grupo.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

Cuando el grupo esté listo, puede usar el comando az aks nodepool scale para escalar el grupo de nodos a cero nodos. Observe que el parámetro --node-count está establecido en cero. Este es un ejemplo del comando:

az aks nodepool scale \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 0

Procedimiento para escalar un clúster de forma automática

Diagram that shows how the cluster autoscaler adds nodes and how the horizontal pod autoscaler adds pods.

En AKS se usa el escalador automático de clúster de Kubernetes para escalar las cargas de trabajo automáticamente. Hay dos opciones para escalar el clúster:

  • Escalador automático horizontal de pod

  • Escalador automático de clúster

Ahora se analizará cada una de las opciones, empezando por el escalador automático horizontal de pod.

Escalador automático horizontal de pod

El escalador automático horizontal de pod de Kubernetes se usa para supervisar la demanda de recursos de un clúster y escalar de forma automática el número de réplicas de carga de trabajo.

El servidor de métricas de Kubernetes recopila métricas de memoria y de procesador de los controladores, nodos y contenedores que se ejecutan en el clúster de AKS. Una forma de acceder a esta información consiste en usar la API de métricas. El escalador automático horizontal de pod comprueba la API de métricas cada 30 segundos para decidir si la aplicación necesita más instancias con el fin de satisfacer la demanda requerida.

Supongamos que su compañía también tiene un servicio de procesamiento por lotes que programa las rutas de vuelo de drones. Observa que el servicio se inunda de solicitudes y crea trabajos pendientes de entregas, lo que hace que estas se retrasen y que los clientes se enojen. Aumentar el número de réplicas del servicio de procesamiento por lotes podría permitir el procesamiento oportuno de pedidos.

Para solucionar el problema, configure el escalador automático horizontal de pods para aumentar el número de réplicas de servicio cuando sea necesario. Cuando el número de solicitudes por lotes disminuye, disminuye el número de réplicas de servicio.

Pero el escalador automático horizontal de pod solo escala los pods en los nodos disponibles de los grupos de nodos configurados del clúster.

Escalador automático de clúster

Cuando el escalador automático horizontal de pod no puede programar otro pod en los nodos existentes de un grupo de nodos, se desencadena una restricción de recursos. Debe usar el escalador automático del clúster para escalar el número de nodos de los grupos de nodos de un clúster en caso de que se produzcan restricciones. El escalador automático de clúster comprueba las métricas definidas e incrementa o reduce el número de nodos en función de los recursos informáticos necesarios.

El escalador automático de clúster se usa junto con el escalador automático horizontal de pod.

El escalador automático de clúster supervisa los eventos de escalado vertical y reducción vertical, y permite que el clúster de Kubernetes cambie el número de nodos de un grupo de nodos a medida que cambia la demanda de recursos.

Los grupos de nodos se configuran con reglas de escala diferentes. Por ejemplo, podría querer configurar solo un grupo de nodos para permitir el escalado automático, o podría configurar un grupo de nodos para escalar solo un número específico de nodos.

Importante

Si se habilita el escalador automático de clúster en un grupo de nodos, se pierde la capacidad de escalar el número de nodos a cero. En su lugar, establezca el recuento mínimo en cero para ahorrar recursos de clúster.

Comprobar los conocimientos

1.

Imagine que tiene una solución de software con tres componentes críticos. El primer componente es una aplicación web. El segundo es un servicio que procesa pedidos en línea. El tercero es un servicio de representación y análisis de vídeo que solo se ejecuta cuando es necesario y que requiere máquinas virtuales basadas en GPU. Para optimizar los costos, ¿cuántos grupos de nodos tendría que implementar en un clúster de Azure Kubernetes Service (AKS) para administrar la solución?

2.

Complete el texto siguiente. El escalador automático de clúster de Kubernetes escala...