Usa el aprovisionamiento automático de nodos


En esta página, se explica cómo usar el aprovisionamiento automático de nodos en clústeres estándar de Google Kubernetes Engine (GKE). Ya debes estar familiarizado con el concepto de aprovisionamiento automático de nodos.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Requisitos

El aprovisionamiento automático de nodos está disponible en las siguientes versiones de GKE:

  • Versión 1.11.2-gke.25 y posteriores para clústeres zonales
  • Versión 1.12.x y posteriores para clústeres regionales
  • Versión 1.28 y posteriores para la compatibilidad con Cloud TPU.

Habilitar el aprovisionamiento automático de nodos

Puedes habilitar el aprovisionamiento automático de nodos en un clúster con gcloud CLI o la consola de Google Cloud.

El aprovisionamiento automático de nodos tiene las siguientes limitaciones de recursos:

Debes planificar el rango de direcciones IP del nodo con cuidado. Puedes expandir el rango de direcciones IP del nodo después de crear un clúster. Sin embargo, te recomendamos no expandir el rango de direcciones IP del nodo después de crear el clúster, ya que debes actualizar las reglas del firewall para incluir el rango nuevo como fuente. Puedes expandir el rango de direcciones IP del Pod con el CIDR de varios Pods no continuos con el aprovisionamiento automático de nodos.

gcloud

Para habilitar el aprovisionamiento automático de nodos, ejecuta el comando siguiente:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --min-cpu MINIMUM_CPU \
    --min-memory MIMIMUM_MEMORY \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster en el que se habilitará el aprovisionamiento automático de nodos.
  • MINIMUM_CPU es la cantidad mínima de núcleos en el clúster.
  • MINIMUM_MEMORY es la cantidad mínima de gigabytes de memoria en el clúster.
  • MAXIMUM_CPU es la cantidad máxima de núcleos en el clúster.
  • MAXIMUM_MEMORY es la cantidad máxima de gigabytes de memoria en el clúster.

En el siguiente ejemplo, se habilita el aprovisionamiento automático de nodos en el dev-cluster y se permite escalar entre un tamaño de clúster total de 1 CPU y 1 gigabyte de memoria hasta un máximo de 10 CPU y 64 gigabytes de memoria:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --min-cpu 1 \
    --min-memory 1 \
    --max-cpu 10 \
    --max-memory 64

Consola

Para habilitar el aprovisionamiento automático de nodos, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster.

  3. En la sección Automatización, en Aprovisionamiento automático de nodos, haz clic en Editar.

  4. Selecciona la casilla de verificación Habilitar aprovisionamiento automático de nodos.

  5. Configura el uso mínimo y máximo de CPU y memoria que deseas para el clúster.

  6. Haz clic en Guardar cambios.

Usa un archivo de configuración de aprovisionamiento automático

El aprovisionamiento automático de nodos se puede configurar mediante un archivo de configuración YAML. El archivo de configuración puede contener solo una línea si se usa para cambiar una única opción de configuración. Se pueden especificar varias opciones de configuración en un solo archivo de configuración. En este caso, todas las opciones de configuración se modificarán cuando se aplique el archivo de configuración.

Algunas opciones de configuración avanzadas solo se pueden especificar mediante un archivo de configuración.

Ejemplo 1: Aplicar el siguiente archivo de configuración habilita la reparación automática y la actualización automática de nodos para cualquier grupo de nodos nuevo que cree el aprovisionamiento automático de nodos:

management:
  autoRepair: true
  autoUpgrade: true

Ejemplo 2: Aplicar el siguiente archivo de configuración cambiaría la siguiente configuración:

  • Configura los límites de recursos para CPU, memoria y GPU. El aprovisionamiento automático de nodos no creará un nodo si el tamaño total del clúster supera los límites de recursos especificados.
  • Habilita la reparación automática y la actualización automática de nodos para cualquier grupo de nodos nuevo que cree el aprovisionamiento automático de nodos.
  • Habilita la opción de inicio seguro y supervisión de integridad para cualquier grupo de nodos nuevo que cree el aprovisionamiento automático de nodos.
  • Configura el tamaño del disco de arranque en 100 GB para cualquier grupo de nodos nuevo que cree el aprovisionamiento automático de nodos.
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-k80'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Crea un archivo con la configuración deseada en una ubicación a la que gcloud CLI pueda acceder a él.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster.
    • FILE_NAME es el nombre del archivo de configuración.

    Para obtener más información, consulta la documentación de gcloud container clusters update.

Configuración predeterminada del aprovisionamiento automático

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. Sin embargo, los Pods no especifican directamente algunas opciones de configuración del grupo de nodos (por ejemplo, la configuración relacionada con las actualizaciones de nodos). Puedes establecer valores predeterminados para esas opciones, que se aplicarán a todos los grupos de nodos recién creados.

Configura el tipo de imagen de nodo predeterminado

A fin de especificar el tipo de imagen de nodo que se usará para todos los grupos nuevos de nodos aprovisionados de forma automática, usa gcloud CLI o un archivo de configuración. Esta configuración solo está disponible para la versión 1.20.6-gke.1800 del clúster de GKE y versiones posteriores.

gcloud

Para establecer el tipo de imagen de nodo predeterminado, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-image-type IMAGE_TYPE

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • IMAGE_TYPE: el tipo de imagen de nodo, que puede ser una de las siguientes opciones:

    • cos_containerd: Container-Optimized OS con containerd
    • ubuntu_containerd: Ubuntu con containerd

Archivo

Para todos los nuevos grupos de nodos aprovisionados de forma automática, puedes especificar el tipo de imagen de nodo que se usará mediante un archivo de configuración. La siguiente configuración de YAML especifica que, para los nuevos grupos de nodos aprovisionados de forma automática, el tipo de imagen es cos_containerd y tiene límites de recursos asociados para la CPU y la memoria. Debes especificar valores máximos para la CPU y la memoria a fin de habilitar el aprovisionamiento automático.

  1. Guarda la configuración de YAML:

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
    imageType: 'cos_containerd'
    
  2. Aplica la configuración:

    gcloud container clusters update CLUSTER_NAME \
      --enable-autoprovisioning \
      --autoprovisioning-config-file FILE_NAME
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster.
    • FILE_NAME: Es el nombre del archivo de configuración.

Configura valores predeterminados de identidad para grupos de nodos aprovisionados automáticamente

Los permisos para los recursos de Google Cloud son proporcionados por identidades.

A fin de especificar la identidad predeterminada (ya sea una cuenta de servicio, o uno o más permisos) para los grupos nuevos de nodos aprovisionados de forma automática, usa gcloud CLI o un archivo de configuración.

gcloud

Para especificar la cuenta de servicio de IAM predeterminada que usa el aprovisionamiento automático de nodos, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-service-account=SERVICE_ACCOUNT

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • SERVICE_ACCOUNT es el nombre de la cuenta de servicio predeterminada.

En el siguiente ejemplo, se configura test-service-account@google.com como la cuenta de servicio predeterminada en el clúster dev-cluster:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning --autoprovisioning-service-account=test-service-account@google.com

Para especificar los permisos predeterminados que debe usar el aprovisionamiento automático de nodos, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-scopes=SCOPE

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • SCOPE son los permisos de Google Cloud que usan los grupos de nodos aprovisionados de forma automática. Para especificar varios permisos, debes separarlos con una coma (por ejemplo, SCOPE1, SCOPE2,...).

En el siguiente ejemplo, se establece el permiso predeterminado del clúster dev-cluster en devstorage.read_only:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/devstorage.read_only

Archivo

Puedes especificar la identidad predeterminada que usa el aprovisionamiento automático de nodos mediante un archivo de configuración. Mediante la siguiente configuración de YAML, se establece la cuenta de servicio de IAM:

  serviceAccount: SERVICE_ACCOUNT

Reemplaza SERVICE_ACCOUNT por el nombre de la cuenta de servicio predeterminada.

Como alternativa, puedes usar la siguiente configuración de YAML para especificar los permisos predeterminados que usa el aprovisionamiento automático de nodos:

  scopes: SCOPE

Reemplaza SCOPE por el permiso de Google Cloud que usan los grupos de nodos aprovisionados de forma automática. Para especificar varios permisos, debes separarlos con una coma (por ejemplo, SCOPE1, SCOPE2,...).

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Crea un archivo de configuración que especifique los valores de identidad predeterminados en una ubicación a la que gcloud CLI pueda acceder a él.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • FILE_NAME es el nombre del archivo de configuración.

Claves de encriptación administradas por el cliente (CMEK)

Puedes especificar claves de encriptación administradas por el cliente (CMEK) que usan los grupos de nodos nuevos aprovisionados de forma automática.

Puedes habilitar la encriptación administrada por el cliente para los controladores de arranque mediante un archivo de configuración. La siguiente configuración de YAML establece la clave CMEK:

  bootDiskKmsKey: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

