Mecanismos de escalado de nodos
Kubernetes HPA está diseñado para pods. Sin embargo, si los recursos del clúster son insuficientes, solo puede agregar nodos. El escalado de los nodos de clúster podría ser laborioso. Ahora, con las nubes, puede agregar o eliminar nodos simplemente invocando a las API.
autoscaler es un componente proporcionado por Kubernetes para el ajuste automático de nodos de clúster en función del estado de programación de pods y el uso de recursos.
Requisitos previos
Antes de usar la función de ajuste de nodos, debe instalar el complemento de autoscaler de v1.13.8 o posterior.
Cómo funciona autoscaler
autoscaler pasa por dos procesos.
- Expansión horizontal: autoscaler comprueba todos los pods no programados cada 10 segundos y selecciona un grupo de nodos que cumpla con los requisitos de expansión según la política que establezcas.
- Reducción horizontal: autoscaler escanea todos los nodos cada 10 segundos. Si el número de solicitudes de pod en un nodo es menor que el porcentaje definido por el usuario para reducción, autoscaler simula si los pods en el nodo se pueden migrar a otros nodos. En caso afirmativo, el nodo se eliminará después de una ventana de tiempo inactivo.
- 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.
Arquitectura de autoscaler
Figura 1 muestra la arquitectura del autoscaler y sus módulos principales:
Descripción
- Estimator: Evalúa el número de nodos que se agregarán a cada grupo de nodos para alojar pods no programados.
- Simulator: Busca los nodos que cumplen las condiciones reducción en el escenario reducción.
- Expander: Selecciona un nodo óptimo del grupo de nodos seleccionado por el Estimador en función de la política definida por el usuario en el escenario de la expansión. Actualmente, el Expander tiene las siguientes políticas:
- Random: Se selecciona aleatoriamente un grupo de nodos.
- most-Pods: Selecciona el grupo de nodos que puede alojar el mayor número de pods no programados después de la expansión. Si varios grupos de nodos cumplen con el requisito, se seleccionará un grupo de nodos aleatorios.
- least-waste: Selecciona el grupo de nodos que tiene el menor desperdicio de recursos de CPU o memoria después de la función expansión.
- price: Selecciona el grupo de nodos en el que los nodos a agregar cuestan menos expansión.
- priority: Selecciona el grupo de nodos con la ponderación más alta. Las ponderaciones son definidas por el usuario.
Actualmente, CCE es compatible con todas las políticas excepto price. De forma predeterminada, los complementos de CCE utilizan la política least-waste.