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. Además, comprueba periódicamente los nodos por si faltan pods en ejecución y reduce verticalmente la cantidad de nodos según sea necesario.

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 requiere 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.

Uso del escalador automático de clústeres en un clúster de AKS

Importante

El escalador automático del clúster es un componente de Kubernetes. Aunque el clúster de AKS usa un conjunto de escalado de máquinas virtuales para los nodos, no habilite ni edite manualmente la configuración de 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 de clústeres, 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
    

    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.

Uso del escalador automático de clústeres 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 Default value
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. 3 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 (versión preliminar) Si se omitirán los pods DaemonSet al calcular el uso de recursos para reducir verticalmente. false
daemonset-eviction-for-empty-nodes (versión preliminar) Si los pods DaemonSet se finalizarán correctamente desde nodos vacíos. false
daemonset-eviction-for-occupied-nodes (versión preliminar) Si los pods DaemonSet se finalizarán correctamente desde nodos que no estén vacíos. true
scale-down-utilization-threshold El nivel de uso del nodo, definido como la suma de los recursos solicitados dividida por la capacidad, por debajo del cual se puede considerar un nodo para la reducción vertical. 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

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
    

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.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,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

 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. Puede habilitar el nodo del plano de control para ver los registros y operaciones del escalador automático de clústeres.

  1. Configure una regla para que los registros de recursos inserten registros del escalador automático de clústeres en Log Analytics según estas instrucciones. Asegúrese de activar la casilla correspondiente a cluster-autoscaler al seleccionar las opciones para Registros.

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

  3. Escriba la consulta de ejemplo siguiente en Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Siempre que haya registros que recuperar, debería ver registros similares a los siguientes registros:

    Captura de pantalla de registros de Log Analytics.

  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 estos registros mediante el siguiente comando kubectl:

    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 escalador automático de clústeres

Puede habilitar métricas del plano de control (versión preliminar) para ver los registros y las operaciones del escalador automático de clústeres con el complemento de servicio administrado para Prometheus de Azure Monitor.

Pasos siguientes

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.