Reemplaza lo siguiente:

  • KEY_PROJECT_ID es el ID del proyecto de claves.
  • LOCATION: Es la ubicación del llavero de claves.
  • KEY_RING: Es el nombre del llavero de claves.
  • KEY_NAME es el nombre de la clave.

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Crea un archivo de configuración que especifique una clave CMEK en una ubicación a la que gcloud CLI pueda acceder a ella.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster.
    • FILE_NAME es el nombre del archivo de configuración.

Integridad del nodo

El aprovisionamiento automático de nodos permite crear grupos de nodos con el inicio seguro y la supervisión de integridad habilitados.

Puedes habilitar el inicio seguro y la supervisión de integridad mediante un archivo de configuración. Con la siguiente configuración de YAML, se habilita el inicio seguro y se inhabilita la supervisión de integridad:

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Copia la configuración anterior en un archivo en una ubicación en la que gcloud CLI pueda acceder a ella. Edita los valores de enableSecureBoot y enableIntegrityMonitoring. Guarda el archivo.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster.
    • FILE_NAME es el nombre del archivo de configuración.

Reparación y actualización automáticas de nodos

El aprovisionamiento automático de nodos es compatible con la creación de grupos de nodos con la reparación y la actualización automáticas de nodos habilitadas.

gcloud

Para habilitar la reparación y la actualización automáticas en todos los grupos de nodos nuevos aprovisionados de forma automática, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --enable-autoprovisioning-autorepair \
    --enable-autoprovisioning-autoupgrade

Reemplaza CLUSTER_NAME por el nombre del clúster.

A fin de inhabilitar la reparación y la actualización automáticas en todos los grupos de nodos aprovisionados de forma automática, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --no-enable-autoprovisioning-autorepair \
    --no-enable-autoprovisioning-autoupgrade

Reemplaza CLUSTER_NAME por el nombre del clúster.

Archivo

Puedes habilitar o inhabilitar la reparación y la actualización automáticas mediante un archivo de configuración. Mediante la siguiente configuración de YAML, puedes habilitar la reparación automática y, a su vez, inhabilitar la actualización automática:

  management:
    autoRepair: true
    autoUpgrade: false

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Copia la configuración anterior en un archivo en una ubicación en la que gcloud CLI pueda acceder a ella. Edita los valores de autoUpgrade y autoRepair. Guarda el archivo.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • FILE_NAME: Es el nombre del archivo de configuración.

Usa actualizaciones de aumento para grupos de nodos nuevos aprovisionados de forma automática

A fin de especificar la configuración de actualización de aumento en todos los grupos de nodos nuevos aprovisionados de forma automática, usa gcloud CLI o un archivo de configuración. De forma predeterminada, GKE establece la estrategia de actualización de nodos en actualizaciones de aumento.

gcloud

A fin de especificar la configuración de actualización de aumento para todos los grupos de nodos nuevos aprovisionados de forma automática, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-max-surge-upgrade MAX_SURGE \
    --autoprovisioning-max-unavailable-upgrade MAX_UNAVAILABLE

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • MAX_SURGE es la cantidad máxima de nodos que se pueden agregar al grupo de nodos durante las actualizaciones.
  • MAX_UNAVAILABLE es la cantidad máxima de nodos del grupo de nodos que pueden no estar disponibles de forma simultánea durante las actualizaciones.

Archivo

Puedes especificar la configuración de actualización de aumento para todos los grupos de nodos aprovisionados de forma automática mediante un archivo de configuración como el siguiente:

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Copia la configuración anterior en un archivo que se encuentre en una ubicación a la que gcloud pueda acceder. Edita los valores de maxSurgeUpgrade y maxUnavailableUpgrade. Guarda el archivo.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • FILE_NAME es el nombre del archivo de configuración.

Para obtener más información, consulta la documentación de gcloud container clusters update.

A fin de volver a usar las actualizaciones de aumento para los grupos de nodos nuevos aprovisionados de forma automática, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-surge-upgrade

Reemplaza CLUSTER_NAME por el nombre del clúster.

De forma opcional, puedes incluir las marcas para una configuración específica, como en los comandos anteriores. GKE vuelve a usar la configuración anterior para la estrategia de actualización, si se estableció.

Usa actualizaciones azul-verde para grupos de nodos nuevos aprovisionados de forma automática

Puedes usar las actualizaciones azul-verde para todos los grupos de nodos nuevos aprovisionados de forma automática mediante gcloud CLI. Con las actualizaciones azul-verde, puedes usar la configuración predeterminada o ajustarla para optimizar tu entorno. Para obtener más información sobre las actualizaciones azul-verde, consulta Actualizaciones azul-verde.

Para actualizar la estrategia de actualización de nodos para cualquier grupo de nodos aprovisionado de forma automática, consulta Activa o desactiva la actualización de aumento para un grupo de nodos existente y Actualiza la estrategia de actualización azul-verde de un grupo de nodos existente.

Las siguientes variables se usan en los comandos que se enumeran a continuación:

  • CLUSTER_NAME: el nombre del clúster para el grupo de nodos.
  • COMPUTE_ZONE: la zona del clúster.
  • NODE_POOL_NAME: el nombre del grupo de nodos
  • NUMBER_NODES: la cantidad de nodos del grupo de nodos en cada una de las zonas del clúster.
  • BATCH_NODE_COUNT: la cantidad de nodos azules que se vaciarán en un lote durante la fase de drenado del grupo azul. El valor predeterminado es uno. Si se establece en cero, se omitirá la fase de vaciado del grupo azul.
  • BATCH_PERCENT: el porcentaje de nodos azules que se vaciarán en un lote durante la fase de drenado del grupo azul. Debe estar en el rango de [0.0, 1.0].
  • BATCH_SOAK_DURATION: la duración en segundos de la espera después de vaciar cada lote. El valor predeterminado es cero.
  • NODE_POOL_SOAK_DURATION: la duración en segundos que se espera después de completar el vaciado de todos los lotes. El valor predeterminado es de 3600 segundos.

La configuración predeterminada para las actualizaciones azul-verde es la siguiente:

  • BATCH_NODE_COUNT = 1
  • BATCH_SOAK_DURATION = 0 segundos
  • NODE_POOL_SOAK_DURATION = 3600 segundos (1 hora)

Actualiza un clúster a fin de usar actualizaciones azul-verde para grupos de nodos nuevos aprovisionados de forma automática

Los siguientes comandos usan gcloud container clusters update a fin de actualizar la estrategia de actualización de nodos para grupos de nodos nuevos aprovisionados de forma automática.

También puedes usar estas marcas en los siguientes casos:

A fin de actualizar un clúster para usar actualizaciones azul-verde con la configuración predeterminada para grupos de nodos nuevos aprovisionados de forma automática, usa este comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade

Puedes actualizar un clúster a fin de usar actualizaciones azul-verde con una configuración específica para grupos de nodos nuevos aprovisionados de forma automática. Estos comandos también se pueden usar sin la marca --enable-autoprovisioning-blue-green-upgrade para actualizar la configuración.

El siguiente comando usa BATCH_NODE_COUNT para establecer un tamaño de lote de recuento absoluto de nodos:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade \
  --autoprovisioning-node-pool-soak-duration=NODE_POOL_SOAK_DURATION \
  --autoprovisioning-standard-rollout-policy=batch-node-count=BATCH_NODE_COUNT,batch-soak-duration=BATCH_SOAK_DURATION

También puedes usar BATCH_PERCENT para configurar un tamaño de lote basado en porcentajes. Para esto, reemplaza batch-node-count en el último comando por batch-percent y usa un decimal entre 0 y 1 (por ejemplo, 25% es 0.25). Para ver cómo se configuran los tamaños de lotes basados en porcentajes, consulta Actualiza un grupo de nodos con una actualización azul-verde mediante tamaños de lotes basados en porcentajes.

Discos de arranque personalizados

El aprovisionamiento automático de nodos permite crear grupos de nodos con discos de arranque personalizados.

Puedes personalizar la configuración del disco de arranque mediante un archivo de configuración. GKE reserva una parte del disco de arranque de nodo para las funciones de kubelet. Para obtener más información, consulta Almacenamiento efímero respaldado por un disco de arranque de nodo.

La siguiente configuración de YAML hace que el aprovisionamiento automático de nodos cree grupos de nodos con discos SSD de 100 GB:

  diskSizeGb: 100
  diskType: pd-ssd

Especifica los siguientes valores:

  • diskSizeGb: Es el tamaño del disco, especificado en GB.
  • diskType: Es el tipo de disco, que puede ser uno de los siguientes valores:
    • pd-balanced (predeterminada)
    • pd-standard
    • pd-ssd. En la versión 1.22 de GKE y en versiones anteriores, si especificas pd-ssd, el aprovisionamiento automático de nodos solo considera los tipos de máquinas N1 cuando creas grupos de nodos.

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Crea un archivo con la configuración del disco de arranque deseada en una ubicación a la que gcloud CLI pueda acceder a él.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster.
    • FILE_NAME: Es el nombre del archivo de configuración.

