En este documento se describe el autoescalado de un clúster de usuario en Google Distributed Cloud.
El autoescalado de clúster aumenta o reduce el número de nodos de un grupo de nodos en función de las demandas de tus cargas de trabajo.
Antes de empezar
Consulta las limitaciones de la herramienta de ajuste automático de clústeres.
La herramienta de escalado automático de clústeres hace las siguientes suposiciones:
Todos los pods replicados se pueden reiniciar en otro nodo, lo que puede provocar una breve interrupción. Si tus servicios no pueden tolerar interrupciones, no te recomendamos que uses el escalador automático de clústeres.
Los usuarios o administradores no gestionan los nodos manualmente. Si el autoescalado está habilitado en un grupo de nodos, no puedes anular el campo
replicas
del grupo de nodos.Todos los nodos de un mismo grupo de nodos tienen el mismo conjunto de etiquetas.
Cómo funciona el ajuste de escala automático de clústeres
La herramienta de adaptación dinámica de clústeres funciona por grupo de nodos. Cuando habilitas el autoescalado en un grupo de nodos, especificas el número mínimo y máximo de nodos del grupo.
El autoescalador de clústeres aumenta o reduce automáticamente el número de nodos del grupo en función de las solicitudes de recursos (en lugar de la utilización real de los recursos) de los pods que se ejecutan en los nodos. Comprueba periódicamente el estado de los pods y los nodos, y toma medidas:
Si no se pueden programar pods porque no hay suficientes nodos en el grupo, el autoescalador de clúster añade nodos hasta el máximo especificado.
Si los nodos no se utilizan lo suficiente y todos los pods se pueden programar con menos nodos en el grupo, el autoescalador de clústeres elimina nodos hasta alcanzar el mínimo especificado. Si un nodo no se puede drenar correctamente, se termina de forma forzada y el disco gestionado por Kubernetes adjunto se separa de forma segura.
Si tus pods han solicitado muy pocos recursos (o no han cambiado los valores predeterminados, que pueden ser insuficientes) y tus nodos tienen escasez, el escalador automático de clústeres no corregirá esa situación. Para asegurarte de que el autoescalador de clústeres funciona correctamente, puedes hacer solicitudes de recursos explícitas para todas tus cargas de trabajo.
En el caso de un grupo de nodos concreto, minReplicas
debe ser ≥ 1. Sin embargo, la suma de los nodos de clúster de usuarios no alterados en un momento dado debe ser al menos 3. Esto significa que la suma de los valores de minReplicas
de todos los grupos de nodos con autoescalado, más la suma de los valores de replicas
de todos los grupos de nodos sin autoescalado, debe ser al menos 3.
El escalador automático de clústeres tiene en cuenta el coste relativo de los tipos de instancia de los distintos grupos de nodos e intenta ampliar el grupo de nodos de forma que se produzca el menor desperdicio posible.
Crear un clúster de usuarios con el autoescalado
Para crear un clúster de usuario con el escalado automático habilitado en un grupo de nodos, rellena la sección autoscaling
del grupo de nodos en el archivo de configuración del clúster de usuario. Por ejemplo:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
La configuración anterior crea un grupo de nodos con 3 réplicas y aplica el autoescalado con un tamaño mínimo de 1 y un tamaño máximo de 5.
El valor de minReplicas
debe ser ≥ 1. Un grupo de nodos no se puede reducir a cero nodos.
Añadir un grupo de nodos con autoescalado
Para añadir un grupo de nodos con autoescalado a un clúster, sigue estos pasos:
Edita el archivo de configuración del clúster de usuarios para añadir un nuevo grupo de nodos e incluye una sección
autoscaling
para el grupo. Define los valores dereplicas
,minReplicas
ymaxReplicas
como quieras. Por ejemplo:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
Actualiza el clúster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Habilitar el autoescalado en un grupo de nodos
Para habilitar el autoescalado en un grupo de nodos de un clúster:
Edita un
nodePool
específico en el archivo de configuración del clúster de usuarios e incluye la secciónautoscaling
. Define los valores deminReplicas
ymaxReplicas
como quieras.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Actualiza el clúster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Inhabilitar el autoescalado en un grupo de nodos
Para inhabilitar el autoescalado en un grupo de nodos específico, sigue estos pasos:
Edita el archivo de configuración del clúster de usuarios y elimina la sección
autoscaling
de ese grupo de nodos.Ejecuta
gkectl update cluster
.
Comprobar el comportamiento de la herramienta de adaptación dinámica de clústeres
Puedes determinar qué está haciendo el autoescalador de clústeres de varias formas.
Consultar los registros de la herramienta de adaptación dinámica de clústeres
Primero, busca el nombre del pod de la herramienta de ajuste automático de escala de clústeres:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
Consulta los registros del pod de la herramienta de adaptación dinámica de clústeres:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
Sustituye POD_NAME por el nombre del pod de la herramienta de ajuste automático de escala de clústeres.
Consultar el mapa de configuración
La herramienta de adaptación dinámica de clústeres publica el kube-system/cluster-autoscaler-status
mapa de configuración.
Para ver el mapa de configuración, haz lo siguiente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml
Consulta los eventos de escalado automático de clústeres.
Puedes consultar los eventos de la herramienta de ajuste automático de escala de clústeres:
- En pods (especialmente en aquellos que no se pueden programar o en nodos infrautilizados)
- En nodos
- En el mapa de configuración
kube-system/cluster-autoscaler-status
.
Limitaciones
El escalador automático de clústeres tiene las siguientes limitaciones:
No se admite la programación personalizada con filtros modificados.
Los nodos no se amplían si los pods tienen un valor de
PriorityClass
inferior a-10
. Consulte más información en el artículo ¿Cómo funciona Cluster Autoscaler con la prioridad y la preferencia de los pods?El autoescalado de los grupos de nodos de Windows no se admite.
Solución de problemas
En ocasiones, la herramienta de adaptación dinámica de clústeres no puede reducir la escala por completo y queda un nodo adicional después de la reducción. Esto puede ocurrir cuando los pods del sistema necesarios se programan en nodos diferentes, ya que no hay ningún activador para que esos pods se muevan a otro nodo. Consulta Tengo un par de nodos con una utilización baja, pero no se han reducido. ¿Por qué?. Para evitar esta limitación, puedes configurar un presupuesto de interrupción de pods.
Si tienes problemas para reducir la escala de tu clúster, consulta Programación e interrupción de pods. Es posible que tengas que añadir un
PodDisruptionBudget
para loskube-system
Pods. Para obtener más información sobre cómo añadir manualmente unPodDisruptionBudget
para los podskube-system
, consulta las preguntas frecuentes de la herramienta de adaptación dinámica de clústeres de Kubernetes.Al reducir el escalado, el autoescalador de clústeres respeta las reglas de programación y desalojo definidas en los pods. Estas restricciones pueden impedir que el escalador automático elimine un nodo. No se podrá eliminar un nodo si contiene un pod que cumpla alguna de estas condiciones:
Las reglas de afinidad o antiafinidad del pod impiden que se reprograme.
El Pod tiene almacenamiento local.
El pod no está gestionado por un controlador, como una implementación, un StatefulSet, un trabajo o un ReplicaSet.
El pod está en el espacio de nombres kube-system y no tiene un PodDisruptionBudget.
Es posible que el PodDisruptionBudget de una aplicación impida el autoescalado. Si la eliminación de nodos provoca que se supere el presupuesto, el clúster no se reducirá.
Más información
Para obtener más información sobre la herramienta de adaptación dinámica de clústeres y cómo evitar interrupciones, consulta las siguientes preguntas en las preguntas frecuentes de la herramienta de adaptación dinámica de clústeres de Kubernetes:
- ¿Cómo funciona la reducción de escala?
- ¿La herramienta de adaptación dinámica de clústeres funciona con PodDisruptionBudget en la reducción de escala?
- ¿Qué tipos de pods pueden impedir que la herramienta de adaptación dinámica del clúster elimine un nodo?