Habilita el ajuste de escala automático del clúster

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:

  1. 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 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
    

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:

  1. Edita un nodePool específico en el archivo de configuración del clúster de usuario y, luego, incluye la sección autoscaling. Establece 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
    

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:

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

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