En este documento, se describe el ajuste automático de escala de un clúster de usuarios en Google Distributed Cloud.
El ajuste de escala automático del clúster aumenta o disminuye la cantidad de nodos en un grupo de nodos según las demandas de tus cargas de trabajo.
Antes de comenzar
Lee sobre las limitaciones del escalador automático de clústeres.
El escalador automático del clúster actúa según las siguientes suposiciones:
Todos los Pods replicados se pueden reiniciar en otro nodo, lo que podría provocar una interrupción breve. Si tus servicios no pueden tolerar interrupciones, no recomendamos usar el escalador automático del clúster.
Los usuarios o administradores no controlan los nodos de forma manual. Si el ajuste de escala automático está habilitado para un grupo de nodos, no puedes anular el campo
replicas
del grupo de nodos.Todos los nodos de un grupo tienen el mismo conjunto de etiquetas.
Cómo funciona el ajuste de escala automático de clústeres
El escalador automático del clúster funciona por grupo de nodos. Cuando habilitas el ajuste de escala automático para un grupo de nodos, especificas una cantidad mínima y máxima de nodos para el grupo.
El escalador automático del clúster aumenta o disminuye la cantidad de nodos en el grupo automáticamente según las solicitudes de recursos (no el uso real) de los Pods que se ejecutan en los nodos. Periódicamente, el escalador verifica el estado de los pods y los nodos, y realiza las acciones correspondientes:
Si no es posible programar Pods porque el grupo no tiene nodos suficientes, el escalador automático del clúster agrega los nodos necesarios (siempre y cuando no se haya alcanzado el máximo especificado).
Si sobra capacidad de nodos y resulta posible programar todos los Pods con una cantidad menor de nodos en el grupo, el escalador automático del clúster quita los nodos sobrantes (siempre y cuando no se haya alcanzado el tamaño mínimo configurado para el grupo). Si un nodo no se puede desviar de forma correcta, se fuerza su finalización y el disco administrado y administrado de Kubernetes se desconecta de forma segura.
Si tus pods solicitan una cantidad insuficiente de recursos (o no cambian los valores predeterminados, que podrían no alcanzar) y tus nodos sufren escasez, el escalador automático del clúster no corrige la situación. Para ayudar a garantizar que el escalador automático del clúster funcione de forma precisa, debes realizar solicitudes de recursos explícitas para todas tus cargas de trabajo.
En el caso de un grupo de nodos individual, minReplicas
debe ser mayor o igual que 1. Sin embargo, la suma de los nodos del clúster de usuario sin taint en cualquier momento debe ser al menos 3. Esto significa que la suma de los valores minReplicas
de todos los grupos de nodos con ajuste de escala automático más la suma de los valores replicas
de todos los grupos de nodos sin ajuste de escala automático debe ser de 3 al menos.
El escalador automático del clúster considera el costo relativo de los tipos de instancia en los diversos grupos de nodos y, luego, intenta expandir el grupo de nodos de una manera que genere el menor desperdicio posible.
Crea un clúster de usuario con ajuste de escala automático
Para crear un clúster de usuario con el ajuste de escala automático habilitado para un grupo de nodos, completa 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 ajuste de escala automático con el tamaño mínimo de 1 y el tamaño máximo de 5.
El valor minReplicas
debe ser ≥ 1. Un grupo de nodos no puede reducirse a cero nodos.
Agrega un grupo de nodos con ajuste de escala automático
Para agregar un grupo de nodos con ajuste de escala automático a un clúster existente, haz lo siguiente:
Edita el archivo de configuración del clúster de usuario para agregar un grupo de nodos nuevo y, luego, incluye una sección
autoscaling
para el grupo. Establece los valores dereplicas
,minReplicas
ymaxReplicas
como desees. 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
Habilita el ajuste de escala automático para un grupo de nodos existente
Para habilitar el ajuste de escala automático en un grupo de nodos de un clúster existente, sigue estos pasos:
Edita un
nodePool
específico en el archivo de configuración del clúster de usuario y, luego, incluye la secciónautoscaling
. Establece los valores deminReplicas
ymaxReplicas
como desees.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
Inhabilita el ajuste de escala automático para un grupo de nodos existente
Para inhabilitar el ajuste de escala automático en un grupo de nodos específico, sigue estos pasos:
Edita el archivo de configuración del clúster de usuario y quita la sección
autoscaling
de ese grupo de nodos.Ejecuta
gkectl update cluster
.
Verifica el comportamiento del escalador automático de clústeres
Puedes determinar lo que hace el escalador automático del clúster de varias maneras.
Verifica los registros del escalador automático de clústeres
Primero, busca el nombre del Pod del escalador automático de clústeres:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
Verifica los registros en el Pod del escalador automático de clústeres:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
Reemplaza POD_NAME por el nombre del Pod del escalador automático de clústeres.
Verifica el mapa de configuración
El escalador automático de clústeres publica el mapa de configuración kube-system/cluster-autoscaler-status
.
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
Verifica los eventos de ajuste de escala automático del clúster.
Puedes verificar los eventos de ajuste de escala automático del clúster:
- En Pods (en particular, aquellos que no se pueden programar o en nodos con poco uso)
- En nodos
- En el mapa de configuración de
kube-system/cluster-autoscaler-status
.
Limitaciones
El escalador automático del clúster tiene las siguientes limitaciones:
No se admite la programación personalizada con filtros alterados.
Los nodos no se escalarán verticalmente si los Pods tienen un valor
PriorityClass
inferior a-10
. Obtén más información en ¿Cómo funciona el escalador automático de clústeres con la prioridad y la interrupción del pod?.El ajuste de escala automático para los grupos de nodos de Windows no es compatible.
Soluciona problemas
En ocasiones, el escalador automático del clúster no puede reducir la escala por completo, y sigue existiendo un nodo de más después de reducir la escala. Esto puede ocurrir cuando los pods obligatorios del sistema están programados en nodos diferentes, ya que no hay ningún activador que haga que esos pods se transfieran a otro nodo. Consulta Tengo un par de nodos con baja utilización, pero el ajuste de escala no los quita. ¿Por qué? Como solución alternativa a 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 debas agregar un
PodDisruptionBudget
para los Podskube-system
. A fin de obtener más información sobre cómo agregar unPodDisruptionBudget
de forma manual para los Pods dekube-system
, consulta las Preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes.Cuando reduce la escala, el escalador automático del clúster respeta las reglas de programación y expulsión establecidas para los pods. Estas restricciones pueden impedir que el escalador automático borre un nodo. Puede que se impida la eliminación de un nodo si este contiene un pod con alguna de las siguientes condiciones:
Las reglas de afinidad o antiafinidad del Pod impiden la reprogramación.
Pods con almacenamiento local
El pod no se encuentra bajo la administración de un controlador, como Deployment, StatefulSet, Job o ReplicaSet.
El Pod se encuentra en el espacio de nombres de kube-system y no tiene un PodDisruptionBudget.
El PodDisruptionBudget de una aplicación podría impedir el ajuste de escala automático. Si borrar un nodo provocaría que se supere el presupuesto, no se reduce la escala del clúster.
Más información
Para obtener más información sobre el escalador automático de clústeres y la prevención de interrupciones, consulta las siguientes preguntas frecuentes sobre el escalador automático de clústeres de Kubernetes:
- ¿Cómo funciona la reducción vertical de la escala?
- ¿El escalador automático de clústeres funciona con PodDisruptionBudget para la reducción de la escala?
- ¿Qué tipos de Pods pueden impedir que el escalador automático de clústeres quite un nodo?