Acerca del aprovisionamiento automático de nodos


En esta página, se explica cómo funciona el aprovisionamiento automático de nodos en clústeres estándar de Google Kubernetes Engine (GKE). Con el aprovisionamiento automático de nodos, los nodos se escalan de forma automática para cumplir con los requisitos de tus cargas de trabajo.

Con los clústeres de Autopilot, no necesitas aprovisionar nodos ni administrar grupos de nodos de forma manual, ya que GKE administra de forma automática el escalamiento y el aprovisionamiento de nodos.

Por qué usar el aprovisionamiento automático de nodos

El aprovisionamiento automático de nodos administra y escala automáticamente un conjunto de grupos de nodos en nombre del usuario. Sin el aprovisionamiento automático de nodos, el escalador automático del clúster de GKE solo crea nodos a partir de grupos de nodos creados por el usuario. Con el aprovisionamiento automático de nodos, GKE crea y borra grupos de nodos de forma automática.

Características no compatibles

El aprovisionamiento automático de nodos no create grupos de nodos que usen cualquiera de las siguientes funciones. Sin embargo, el escalador automático del clúster escala los nodos en grupos de nodos existentes con estas características:

Cómo funciona el aprovisionamiento automático de nodos

El aprovisionamiento automático de nodos es un mecanismo del escalador automático del clúster que solo escala los grupos de nodos existentes. Con el aprovisionamiento automático de nodos habilitado, el escalador automático del clúster puede crear grupos de nodos de forma automática en función de las especificaciones de Pods no programables.

El aprovisionamiento automático de nodos crea grupos de nodos de acuerdo con esta información:

Límites de recursos

El aprovisionamiento automático de nodos y el escalador automático del clúster tienen límites en los siguientes niveles:

  • Nivel del grupo de nodos: los grupos de nodos aprovisionados automáticamente están limitados a 1,000 nodos.
  • Nivel de clúster:
    • Todos los límites de aprovisionamiento automático que definas se aplicarán en función de los recursos totales de CPU y memoria usados en todos los grupos de nodos, no solo en los grupos de aprovisionamiento automático.
    • El escalador automático de clúster no crea nodos nuevos si al hacerlo se excede uno de los límites definidos Si ya se excedieron los límites, GKE no borra los nodos.

Separación de cargas de trabajo

Si los Pods pendientes tienen tolerancias y afinidades de nodo, el aprovisionamiento automático de nodos puede aprovisionar nodos con etiquetas y taints que coincidan.

El aprovisionamiento automático de nodos podría crear grupos de nodos con etiquetas y taints si se cumplen las siguientes condiciones:

  • Un Pod pendiente requiere un nodo con una clave de etiqueta y un valor específicos.
  • El pod tiene una tolerancia para un taint con la misma clave.
  • La tolerancia es para el efecto NoSchedule, el efecto NoExecute o todos los efectos.

Si deseas obtener instrucciones, consulta Configura la separación de cargas de trabajo en GKE.

Eliminación de grupos de nodos aprovisionados de forma automática

Cuando no hay nodos en un grupo de nodos aprovisionados de forma automática, GKE borra el grupo de nodos. GKE no borra grupos de nodos que no se aprovisionan de forma automática.

Tipos de máquina admitidos

El aprovisionamiento automático de nodos analiza los requisitos de los Pods en el clúster para determinar qué tipo de nodos se adapta mejor a ellos.

De forma predeterminada, GKE usa la serie de máquina E2, a menos que se aplique alguna de las siguientes condiciones:

  • La carga de trabajo solicita una función que no está disponible en la familia de máquinas E2. Por ejemplo, si la carga de trabajo solicita una GPU, se usa la familia de máquinas N1 para el grupo de nodos nuevo.
  • La carga de trabajo solicita recursos de TPU. Para obtener más información sobre las TPU, consulta la Introducción a Cloud TPU.
  • La carga de trabajo usa la etiqueta machine-family. Para obtener más información, consulta Usa una familia de máquinas personalizadas.

Si el Pod solicita GPU, el aprovisionamiento automático de nodos asigna un tipo de máquina lo suficientemente grande para admitir la cantidad de GPU que solicita el Pod. La cantidad de GPU restringe la CPU y la memoria que puede tener el nodo. Para obtener más información, consulta Plataformas de GPU.

Imágenes de nodo compatibles

El aprovisionamiento automático de nodos crea grupos de nodos mediante una de las siguientes imágenes de nodo:

  • Container-Optimized OS (cos_containerd).
  • Ubuntu (ubuntu_containerd).

Aceleradores de aprendizaje automático compatibles

El aprovisionamiento automático de nodos puede crear grupos de nodos con aceleradores de hardware, como GPU y Cloud TPU. El aprovisionamiento automático de nodos admite TPU en la versión 1.28 de GKE y versiones posteriores.

GPU

Si el Pod solicita GPU, el aprovisionamiento automático de nodos asigna un tipo de máquina lo suficientemente grande para admitir la cantidad de GPU que solicita el Pod. La cantidad de GPU restringe la CPU y la memoria que puede tener el nodo. Para obtener más información, consulta Plataformas de GPU.

Cloud TPU

GKE es compatible con unidades de procesamiento tensorial (TPU) para acelerar las cargas de trabajo de aprendizaje automático. El grupo de nodos de porción de TPU de host único y el grupo de nodos de porción de TPU de varios hosts admiten el ajuste de escala automático y el aprovisionamiento automático.

Con la marca --enable-autoprovisioning en un clúster de GKE, este último crea o borra grupos de nodos de porción de TPU de host único o multihost con una versión de TPU y una topología que cumple con los requisitos de las cargas de trabajo pendientes.

Cuando usas --enable-autoscaling, GKE escala el grupo de nodos según su tipo de la siguiente manera:

  • Grupo de nodos de porción de TPU de host único: GKE agrega o quita nodos TPU en el grupo de nodos existente. El grupo de nodos puede contener cualquier cantidad de nodos TPU entre cero y el tamaño máximo del grupo de nodos según lo determinado por --max-nodes y el valor --total-max-nodes. Cuando el grupo de nodos escala, todos los nodos TPU del grupo tienen el mismo tipo de máquina y topología. Para obtener más información sobre cómo crear un grupo de nodos de porción de TPU de host único, consulta Crea un grupo de nodos.

  • Grupo de nodos de porción de TPU de varios hosts: GKE escala verticalmente el grupo de nodos de forma atómica desde cero hasta la cantidad de nodos necesarios para satisfacer la topología de TPU. Por ejemplo, con un grupo de nodos TPU con un tipo de máquina ct5lp-hightpu-4t y una topología de 16x16, el grupo de nodos contiene 64 nodos. El escalador automático de GKE garantiza que este grupo de nodos tenga exactamente 0 o 64 nodos. Cuando se reduce la escala, GKE expulsa todos los Pods programados y vacía todo el grupo de nodos a cero. Para obtener más información sobre cómo crear un grupo de nodos de porción de TPU de varios hosts, consulta Crea un grupo de nodos.

Si una porción de TPU específica no tiene Pods que se estén ejecutando o que estén pendientes de programación, GKE reduce la escala verticalmente del grupo de nodos. Los grupos de nodos de porción de TPU de varios hosts se reducen de forma atómica. Los grupos de nodos de porción de TPU de host único se reducen para quitar las porciones de TPU individuales de host único.

Cuando habilitas el aprovisionamiento automático de nodos con TPU, GKE toma decisiones de escalamiento en función de los valores definidos en la solicitud de Pod. El siguiente manifiesto es un ejemplo de una especificación de implementación que da como resultado un grupo de nodos que contiene una porción TPU v4 con una topología 2x2x2 y dos máquinas ct4p-hightpu-4t:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice
            cloud.google.com/gke-tpu-topology: 2x2x2
            cloud.google.com/reservation-name: my-reservation
          containers:
          - name: nginx
            image: nginx:1.14.2
            resources:
              requests:
                google.com/tpu: 4
              limits:
               google.com/tpu: 4
            ports:
            - containerPort: 80

Donde:

  • cloud.google.com/gke-tpu-accelerator: La versión y el tipo de TPU. Por ejemplo, TPU v4 con tpu-v4-podslice o TPU v5e con tpu-v5-lite-podslice.
  • cloud.google.com/gke-tpu-topology: El número y el acuerdo físico de los chips TPU dentro de una porción de TPU. Cuando creas un grupo de nodos y habilitas el aprovisionamiento automático de nodos, seleccionas la topología de TPU. Para obtener más información sobre las topologías de Cloud TPU, consulta Configuraciones de TPU.
  • limit.google.com/tpu: Es la cantidad de chips TPU en la VM de TPU. La mayoría de las configuraciones tienen solo un valor correcto. Sin embargo, tpu-v5-lite-podslice con la configuración de topología 2x4:
    • Si especificas google.com/tpu = 8, el aprovisionamiento automático de nodos escala verticalmente el grupo de nodos de porción de TPU de host único mediante la adición de una máquina ct5lp-hightpu-8t.
    • Si especificas google.com/tpu = 4, el aprovisionamiento automático de nodos crea un grupo de nodos de porción de TPU de varios hosts con dos máquinas ct5lp-hightpu-4t.
  • cloud.google.com/reservation-name: Es el nombre de la reserva que usa la carga de trabajo. Si se omite, la carga de trabajo no usa ninguna reserva.

Si configuras tpu-v4-podslice, el aprovisionamiento automático de nodos toma las siguientes decisiones:

Valores establecidos en el manifiesto del Pod Decide el aprovisionamiento automático de nodos
gke-tpu-topology limit.google.com/tpu Tipo de grupo de nodos Tamaño del grupo de nodos Tipo de máquina
2x2x1 4 Porción de TPU de host único Flexible ct4p-hightpu-4t
{A}x{B}x{C} 4 Porción de TPU de varios hosts {A}x{B}x{C}/4 ct4p-hightpu-4t

El producto de {A}×{B}×{C} define la cantidad de chips en el grupo de nodos. Por ejemplo, puedes definir una topología pequeña de 64 chips con combinaciones como 4x4x4. Si usas topologías de más de 64 chips, los valores que asignes a {A}, {B} y {C} deben cumplir las siguientes condiciones:

  • {A}, {B} y {C} son todos menores o iguales que cuatro o múltiplos de cuatro.
  • La topología más grande admitida es 12x16x16.
  • Los valores asignados mantienen el patrón A ≤ B ≤ C. Por ejemplo, 2x2x4 o 2x4x4 para topologías pequeñas.

Si configuras tpu-v5-lite-podslice, el aprovisionamiento automático de nodos toma las siguientes decisiones:

Valores establecidos en el manifiesto del Pod Decide el aprovisionamiento automático de nodos
gke-tpu-topology limit.google.com/tpu Tipo de grupo de nodos Tamaño del grupo de nodos Tipo de máquina
1x1 1 Porción de TPU de host único Flexible ct5lp-hightpu-1t
2x2 4 Porción de TPU de host único Flexible ct5lp-hightpu-4t
2x4 8 Porción de TPU de host único Flexible ct5lp-hightpu-8t
2x41 4 Porción de TPU de varios hosts 2 (8/4) ct5lp-hightpu-4t
4x4 4 Porción de TPU de varios hosts 4 (16/4) ct5lp-hightpu-4t
4x8 4 Porción de TPU de varios hosts 8 (32/4) ct5lp-hightpu-4t
4x8 4 Porción de TPU de varios hosts 16 (32/4) ct5lp-hightpu-4t
8x8 4 Porción de TPU de varios hosts 16 (64/4) ct5lp-hightpu-4t
8x16 4 Porción de TPU de varios hosts 32 (128/4) ct5lp-hightpu-4t
16x16 4 Porción de TPU de varios hosts 64 (256/4) ct5lp-hightpu-4t
  1. Es un caso especial en el que el tipo de máquina depende del valor que definiste en el campo de límites google.com/tpu.

Si configuras el tipo de acelerador como tpu-v5-lite-device, el aprovisionamiento automático de nodos toma las siguientes decisiones:

Valores establecidos en el manifiesto del Pod Decide el aprovisionamiento automático de nodos
gke-tpu-topology limit.google.com/tpu Tipo de grupo de nodos Tamaño del grupo de nodos Tipo de máquina
1x1 1 Porción de TPU de host único Flexible ct5l-hightpu-1t
2x2 4 Porción de TPU de host único Flexible ct5l-hightpu-4t
2x4 8 Porción de TPU de host único Flexible ct5l-hightpu-8t

Para obtener información sobre cómo configurar el aprovisionamiento automático de nodos, consulta Configura TPU.

Asistencia para las VMs Spot

El aprovisionamiento automático de nodos permite crear grupos de nodos basados en VMs Spot.

La creación de grupos de nodos basados en VMs Spot solo se considera si existen pods no programables con una tolerancia para el taint cloud.google.com/gke-spot="true":NoSchedule. Se aplica el taint de manera automática a los nodos de los grupos de nodos aprovisionados de forma automática basados en VMs Spot.

Puedes combinarlo mediante la tolerancia con una regla de afinidad de nodo o nodeSelector para las etiquetas de nodo cloud.google.com/gke-spot="true" o cloud.google.com/gke-provisioning=spot (para nodos que ejecutan la versión 1.25.5-gke.2500 de GKE o una posterior) para garantizar que tus cargas de trabajo solo se ejecuten en grupos de nodos basados en VMs Spot.

Compatibilidad con pods que solicitan almacenamiento efímero

El aprovisionamiento automático de nodos permite crear grupos de nodos cuando los pods solicitan almacenamiento efímero. El tamaño del disco de arranque aprovisionado en los grupos de nodos es constante para todos los nuevos grupos de nodos aprovisionados automáticamente. Este tamaño del disco de arranque se puede personalizar.

El valor predeterminado es 100 GiB. El almacenamiento efímero respaldado por SSD locales no es compatible.

El aprovisionamiento automático de nodos aprovisionará un grupo de nodos solo si el almacenamiento efímero asignable de un nodo con un disco de arranque especificado es mayor o igual que la solicitud de almacenamiento efímero de un pod pendiente. Si la solicitud de almacenamiento efímero es superior a lo que se puede asignar, el aprovisionamiento automático de nodos no aprovisionará un grupo de nodos. Los tamaños de disco para los nodos no se configuran de forma dinámica según las solicitudes de almacenamiento efímero de los pods pendientes.

Limitaciones de escalabilidad

El aprovisionamiento automático de nodos tiene las mismas limitaciones que el escalador automático del clúster, además de las siguientes limitaciones adicionales:

Límite sobre la cantidad de cargas de trabajo independientes
El aprovisionamiento automático de nodos admite un máximo de 100 cargas de trabajo separadas y distintas.
Límite sobre la cantidad de grupos de nodos
El aprovisionamiento automático de nodos reduce la prioridad de la creación de grupos de nodos nuevos cuando la cantidad de grupos en el clúster se acerca a 100. La creación de más de 100 grupos de nodos es posible, pero solo cuando es la única opción para programar un Pod pendiente.

¿Qué sigue?