Separa los pods kube-system de tus cargas de trabajo

Como administrador del clúster, es posible que desees separar los Pods kube-system de tus cargas de trabajo. Esta configuración evita que tu clúster tenga problemas de reducción de escala vertical en nodos con poco uso que tienen pods kube-system en ejecución.

En el siguiente ejemplo, se muestra cómo puedes separar los pods kube-system de las cargas de trabajo del clúster mediante una combinación de aprovisionamiento automático de nodos y taints y tolerancias.

  1. Crea un clúster con un grupo de nodos predeterminado de VMs e2-standard-2:

    gcloud container clusters create test --machine-type=e2-standard-2
    
  2. Aplica un taint en el grupo de nodos default-pool:

    kubectl taint nodes -l cloud.google.com/gke-nodepool=default-pool CriticalAddonsOnly=true:NoSchedule
    

    El resultado es similar a este:

    node/gke-test-default-pool-66fd7aed-7xbd tainted
    node/gke-test-default-pool-66fd7aed-kg1x tainted
    node/gke-test-default-pool-66fd7aed-ljc7 tainted
    
  3. Habilita el aprovisionamiento automático de nodos en el clúster:

    gcloud container clusters update test \
        --enable-autoprovisioning \
        --min-cpu 1 \
        --min-memory 1 \
        --max-cpu 10 \
        --max-memory 64 \
        --autoprovisioning-scopes= \
          https://www.googleapis.com/auth/logging.write,\
          https://www.googleapis.com/auth/monitoring, \
          https://www.googleapis.com/auth/devstorage.read_only
    

    Tu clúster puede escalar entre un tamaño de clúster total de 1 CPU y 1 gigabyte de memoria hasta un máximo de 10 CPU y 64 gigabytes de memoria.

  4. Para probar esta configuración, guarda el siguiente manifiesto de muestra como nginx.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: dedicated
        operator: Equal
        value: ui-team
        effect: NoSchedule
      nodeSelector:
        dedicated: ui-team
    

    Este manifiesto implementa un Pod de carga de trabajo de prueba en el clúster con una etiqueta nodeSelector y un taint de nodo de dedicated: ui-team. Sin el aprovisionamiento automático de nodos, este Pod de carga de trabajo no se puede programar, puesto que ningún grupo de nodos tiene la etiqueta y los taints adecuados.

  5. Aplica el manifiesto al clúster:

    kubectl apply -f nginx.yaml
    

    El resultado es similar a este:

    pod/nginx created
    
  6. Consulta el grupo de nodos nuevo que se ajusta a la etiqueta ui-team:

    kubectl get node --selector=dedicated=ui-team
    

    El resultado es similar a este:

    NAME                                            STATUS   ROLES    AGE   VERSION
    gke-test-nap-e2-medium-14b723z1-19f89fa8-jmhr   Ready    <none>   14s   v1.21.11-gke.900
    

Con el aprovisionamiento automático de nodos y las tolerancias y taints, el clúster separa kube-system de los Pods de las cargas de trabajo.

Usa aceleradores para grupos de nodos nuevos aprovisionados de forma automática

Puedes habilitar el aprovisionamiento automático de nodos y configurar GKE para aprovisionar aceleradores de GPU o Cloud TPU de forma automática para garantizar la capacidad necesaria para programar cargas de trabajo de IA/AA.

Configura los límites de GPU

Cuando usas el aprovisionamiento automático de nodos con GPU, puedes establecer el límite máximo para cada tipo de GPU en el clúster mediante gcloud CLI o la consola de Google Cloud. El recuento de límites de GPU es la cantidad máxima de GPU. Por ejemplo, una VM con 16 GPU cuenta como 16 no 1 para los fines de este límite. Si deseas configurar varios tipos de GPU, debes usar un archivo de configuración.

Para enumerar los resourceTypes disponibles, ejecuta gcloud compute accelerator-types list.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --min-accelerator type=GPU_TYPE,count=MINIMUM_ACCELERATOR \
    --max-accelerator type=GPU_TYPE,count=MAXIMUM_ACCELERATOR

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • MAXIMUM_CPU es la cantidad máxima de núcleos en el clúster.
  • MAXIMUM_MEMORY es la cantidad máxima de gigabytes de memoria en el clúster.
  • GPU_TYPE es el tipo de GPU.
  • MINIMUM_ACCELERATOR es la cantidad mínima de aceleradores de GPU en el clúster.
  • MAXIMUM_ACCELERATOR es la cantidad máxima de aceleradores de GPU en el clúster.

