Usar el escalado automático de clústeres en Azure Kubernetes Service (AKS)

Para satisfacer las necesidades de la aplicación en AKS, es posible que deba ajustar el número de nodos que ejecutan las cargas de trabajo. El componente de escalado automático de clústeres supervisa los pods del clúster que no pueden programarse debido a las restricciones de los recursos. Cuando la escalabilidad automática de clústeres detecta problemas, escala verticalmente el número de nodos del grupo de nodos para satisfacer las necesidades de la aplicación. También comprueba periódicamente si hay nodos infrautilizados y los quita cuando las cargas de trabajo se pueden reprogramar y reducir verticalmente de forma segura las condiciones.

En este artículo, se muestra cómo habilitar y administrar el escalador automático de clústeres en AKS, que se basa en la versión de código abierto de Kubernetes.

Antes de empezar

En este artículo se necesita la CLI de Azure versión 2.0.76 o posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Habilitación o deshabilitación del escalador automático de clústeres en un clúster

Importante

El escalador automático del clúster es un componente de Kubernetes. Aunque el clúster de AKS usa Virtual Machine Scale Sets para los nodos, no habilite ni edite manualmente la configuración para el escalado automático del conjunto de escalado. Permita que el escalador automático del clúster de Kubernetes administre la configuración del escalado necesaria. Para más información, consulte ¿Puedo modificar los recursos de AKS en el grupo de recursos del nodo?

Habilitación del escalador automático de clústeres en un nuevo clúster

  1. Cree un grupo de recursos con el comando az group create.

    az group create --name myResourceGroup --location eastus
    
  2. Cree un clúster de AKS mediante el comando az aks create, y habilite y configure el escalador automático de clústeres en el grupo de nodos para el clúster mediante el parámetro --enable-cluster-autoscaler y especifique un nodo --min-count y --max-count. El siguiente comando de ejemplo crea un clúster con un único nodo respaldado por un conjunto de escalado de máquinas virtuales, habilita el escalador automático del clúster, establece un mínimo de uno y un máximo de tres nodos:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --generate-ssh-keys
    

    Tardará unos minutos en crear el clúster y configurar las opciones del escalado automático de clústeres.

Habilitación del escalador automático de clústeres en los tres grupos de nodos

Actualice un clúster existente mediante el comando az aks update, y habilite y configure el escalador automático de clústeres en el grupo de nodos mediante el parámetro --enable-cluster-autoscaler y especifique un nodo --min-count y --max-count. En el siguiente comando de ejemplo, se actualiza un clúster de AKS existente para habilitar el escalador automático de clústeres en el grupo de nodos para el clúster y se establece un mínimo de uno y un máximo de tres nodos:

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3

Tardará unos minutos en actualizar el clúster y configurar las opciones del escalador automático de clústeres.

Deshabilitación del escalador automático de clústeres en un clúster

Deshabilite el escalador automático de clústeres mediante el comando az aks update y el parámetro --disable-cluster-autoscaler.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --disable-cluster-autoscaler

Los nodos no se quitan cuando se deshabilita el escalado automático de clústeres.

Nota

Puede escalar manualmente el clúster después de deshabilitar el escalador automático de clústeres mediante el comando az aks scale. Si usa el escalado automático horizontal de pods, continúa ejecutándose con el escalado automático de clústeres deshabilitado, pero es posible que los pods no puedan programarse si todos los recursos de nodo están en uso.

Rehabilitación del escalador automático de clústeres en un clúster

Puede volver a habilitar el escalador automático de clústeres en un clúster existente mediante el comando az aks update y al especificar los parámetros --enable-cluster-autoscaler, --min-count y --max-count.

Habilitación o deshabilitación del escalador automático del clúster en grupos de nodos

Uso del escalador automático de clústeres en varios grupos de nodos

Puede usar el escalador automático de clústeres con varios grupos de nodos y puede habilitar el escalador automático de clústeres en cada grupo de nodos individuales y pasarles reglas de escalabilidad automática únicas.

Actualice la configuración de un grupo de nodos existente mediante el comando az aks nodepool update.

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1 \
    --update-cluster-autoscaler \
    --min-count 1 \
    --max-count 5

Deshabilitación del escalador automático de clústeres en un grupo de nodos

Deshabilite el escalador automático de clústeres en un grupo de nodos mediante el comando az aks nodepool update y el parámetro --disable-cluster-autoscaler.

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1 \
    --disable-cluster-autoscaler

Volver a habilitar el escalador automático de clústeres en un grupo de nodos

Puede volver a habilitar el escalador automático de clústeres en un grupo de nodos mediante el comando az aks nodepool update y especificando los parámetros --enable-cluster-autoscaler, --min-count y --max-count.

Nota

Si tiene previsto usar el escalador automático de clústeres con grupos de nodos que abarcan varias zonas y aprovechar las características de programación relacionadas con zonas, por ejemplo, la programación topológica de volumen, se recomienda tener un grupo de nodos por zona y habilitar --balance-similar-node-groups mediante el perfil del escalador automático. Esto garantiza que el escalador automático se pueda escalar verticalmente de manera correcta y mantener equilibrados los tamaños de los grupos de nodos.

Actualización de la configuración del escalador automático de clústeres

A medida que las necesidades de la aplicación van cambiando, es posible que deba ajustar el número de nodos del escalado automático de clústeres de forma eficiente.

Cambie el número de nodos mediante el comando az aks update y actualice el escalador automático de clústeres mediante el parámetro --update-cluster-autoscaler y especifique el nodo actualizado --min-count y --max-count.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --update-cluster-autoscaler \
    --min-count 1 \
    --max-count 5

Nota

El escalador automático de clústeres aplica el número mínimo en los casos en los que el número real cae por debajo del mínimo debido a factores externos, como durante una expulsión de acceso puntual o al cambiar el valor de recuento mínimo de la API de AKS.

Uso del perfil del escalador automático de clústeres

Puede configurar detalles más pormenorizados del escalador automático de clúster si cambia los valores predeterminados en el perfil del escalador automático para todo el clúster. Por ejemplo, se produce un evento de reducción vertical una vez que los nodos se infrautilizan después de 10 minutos. Si tiene cargas de trabajo que se ejecutan cada 15 minutos, puede que quiera cambiar el perfil del escalador automático para reducir verticalmente los nodos infrautilizados después de 15 o 20 minutos. Cuando se habilita el escalador automático del clúster, se usa un perfil predeterminado a menos que se especifiquen otros valores.

Importante

El perfil del escalador automático de clústeres afecta a todos los grupos de nodos que usan el escalador automático de clústeres. No se puede establecer un perfil del escalador automático por grupo de nodos. Al establecer el perfil, los grupos de nodos existentes con el escalador automático de clústeres habilitado comienzan a usar el perfil de inmediato.

Configuración del perfil del escalador automático de clústeres

En la tabla siguiente se enumeran las opciones de configuración disponibles para el perfil del escalador automático de clústeres:

Configuración Descripción Valor predeterminado
scan-interval La frecuencia con la que se vuelve a evaluar el clúster para escalar o reducir verticalmente. 10 segundos
scale-down-delay-after-add Cuánto tiempo después del escalado vertical se reanuda la evaluación de la reducción horizontal. 10 minutos
scale-down-delay-after-delete Cuánto tiempo después de la eliminación del nodo se reanuda la evaluación de la reducción horizontal. scan-interval
scale-down-delay-after-failure Cuánto tiempo después de la reducción vertical se reanuda la evaluación de la reducción horizontal. Tres minutos
scale-down-unneeded-time Cuánto tiempo debe ser innecesario un nodo antes de que sea válido para la reducción vertical. 10 minutos
scale-down-unready-time Cuánto tiempo debe ser innecesario un nodo no listo antes de que sea válido para la reducción vertical. 20 minutos
ignore-daemonsets-utilization Si se omitirán los pods DaemonSet al calcular el uso de recursos para reducir verticalmente. false
daemonset-eviction-for-empty-nodes Si los pods DaemonSet se finalizarán correctamente desde nodos vacíos. false
daemonset-eviction-for-occupied-nodes Si los pods DaemonSet se finalizarán correctamente desde nodos que no estén vacíos. true
scale-down-utilization-threshold Valor máximo entre la suma de las solicitudes de CPU y la suma de las solicitudes de memoria de todos los pods que se ejecutan en el nodo, dividido por el recurso asignable correspondiente del nodo, por debajo del cual se puede considerar un nodo para reducción de escala. 0,5
max-graceful-termination-sec Número máximo de segundos que el escalador automático del clúster espera la terminación del pod al intentar reducir verticalmente un nodo. 600 segundos
balance-similar-node-groups Detecta grupos de nodos similares y equilibra el número de nodos entre ellos. false
expander El tipo de grupo de nodos expander que se va a usar en el escalado vertical. Los valores posibles incluyen most-pods, random, least-waste y priority. random
skip-nodes-with-local-storage Si es true, el escalador automático de clústeres no elimina nodos con pods con almacenamiento local, por ejemplo, EmptyDir o HostPath. false
skip-nodes-with-system-pods Si es true, el escalador automático de clústeres no elimina los nodos con pods de kube-system (excepto para DaemonSet o mirror). true
max-empty-bulk-delete Número máximo de nodos vacíos que se pueden eliminar al mismo tiempo. 10 nodos
new-pod-scale-up-delay En escenarios como la escala de ráfagas y lotes en los que no quiere que la CA actúe antes de que el programador de Kubernetes programe todos los pods, puede indicarle a la CA que ignore los pods no programados antes de que tengan una antigüedad concreta. 0 segundos
max-total-unready-percentage Porcentaje máximo de nodos no leídos en el clúster. Una vez que se haya superado este porcentaje, la CA detiene las operaciones. 45 %
max-node-provision-time Tiempo máximo que la escalabilidad automática espera a que se aprovisione un nodo. 15 minutos
ok-total-unready-count El número de nodos no leídos permitidos, con independencia del valor de max-total-unready-percentage. Tres nodos

Nota

Los parámetros ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes y daemonset-eviction-for-occupied-nodes están en disponibilidad general a partir de la versión 2024-05-01 de la API.

Establecimiento del perfil del escalador automático de clústeres en un nuevo clúster

Cree un clúster de AKS mediante el comando az aks create y establezca el perfil de escalador automático de clústeres mediante el parámetro cluster-autoscaler-profile.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --cluster-autoscaler-profile scan-interval=30s \
    --generate-ssh-keys

Establecimiento del perfil del escalador automático de clústeres en un clúster existente

Establezca el escalador automático de clústeres en un clúster existente mediante el comando az aks update y el parámetro cluster-autoscaler-profile. En el ejemplo siguiente, se configura el valor de intervalo de detección como 30 s:

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --cluster-autoscaler-profile scan-interval=30s

Configuración del perfil del escalador automático de clústeres para reducir verticalmente de forma agresiva

Nota

No se recomienda reducir verticalmente de forma agresiva los clústeres que experimentan escalado horizontal y reducción horizontal frecuentes en intervalos cortos, ya que podría dar lugar a tiempos de aprovisionamiento de nodos extendidos en estas circunstancias. Aumentar scale-down-delay-after-add puede ayudar en estas circunstancias al mantener el nodo más tiempo para controlar las cargas de trabajo entrantes.

El siguiente comando configura un perfil de reducción vertical agresivo. Examina el clúster cada 30 segundos, reanuda la evaluación de reducción vertical inmediatamente después de agregar un nodo y un minuto después de un error, hace que los nodos innecesarios y no leídos sean aptos para reducir verticalmente después de tres minutos, limita la terminación correcta a 30 segundos, permite que se eliminen hasta 1000 nodos vacíos a la vez y aumenta los límites de nodo no leídos al 100 % o 1000 nodos. También conserva explícitamente el comportamiento predeterminado de no omitir nodos con almacenamiento local y esperar hasta 15 minutos para que se aprovisione un nodo.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --cluster-autoscaler-profile scan-interval=30s,scale-down-delay-after-add=0m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Configuración del perfil del escalador automático de clústeres para cargas de trabajo en ráfagas

El siguiente comando configura un perfil para cargas de trabajo de ráfaga. Examina el clúster cada 20 segundos, pausa la evaluación de reducción vertical durante 10 minutos después de agregar un nodo para conservar la capacidad de las ráfagas entrantes, reanuda la evaluación un minuto después de un error, hace que los nodos innecesarios y no leídos se puedan reducir verticalmente después de cinco minutos, limita la terminación correcta a 30 segundos, permite eliminar hasta 100 nodos vacíos a la vez, y eleva los límites de nodo no leídos al 100 % o 1000 nodos. También conserva explícitamente el comportamiento predeterminado de no omitir nodos con almacenamiento local y esperar hasta 15 minutos para que se aprovisione un nodo.

az aks update \
    --resource-group "myResourceGroup" \
    --name myAKSCluster \
    --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Restablecimiento del perfil de escalador automático del clúster a los valores predeterminados

Restablezca el perfil del escalador automático de clústeres mediante el comando az aks update.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --cluster-autoscaler-profile ""

Recuperación de registros y estado del escalador automático del clúster

Puede recuperar las actualizaciones de registros y estado del escalador automático de clústeres para ayudar a diagnosticar y depurar los eventos del escalador automático. AKS administra el escalador automático del clúster en su nombre y lo ejecuta en el plano de control administrado. Para recopilar sus registros del plano de control, cree una configuración de diagnóstico de Azure Monitor para el clúster de AKS en el portal de Azure o use az monitor diagnostic-settings createy habilite la categoría de cluster-autoscaler registro.

  1. Configure una regla para que los registros de recursos inserten los registros del escalador automático del clúster en Log Analytics mediante las instrucciones del plano de control de AKS para configurar la recopilación de registros de recursos. Asegúrese de activar la casilla correspondiente a cluster-autoscaler al seleccionar las opciones para Registros.

  2. Seleccione la sección Registros del clúster.

  3. Si la configuración de diagnóstico usa Azure modo de diagnóstico, escriba la siguiente consulta en Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Si la configuración de diagnóstico usa el modo específico del recurso, escriba la consulta siguiente en su lugar:

    AKSControlPlane
    | where Category == "cluster-autoscaler"
    
  4. Consulte los eventos de escalado vertical no desencadenados del escalador automático de clústeres en la CLI.

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Consulte los eventos de advertencia del escalador automático de clústeres en la CLI.

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. El escalador automático de clústeres también escribe el estado de mantenimiento en un objeto configmap llamado cluster-autoscaler-status. Puede recuperar este estado mediante el siguiente kubectl comando:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Para más información, consulte las preguntas más frecuentes sobre el proyecto de GitHub Kubernetes/autoscaler.

Métricas del escalado automático de clústeres

Puede usar las métricas del plano de control (versión preliminar) con Azure Monitor servicio administrado para Prometheus para recopilar métricas del escalador automático del clúster. El controlplane-cluster-autoscaler destino de extracción está deshabilitado de forma predeterminada, por lo que debe habilitarlo para recopilar estas métricas.

Las métricas disponibles incluyen cluster_autoscaler_unschedulable_pods_count y cluster_autoscaler_unneeded_nodes_count, que muestran el número de pods que no se pueden programar y los nodos marcados como candidatos para la eliminación. También puede supervisar si el clúster es seguro para el escalado automático con cluster_autoscaler_cluster_safe_to_autoscale y si la reducción vertical se encuentra en un período de reescalación con cluster_autoscaler_scale_down_in_cooldown.

En este artículo le mostramos cómo escalar automáticamente el número de nodos de AKS. Asimismo, también puede usar el escalado automático horizontal de pods para ajustar automáticamente el número de pods ejecutan la aplicación. Para obtener instrucciones sobre cómo usar el escalado automático horizontal de pods, consulte Escalado de aplicaciones en AKS.

Para ayudar a mejorar aún más el uso de recursos del clúster y liberar CPU y memoria para otros pods, consulte Escalador automático vertical.