Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 elimina cuando las cargas de trabajo pueden reasignarse de forma segura y se cumplen las condiciones para reducir la escala.
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
Cree un grupo de recursos con el comando
az group create.az group create --name myResourceGroup --location eastusCree 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-autoscalery especifique un nodo--min-county--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-keysTardará 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 de escala inmediatamente después de añadir un nodo y un minuto después de un fallo, hace que los nodos innecesarios y no preparados puedan optar a la reducción de escala después de tres minutos, limita la terminación ordenada a 30 segundos, permite eliminar hasta 1.000 nodos vacíos de una sola vez y aumenta los límites de nodos no preparados al 100 % o 1.000 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 con picos de actividad. Examina el clúster cada 20 segundos, pausa la evaluación de reducción durante 10 minutos después de añadir un nodo para mantener capacidad para los picos de demanda entrantes, reanuda la evaluación un minuto después de un fallo, hace que los nodos innecesarios y no preparados puedan reducirse después de cinco minutos, limita la terminación ordenada a 30 segundos, permite eliminar hasta 100 nodos vacíos a la vez y eleva los límites de nodos no preparados al 100 % o 1.000 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 ""
Uso de ProvisioningRequest con el escalador automático del clúster
ProvisioningRequest es un recurso personalizado que puede usar para solicitar recursos para un grupo de pods relacionados. El escalador automático del clúster considera estos pods como una sola unidad. En función de la clase de aprovisionamiento especificada, el escalador automático del clúster puede reservar recursos existentes para los pods o ampliar el clúster.
Nota
-
ProvisioningRequestLa compatibilidad requiere un clúster de AKS que ejecute Kubernetes versión 1.33 o posterior. - Considere la posibilidad de usar un perfil agresivo de reducción al usar
ProvisioningRequestpara que los nodos no utilizados de los aumentos de escala parciales o no completados se eliminen rápidamente.
| Clase de aprovisionamiento | Descripción |
|---|---|
check-capacity.autoscaling.x-k8s.io |
Comprueba si el clúster tiene suficientes recursos para los pods especificados. Si los recursos están disponibles, el escalador automático del clúster los reserva para el ProvisioningRequest durante 10 minutos para evitar que otros ProvisioningRequests reclamen esos mismos recursos. |
best-effort-atomic-scale-up.autoscaling.x-k8s.io |
El escalador automático del clúster hace todo lo posible por aprovisionar todos los recursos solicitados en una sola operación de ampliación. Si no puede aprovisionarlo todo, el ProvisioningRequest falla y el escalador automático del clúster lo vuelve a intentar tras un periodo de espera. |
Para obtener un ejemplo completo que muestre la integración de Kueue con el escalador automático del clúster y ProvisioningRequest, consulte Configuración de Kueue con el escalador automático de clústeres en AKS.
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 los 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 create y habilite la categoría de registro cluster-autoscaler.
Configure una regla de registros de recursos para que envíen los registros del escalador automático de clústeres a Log Analytics siguiendo las instrucciones de Configurar la recopilación de registros de recursos para el plano de control de AKS. Asegúrese de activar la casilla correspondiente a
cluster-autoscaleral seleccionar las opciones para Registros.Seleccione la sección Registros del clúster.
Si la configuración de diagnóstico usa el modo de diagnóstico de Azure, 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"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=NotTriggerScaleUpConsulte los eventos de advertencia del escalador automático de clústeres en la CLI.
kubectl get events --field-selector source=cluster-autoscaler,type=WarningEl escalador automático de clústeres también escribe el estado de mantenimiento en un objeto
configmapllamadocluster-autoscaler-status. Puede recuperar este estado mediante el siguientekubectlcomando: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 el servicio administrado de Azure Monitor 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 monitorizar si el clúster se puede escalar automáticamente de forma segura con cluster_autoscaler_cluster_safe_to_autoscale y si la reducción de escala se encuentra en un período de espera con cluster_autoscaler_scale_down_in_cooldown.
Contenido relacionado
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.