En el siguiente ejemplo, se establecen los límites de GPU para el tipo de acelerador de GPU nvidia-tesla-k80 en el clúster dev-cluster:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --max-cpu 10 \
    --max-memory 64 \
    --min-accelerator type=nvidia-tesla-k80,count=1 \
    --max-accelerator type=nvidia-tesla-k80,count=4

Archivo

Puedes cargar límites para varios tipos de GPU mediante un archivo de configuración. Mediante la siguiente configuración YAML, se configuran dos tipos de GPU diferentes:

  resourceLimits:
    - resourceType: 'cpu'
      minimum: 4
      maximum: 10
    - resourceType: 'memory'
      maximum: 64
    - resourceType: 'nvidia-tesla-k80'
      maximum: 4
    - resourceType: 'nvidia-tesla-v100'
      maximum: 2

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Copia la configuración anterior en un archivo en una ubicación en la que gcloud CLI pueda acceder a ella. Edita los valores de cpu y memory. Agrega tantos valores como necesites para resourceType. Guarda el archivo.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • FILE_NAME es el nombre del archivo de configuración.

Para obtener más información, consulta la documentación de gcloud container clusters update.

Consola

Para habilitar el aprovisionamiento automático de nodos con recursos de GPU, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster.

  3. En la sección Automatización, en Aprovisionamiento automático de nodos, haz clic en Editar.

  4. Selecciona la casilla de verificación Habilitar aprovisionamiento automático de nodos.

  5. Configura el uso mínimo y máximo de CPU y memoria que deseas para el clúster.

  6. Haz clic en Agregar recurso.

  7. Selecciona el tipo de GPU (por ejemplo, NVIDIA TESLA K80) que deseas agregar. Establece la cantidad mínima y máxima de GPU que deseas agregar al clúster.

  8. Acepta las limitaciones de GPU en GKE.

  9. Haz clic en Guardar cambios.

Configura Cloud TPUs

A partir de la versión 1.28 de GKE, puedes usar el aprovisionamiento automático de nodos con Cloud TPUs. Sin embargo, v5p no es compatible con el aprovisionamiento automático de nodos ni el ajuste de escala automático de clústeres. Define los límites de TPU a nivel de clúster y crea los grupos de nodos TPU. Para obtener más información sobre cómo funciona el aprovisionamiento automático de nodos con TPUs, consulta Aceleradores de aprendizaje automático compatibles.

Crea un clúster y configura los pods para usar recursos TPU mediante gcloud CLI. Si deseas configurar varios tipos de TPU, debes usar un archivo de configuración.

gcloud

  1. Crea un clúster y define los límites de TPU:

    gcloud container clusters create CLUSTER_NAME \
        --enable-autoprovisioning \
        [--min-cpu  MINIMUM_CPU ] \
        --max-cpu MAXIMUM_CPU \
        [--min-memory MINIMUM_MEMORY ] \
        --max-memory MAXIMUM_MEMORY \
        [--min-accelerator=type=TPU_TYPE,count= MINIMUM_ACCELERATOR ] \
        --max-accelerator=type=TPU_TYPE,count= MAXIMUM_ACCELERATOR
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: es el nombre del clúster
    • MINIMUM_CPU es la cantidad mínima de vCPUs en el clúster.
    • MAXIMUM_CPU es la cantidad máxima de vCPUs en el clúster.
    • MINIMUM_MEMORY es la cantidad mínima de gigabytes de memoria en el clúster.
    • MAXIMUM_MEMORY es la cantidad máxima de gigabytes de memoria en el clúster.
    • TPU_TYPE: es el tipo de TPU que eliges. Usa tpu-v4-podslice para seleccionar TPU v4. Para seleccionar TPU v5e con un tipo de máquina que comience con ct5lp-, usa tpu-v5-lite-podslice. Para seleccionar TPU v5e con un tipo de máquina que comience con ct5l-, usa tpu-v5-lite-device.
    • MINIMUM_ACCELERATOR: es la cantidad mínima de chips TPU en el clúster.
      • Ten en cuenta que el uso de MINIMUM_ACCELERATOR puede bloquear la reducción de escala vertical de las porciones de TPU de varios hosts, incluso si count es menor que la cantidad de chips TPU en la porción.
    • MAXIMUM_ACCELERATOR: Es la cantidad máxima de chips TPU en el clúster.
      • Si la configuración del pod solicita una porción de TPU de varios hosts, GKE crea esa porción de forma atómica. Establece el valor de recuento lo suficientemente alto como para permitir el aprovisionamiento de todos los chips TPU de la topología especificada. La cantidad de chips en cada porción de TPU es igual al producto de la topología. Por ejemplo, si la topología de la porción de TPU de varios hosts es 2x2x2, la cantidad de chips TPU es igual a 8, por lo que MAXIMUM_ACCELERATOR debe ser mayor que 8.

    En el ejemplo siguiente, se establecen los límites de TPU para los tipos de máquinas ct5lp-hightpu-1t, ct5lp-hightpu-4t y ct5lp-hightpu-8t en el clúster dev-cluster. Por ejemplo, se pueden aprovisionar hasta diez máquinas ct5lp-hightpu-4t, cada una con 4 chips TPU, 112 CPUs virtuales y 192 GiB de memoria.

    gcloud container clusters create dev-cluster-inference \
          --enable-autoprovisioning \
          --min-cpu 0 \
          --max-cpu 1120 \
          --min-memory 0 \
          --max-memory 1920 \
          --min-accelerator=type=tpu-v5-lite-podslice,count=0 \
          --max-accelerator=type=tpu-v5-lite-podslice,count=40
    
  2. Crea una especificación de implementación que de como resultado un Pod que solicite recursos TPU. Por ejemplo, el siguiente manifiesto hará que GKE aprovisione cuatro nodos ct5lp-hightpu-4t:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
            cloud.google.com/gke-tpu-topology:  2x2
            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
    

    En el campo nodeSelector, debes definir el tipo de TPU, la topología de TPU y el recuento de aceleradores, en el que:

    • cloud.google.com/gke-tpu-accelerator: Define el tipo de TPU. Por ejemplo, tpu-v4-podslice
    • cloud.google.com/gke-tpu-topology: Define la topología de TPU, por ejemplo, 2x2x1 o 4x4x8.

    Para consumir una reserva existente con tu carga de trabajo, especifica una etiqueta adicional en el campo nodeSelector: * cloud.google.com/reservation-name: Define el nombre de la reserva que GKE usa para aprovisionar de forma automática los nodos.

    En limits: google.com/tpu, define la cantidad de chips por nodo.

Archivo

Puedes asignar límites para varios tipos de TPU con un archivo de configuración. Mediante la siguiente configuración YAML, se configuran dos tipos de GPUs diferentes:

  resourceLimits:
    - resourceType: 'cpu'
      maximum: 10000
    - resourceType: 'memory'
      maximum: 10000
    - resourceType: 'tpu-v4-podslice'
      maximum: 32
    - resourceType: 'tpu-v5-lite'
      maximum: 64

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Copia la configuración anterior en un archivo en una ubicación en la que gcloud CLI pueda acceder a ella. Edita los valores de resourceType y maximum. Agrega tantos valores como necesites para resourceType. Guarda el archivo.

  2. Ejecuta el siguiente comando para aplicar la configuración a tu clúster:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • FILE_NAME es el nombre del archivo de configuración.

Para obtener más información, consulta la documentación de gcloud container clusters update.

Ubicaciones de aprovisionamiento automático de nodos

Establece las zonas en las que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos. Las ubicaciones regionales no se admiten. Las zonas deben pertenecer a la misma región que el clúster, pero no se limitan a las ubicaciones de nodos definidas a nivel de clúster. El cambio de las ubicaciones de aprovisionamiento automático de nodos no afecta a ningún grupo de nodos existente.

Para configurar las ubicaciones en las que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos, usa gcloud CLI o un archivo de configuración.

gcloud

Ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster.
  • ZONE es la zona en la que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos. Para especificar varias zonas, sepáralas con una coma (por ejemplo, ZONE1, ZONE2,...).

Archivo

Para configurar las ubicaciones en las que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos, puedes usar un archivo de configuración.

Agrega la siguiente configuración de YAML que establece la nueva ubicación de los grupos de nodos:

    autoprovisioningLocations:
      - ZONE

Reemplaza ZONE por la zona en la que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos. Para especificar varias zonas, agrega más zonas a la lista. Guarda el archivo.

