autoscaler
Presentación
Autoscaler es un importante controlador de Kubernetes. Es compatible con el ajuste de microservicios y es clave para el diseño sin servidor.
Cuando el uso de CPU o memoria de un microservicio es demasiado alto, se activa el escalado automático de pods horizontal para agregar pods para reducir la carga. Estos pods se pueden reducir automáticamente cuando la carga es baja, lo que permite que el microservicio funcione de la manera más eficiente posible.
CCE simplifica la creación, actualización y ajuste manual de clústeres de Kubernetes, en los que las cargas de tráfico cambian con el tiempo. Para equilibrar el uso de recursos y el rendimiento de las cargas de trabajo de los nodos, Kubernetes introduce el complemento de escalado automático para cambiar el tamaño de un clúster automáticamente en función del uso de recursos requerido para las cargas de trabajo implementadas en el clúster. Para obtener más información, véase Creación de una política del ajuste de nodos.
Comunidad de código abierto https://github.com/kubernetes/autoscaler
Cómo funciona el complemento
autoscaler controla la expansión y la reducción automáticas.
- Expansión automática
Puede elegir cualquiera de los siguientes métodos:
- Si los pods de un clúster no se pueden programar debido a nodos de trabajo insuficientes, se activa el ajuste del clúster para agregar nodos. Los nodos que se van a agregar tienen la misma especificación que la configurada para el grupo de nodos al que pertenecen los nodos.
La expansión automática se realizará cuando:
- Los recursos del nodo son insuficientes.
- No se establece ninguna política de afinidad de nodo en la configuración de programación de pod. Es decir, si un nodo se ha configurado como un nodo de afinidad para pods, no se agregará automáticamente ningún nodo cuando los pods no se puedan programar. Para obtener más información acerca de cómo configurar la política de afinidad de nodo, consulte Política de programación (afinidad/antiafinidad).
- Cuando el clúster cumple con la política de ajuste de nodo, también se activa la expansión del clúster. Para obtener más información, véase Creación de una política del ajuste de nodos.
El complemento sigue la política "No Menos, No Más". Por ejemplo, si se requieren tres núcleos para crear un pod y el sistema admite nodos de cuatro núcleos y ocho núcleos, el escalador automático creará preferentemente un nodo de cuatro núcleos.
- Si los pods de un clúster no se pueden programar debido a nodos de trabajo insuficientes, se activa el ajuste del clúster para agregar nodos. Los nodos que se van a agregar tienen la misma especificación que la configurada para el grupo de nodos al que pertenecen los nodos.
- Reducción automática
Cuando un nodo de clúster está inactivo durante un período de tiempo (10 minutos de forma predeterminada), se activa la ampliación del clúster y el nodo se elimina automáticamente. Sin embargo, no se puede eliminar un nodo de un clúster si existen los siguientes pods:
- Pods que no cumplen con los requisitos específicos establecidos en Pod Disruption Budgets (PodDisruptionBudget)
- Pods que no se pueden programar para otros nodos debido a restricciones como las políticas de afinidad y antiafinidad
- Pods que tienen la anotación cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'
- Pods (excepto aquellos creados por DaemonSets en el espacio de nombres del sistema kube) que existen en el espacio de nombres del sistema kube en el nodo
- Pods que no son creados por el controlador (Deployment/ReplicaSet/job/StatefulSet)
Cuando un nodo cumple con las condiciones de la reducción, el autoscaler agrega la mancha DeletionCandidateOfClusterAutoscaler al nodo por adelantado para evitar que los pods se programen en el nodo. Después de desinstalar el complemento de autoscaler, si la mancha todavía existe en el nodo, elimínelo manualmente.
Notas y restricciones
- Solo los clústeres de v1.9.7-r1 y posteriores admiten el escalador automático.
- Asegúrese de que hay suficientes recursos para instalar el complemento.
- El autoscaler solo puede agregar o quitar los nodos de VM de pago por uso.
- El grupo de nodos predeterminado no admite el ajuste automático. Para obtener más información, véase Descripción del DefaultPool.
Instalación del complemento
- Inicie sesión en la consola de CCE y acceda a la consola del clúster. Elija Add-ons en el panel de navegación, localice autoscaler a la derecha y haga clic en Install.
- Configure los parámetros de instalación del complemento.
Tabla 1 Configuración de las especificaciones Parámetro
Descripción
Add-on Specifications
El complemento se puede desplegar en las siguientes especificaciones:
NOTA:Cuando el complemento del autoscaler se despliega en modo HA o personalizado, existen las políticas de antiafinidad entre las instancias de complemento y las instancias de complemento se despliegan en diferentes nodos. Por lo tanto, el número de nodos disponibles en el clúster debe ser mayor o igual que el número de instancias de complemento para garantizar una alta disponibilidad del complemento.
- Single: El complemento se despliega con un solo pod.
- HA50: El complemento se despliega con dos pods, sirviendo a un clúster con 50 nodos y asegurando una alta disponibilidad.
- HA200: El complemento se despliega con dos pods, sirviendo a un clúster con 50 nodos y asegurando una alta disponibilidad. Cada pod utiliza más recursos que los de la especificación HA50.
- Custom: Puede personalizar el número de pods y las especificaciones según sea necesario.
Tabla 2 Configuración de parámetros Parámetro
Descripción
Scaling
Puede seleccionar las siguientes opciones según sea necesario:
- Los nodos se agregan automáticamente (desde el grupo de nodos) cuando no se pueden programar los pods del clúster.
Es decir, cuando un pod está en estado Pending, se realiza una expansión automática. Si un nodo se ha configurado como un nodo de afinidad para los pods, no se agregará automáticamente ningún nodo cuando los pods no se puedan programar. En general, una política de HPA funciona con tal ajuste. Para obtener más información, véase Uso de HPA y CA para el ajuste automático de cargas de trabajo y nodos.
Si este parámetro no está seleccionado, el ajuste solo se puede realizar con las políticas de ajuste de nodos.
- Reducción automática de nodo
- Node Idle Time (min): Tiempo durante el cual un nodo no debe ser necesario antes de que sea elegible para escalar hacia abajo. Valor predeterminado: 10 minutos.
- Scale-in Threshold: Si el porcentaje de CPU y memoria solicitada en un nodo está por debajo de este umbral, se activará la reducción automática de escala para eliminar el nodo del clúster. El valor predeterminado es 0.5, lo que significa 50%.
- Stabilization Window (s)
¿Cuánto tiempo después de una expansión se reanuda una evaluación de reducción. Valor predeterminado: 10 minutos.
NOTA:Si existen ambas expansión y reducción automáticas en un clúster, se recomienda establecer How long after a expansión that a reducción evaluation resumes en 0 minutos. Esto puede evitar que la reducción horizontal de nodo se bloquee debido a la expansión continua de algunos grupos de nodos o reintentos tras un fallo de expansión que resulta en un desperdicio inesperado de recursos de nodo.
Cuánto tiempo después de la eliminación del nodo se reanuda una evaluación de reducción. Valor predeterminado: 10 minutos.
Cuánto tiempo después de un fallo de reducción se reanuda una evaluación de reducción. Valor predeterminado: 3 minutos. Para obtener detalles sobre el impacto y la relación entre los intervalos de refrigeración reducción configurados en el grupo de nodos y el autoscaler, consulte Descripción del periodo de enfriamiento a escala.
- Max. Nodes for Batch Deletion: Número máximo de nodos vacíos que se pueden eliminar al mismo tiempo. Valor predeterminado: 10.
Esta característica solo se aplica a los nodos inactivos. Los nodos inactivos se pueden escalar simultáneamente. Los nodos que no están inactivos solo se pueden escalar uno por uno.NOTA:
Durante la reducción del nodo, si el pod del nodo no necesita ser desalojado (como los pods de DaemonSet), el nodo está inactivo. De lo contrario, el nodo no está inactivo.
- Check Interval: Intervalo para comprobar de nuevo un nodo que no se podía quitar antes. Valor predeterminado: 5 minutos.
Total Nodes
Número máximo de nodos que puede gestionar el clúster, dentro del cual se realiza la expansión horizontal del clúster.
Total CPUs
Suma máxima de núcleos de CPU de todos los nodos de un clúster, dentro del cual se realiza la expansión horizontal del clúster.
Total Memory (GB)
Suma máxima de memoria de todos los nodos de un clúster, dentro del cual se realiza la expansión horizontal del clúster.
- Cuando se complete la configuración, haga clic en Install.
Descripción del periodo de enfriamiento a escala
Los intervalos de enfriamiento de escalado se pueden configurar en la configuración del grupo de nodos y en la configuración del complemento del autoscaler.
Intervalo de enfriamiento de reducción configurado en un grupo de nodos
Este intervalo indica el período durante el cual no se pueden eliminar los nodos agregados al grupo de nodos actual después de una operación de expansión. Este intervalo tiene efecto en el nivel del grupo de nodos.
Intervalo de enfriamiento de reducción configurado en el complemento del autoscaler
El intervalo después de una expansión indica el período durante el cual no se puede escalar todo el clúster después de que el complemento de autoscaler active expansión (debido a los pods, las métricas y las políticas de ajuste no programables). Este intervalo tiene efecto a nivel de clúster.
El intervalo después de eliminar un nodo indica el período durante el cual no se puede escalar el clúster después de que el complemento de autoscaler active reducción. Este intervalo tiene efecto a nivel de clúster.
El intervalo después de una reducción fallida indica el período durante el cual el clúster no se puede escalar después de que el complemento de autoscaler active la reducción. Este intervalo tiene efecto a nivel de clúster.
Historial de cambios
Versión del complemento |
Versión de clúster admitida |
Versión de la comunidad (solo para clústeres de v1.17 y posteriores) |
---|---|---|
1.25.21 |
/v1.25.*/ |
|
1.25.11 |
/v1.25.*/ |
|
1.25.7 |
/v1.25.*/ |
|
1.23.31 |
/v1.23.*/ |
|
1.23.21 |
/v1.23.*/ |
|
1.23.17 |
/v1.23.*/ |
|
1.23.10 |
/v1.23.*/ |
|
1.23.9 |
/v1.23.*/ |
|
1.23.8 |
/v1.23.*/ |
|
1.23.7 |
/v1.23.*/ |
|
1.23.3 |
/v1.23.*/ |
|
1.21.29 |
/v1.21.*/ |
|
1.21.20 |
/v1.21.*/ |
|
1.21.16 |
/v1.21.*/ |
|
1.21.9 |
/v1.21.*/ |
|
1.21.8 |
/v1.21.*/ |
|
1.21.6 |
/v1.21.*/ |
|
1.21.4 |
/v1.21.*/ |
|
1.21.2 |
/v1.21.*/ |
|
1.21.1 |
/v1.21.*/ |
|
1.19.35 |
/v1.19.*/ |
|
1.19.27 |
/v1.19.*/ |
|
1.19.22 |
/v1.19.*/ |
|
1.19.14 |
/v1.19.*/ |
|
1.19.13 |
/v1.19.*/ |
|
1.19.12 |
/v1.19.*/ |
|
1.19.11 |
/v1.19.*/ |
|
1.19.9 |
/v1.19.*/ |
|
1.19.8 |
/v1.19.*/ |
|
1.19.7 |
/v1.19.*/ |
|
1.19.6 |
/v1.19.*/ |
|
1.19.3 |
/v1.19.*/ |
|
1.17.27 |
/v1.17.*/ |
|
1.17.22 |
/v1.17.*/ |
|
1.17.21 |
/v1.17.*/ |
|
1.17.19 |
/v1.17.*/ |
|
1.17.17 |
/v1.17.*/ |
|
1.17.16 |
/v1.17.*/ |
|
1.17.15 |
/v1.17.*/ |
|
1.17.14 |
/v1.17.*/ |
|
1.17.8 |
/v1.17.*/ |
|
1.17.7 |
/v1.17.*/ |
|
1.17.5 |
/v1.17.*/ |
|
1.17.2 |
/v1.17.*/ |