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.
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.
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?
Cree un grupo de recursos con el comando
az group create
.az group create --name myResourceGroup --location eastus
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 \ --generate-ssh-keys
Tardará unos minutos en crear el clúster y configurar las opciones del escalado automático de clústeres.
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.
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.
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
.
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
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
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.
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.
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.
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 |
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 |
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 |
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. Si usa la CLI para actualizar estas marcas, asegúrese de que usa la versión 2.63 o posterior.
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ámetrocluster-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
Establezca el escalador automático de clústeres en un clúster existente mediante el comando
az aks update
y el parámetrocluster-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=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
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
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 ""
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.
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.Seleccione la sección Registro del clúster.
Escriba la consulta de ejemplo siguiente en Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
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
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
El escalador automático de clústeres también escribe el estado de mantenimiento en un objeto
configmap
llamadocluster-autoscaler-status
. Puede recuperar estos registros mediante el siguiente comandokubectl
: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.
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.
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.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: