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:
- GKE Sandbox.
- Sistemas operativos Windows.
- Control de la afinidad de reserva
- Ajuste de escala automático de PersistentVolumes locales
- Aprovisionamiento automático de nodos con SSD locales como almacenamiento efímero
- Aprovisionamiento automático mediante programación personalizada con filtros alterados
- Configuración de multisubprocesos simultáneos (SMP)
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:
- Solicitudes de recursos de CPU, memoria y almacenamiento efímero .
- Solicitudes de GPU
- Afinidades de nodos y selectores de etiquetas de pods pendientes
- Taints de nodos y tolerancias de Pods pendientes
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 efectoNoExecute
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 de16x16
, 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 contpu-v4-podslice
o TPU v5e contpu-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ía2x4
:- 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áquinact5lp-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áquinasct5lp-hightpu-4t
.
- Si especificas
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
o2x4x4
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 |
-
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?
- Obtén más información sobre cómo habilitar el aprovisionamiento automático de nodos
- Obtener más información sobre el escalador automático de clústeres