Habilitar el autoescalado de clústeres

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:

  1. 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 de replicas, minReplicas y maxReplicas como quieras. 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
    

Habilitar el autoescalado en un grupo de nodos

Para habilitar el autoescalado en un grupo de nodos de un clúster:

  1. Edita un nodePool específico en el archivo de configuración del clúster de usuarios e incluye la sección autoscaling. Define los valores de minReplicas y maxReplicas como quieras.

    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
    

Inhabilitar el autoescalado en un grupo de nodos

Para inhabilitar el autoescalado en un grupo de nodos específico, sigue estos pasos:

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

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

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 los kube-system Pods. Para obtener más información sobre cómo añadir manualmente un PodDisruptionBudget para los pods kube-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: