En este documento, se describe el ajuste de escala automático para un clúster de usuario en GKE en VMware.
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 del clúster.
El escalador automático de clúster realiza 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 de 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 de clúster funciona en grupos de nodos. Cuando habilitas el ajuste de escala automático en 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 de forma automática según las solicitudes de recursos (en lugar del uso real) de los Pods que se ejecutan en los nodos. Verifica el estado de los Pods y los nodos de forma periódica, y realiza las acciones correspondientes:
Si los Pods no son programables porque no hay suficientes nodos en el grupo, el escalador automático del clúster agrega nodos hasta el máximo especificado.
Si los nodos tienen poco uso y todos los Pods podrían programarse con menos nodos en el grupo, el escalador automático del clúster quita nodos hasta el mínimo especificado. Si un nodo no se puede vaciar de forma correcta, el nodo se cierra de manera forzosa y el disco conectado administrado por Kubernetes se desconecta de forma segura.
Si tus Pods solicitaron muy pocos recursos (o no cambiaron los valores predeterminados, que podrían no ser suficientes) y tus nodos tienen escasez, el escalador automático del clúster no corrige esa situación. Puedes ayudar a garantizar que el escalador automático del clúster funcione de forma correcta si realizas 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 tiene en cuenta el costo relativo de los tipos de instancias en los diversos grupos de nodos y, luego, intenta expandir el grupo de nodos de manera tal que se produzca el menor desperdicio posible.
Crea un clúster de usuario con ajuste de escala automático
Si quieres 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 del grupo de nodos en 1 y el tamaño máximo del grupo de nodos en 5.
El valor minReplicas
debe ser ≥ 1. Un grupo de nodos no puede reducir la escala verticalmente a cero.
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, además, incluye una sección
autoscaling
para el grupo. Configura 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
Habilite 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, además, incluye la secciónautoscaling
. Configura 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
Inhabilite 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 del clúster:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
Verifica los registros del Pod del escalador automático del clúster:
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 del clúster.
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, sigue estos pasos:
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 escalan 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 del clúster con la prioridad y la interrupción de Pods?No se admite el ajuste de escala automático para grupos de nodos de Windows.
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 evitan las reprogramaciones.
Pods con almacenamiento local
Un controlador como un Deployment, StatefulSet, trabajo o ReplicaSet no administra el Pod.
El Pod está 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 nodos provoca que se supere el presupuesto, el clúster no reduce la escala verticalmente.
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 de escala?
- ¿El escalador automático de clúster funciona con PodDisruptionBudget para la reducción de escala?
- ¿Qué tipos de Pods pueden impedir que el escalador automático del clúster quite un nodo?