Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

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

Arquitectura de autoscaler

Figura 1 muestra la arquitectura del autoscaler y sus módulos principales:

Figura 1 Arquitectura de autoscaler

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.