Para usar un archivo de configuración de aprovisionamiento automático:

  1. Crea un archivo de configuración en una ubicación a la que gcloud CLI pueda acceder.

  2. Aplica la configuración a tu clúster:

    gcloud container clusters update CLUSTER_NAME \
        --enable-autoprovisioning \
        --autoprovisioning-config-file FILE_NAME
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: es el nombre del clúster
    • FILE_NAME: es la ruta de acceso al archivo de configuración.

Nodos más cercanos físicamente con la ubicación compacta

A partir de la versión 1.25 de GKE, el aprovisionamiento automático de nodos admite una política de ubicación compacta. Con la política de ubicación compacta, puedes indicarle a GKE que cree grupos de nodos más cercanos entre sí dentro de una zona.

Para definir una política de ubicación compacta, agrega nodeSelector a la especificación del Pod con las siguientes claves:

  • cloud.google.com/gke-placement-group es el identificador que asignas al grupo de Pods que deben ejecutarse juntos, en el mismo grupo de ubicación compacta.

  • cloud.google.com/machine-family es el nombre de la familia de máquinas. Para obtener más información, consulta las familias de máquinas que admiten la ubicación compacta.

En el siguiente ejemplo, se establece una política de ubicación compacta con un identificador de grupo ubicación de placement-group-1 y una familia de máquinas de c2:

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  nodeSelector:
    cloud.google.com/gke-placement-group: placement-group-1
    cloud.google.com/machine-family: c2

Si deseas obtener más información, consulta cómo definir la ubicación compacta para nodos de GKE.

Inhabilita el aprovisionamiento automático de nodos

Cuando inhabilitas el aprovisionamiento automático de nodos para un clúster, los grupos de nodos dejan de aprovisionarse de forma automática.

gcloud

A fin de inhabilitar el aprovisionamiento automático de nodos en un clúster, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
  --no-enable-autoprovisioning

Reemplaza CLUSTER_NAME por el nombre del clúster.

Archivo

Para inhabilitar el aprovisionamiento automático de nodos mediante la consola de Google Cloud, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster.

  3. En la sección Automatización, en Aprovisionamiento automático de nodos, haz clic en Editar.

  4. Desmarca la casilla de verificación Habilitar aprovisionamiento automático de nodos.

  5. Haz clic en Guardar cambios.

Marca un grupo de nodos como aprovisionados de forma automática

Después de habilitar el aprovisionamiento automático de nodos en el clúster, puedes especificar los grupos de nodos que se aprovisionarán automáticamente. Un grupo de nodos aprovisionado de forma automática se borra de manera automática cuando no hay cargas de trabajo que lo usen.

Para marcar un grupo de nodos como aprovisionado de forma automática, ejecuta el siguiente comando:

gcloud container node-pools update NODE_POOL_NAME \
  --enable-autoprovisioning

Reemplaza NODE_POOL_NAME por el nombre del grupo de nodos.

Marca un grupo de nodos como no aprovisionado de forma automática

Para marcar un grupo de nodos como no aprovisionado de forma automática, ejecuta el siguiente comando:

gcloud container node-pools update NODE_POOL_NAME \
  --no-enable-autoprovisioning

Reemplaza NODE_POOL_NAME por el nombre del grupo de nodos.

Usa una familia de máquinas personalizadas

A partir de GKE 1.19.7-gke.800, puedes elegir una familia de máquinas para tus cargas de trabajo. La familia de máquinas T2D es compatible con GKE versión 1.22 y versiones posteriores.

A fin de elegir una familia de máquinas para tus cargas de trabajo, realiza una de las siguientes tareas:

  • Configura la afinidad de nodos con la clave de cloud.google.com/machine-family, el operador In y el valor que es la familia de máquinas deseada (por ejemplo, n2).
  • Agrega un nodeSelector con la clave de cloud.google.com/machine-family y el valor que es la familia de máquinas deseada.

En este ejemplo, se establece nodeAffinity en una familia de máquinas n2:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: cloud.google.com/machine-family
            operator: In
            values:
            - n2

Después de aplicar los cambios, el aprovisionamiento automático de nodos elige el mejor grupo de nodos con un tipo de máquina dentro de la familia de máquinas especificada. Si se usan varios valores para la expresión de coincidencia, se seleccionará un valor de manera arbitraria.

Plataforma de CPU mínima

El aprovisionamiento automático de nodos permite crear grupos de nodos con una plataforma de CPU mínima especificada. Puedes especificar la plataforma de CPU mínima a nivel de la carga de trabajo (recomendado) o a nivel del clúster.

¿Qué sigue?