Habilita el ajuste de escala automático de clústeres

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:

  1. 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 de replicas, minReplicas y maxReplicas como desees. Por ejemplo:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. 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:

  1. Edita un nodePool específico en el archivo de configuración del clúster de usuario y, además, incluye la sección autoscaling. Configura los valores de minReplicas y maxReplicas como desees.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. 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:

  1. Edita el archivo de configuración del clúster de usuario y quita la sección autoscaling de ese grupo de nodos.

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

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 Pods kube-system. A fin de obtener más información sobre cómo agregar un PodDisruptionBudget de forma manual para los Pods de kube-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: