Usa el aprovisionamiento automático de nodos

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

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

Con los clústeres de Autopilot, no tienes que preocuparte por aprovisionar nodos o administrar los grupos de nodos, ya que los grupos de nodos se aprovisionan automáticamente mediante el aprovisionamiento automático de nodos y se escalan de forma automática para cumplir con los requisitos de tus cargas de trabajo.

Descripción general

El aprovisionamiento automático de nodos administra de forma automática un conjunto de grupos de nodos en nombre del usuario. Sin el aprovisionamiento automático de nodos, GKE inicia nodos nuevos solo a partir de grupos de nodos creados por el usuario. Con el aprovisionamiento automático de nodos, se crean y borran grupos de nodos nuevos de forma automática.

Antes de comenzar

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

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa la CLI de gcloud.

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

Características no compatibles

Las siguientes funciones no son compatibles con el aprovisionamiento automático de nodos. Esto significa que no se aprovisionarán grupos de nodos con estas funciones, sino que se les realizará un ajuste de escala automático a los grupos de nodos existentes:

Operación

El aprovisionamiento automático de nodos es un mecanismo del escalador automático del clúster, que escala por grupos de nodos. Con el aprovisionamiento automático de nodos habilitado, el escalador automático del clúster puede extender 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 dos niveles siguientes:

  • Nivel de grupo de nodos
  • Nivel de clúster

Límites para los grupos de nodos

Los grupos de nodos que crea el aprovisionamiento automático de nodos tienen un límite de 1,000 nodos.

Límites de los clústeres

Los límites que definas se aplicarán en función de los recursos totales de CPU y memoria usados en tu clúster, 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, los nodos no se borran de forma automática.

Separación de las 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.

La especificación del pod puede expresar que requiere nodos con etiquetas específicas de dos maneras:

  • Mediante un campo nodeSelector.
  • Mediante un campo nodeAffinity con un operador In y exactamente un valor.

El ejemplo siguiente es un extracto de una especificación de pod que se interpreta como una solicitud de separación de carga de trabajo. En este ejemplo, el administrador del clúster eligió dedicated como la clave que se usará en el aislamiento de la carga de trabajo, y el equipo de la IU determinó que necesitan nodos dedicados para sus cargas de trabajo.

El pod tiene tolerancia para los nodos etiquetados con dedicated=ui-team y usa nodeAffinity en la selección de nodos:

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: dedicated
            operator: In
            values:
            - ui-team

Si este Pod existe, los nodos con el taint dedicated=ui-team:NoSchedule y la etiqueta dedicated=ui-team se tienen en cuenta para la creación en el aprovisionamiento automático de nodos.

En el siguiente ejemplo, se usa nodeSelector y el efecto es el mismo:

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  nodeSelector:
    dedicated: ui-team

Borra 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. Los grupos de nodos que no están marcados como aprovisionados de forma automática no se borran.

Tipos de máquina admitidos

A partir de la versión 1.19.7-gke.800 de GKE, el aprovisionamiento automático de nodos considera todos los tipos de máquinas cuando se crean grupos de nodos, con las siguientes excepciones:

  • La familia de máquinas T2D es compatible con GKE versión 1.19.16-gke.7600 y versiones posteriores.
  • Para las máquinas N1, el aprovisionamiento automático de nodos solo considera máquinas con hasta 64 CPU virtuales.
  • De forma predeterminada, se usa la familia de máquinas E2, a menos que ocurra lo siguiente:
    • 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 usará la familia de máquinas N1 para el grupo de nodos nuevo.
    • La carga de trabajo usa la etiqueta machine-family. Esto puede anularse si no se puede completar la solicitud de carga de trabajo (según el punto anterior). Para obtener más información, consulta Usa una familia de máquinas personalizadas.

En las versiones anteriores a GKE 1.19.7-gke.800, el aprovisionamiento automático de nodos solo consideraba los tipos de máquinas N1 con hasta 64 CPU virtuales.

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 o cos_containerd).
  • Ubuntu (ubuntu o ubuntu_containerd).

Asistencia para las VM Spot

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

La creación de grupos de nodos basados en VM 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 VM Spot.

Puedes combinarlo mediante la tolerancia con una regla de afinidad de nodo o nodeSelector para la etiqueta de nodo cloud.google.com/gke-spot="true" a fin de asegurarte de que tus cargas de trabajo solo se ejecuten en grupos de nodos basados en VM 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 y su valor predeterminado es de 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.

Esta compatibilidad con el almacenamiento efímero para los pods es compatible con las versiones de 1.19.7-gke.800 o posteriores, y 1.18.12-gke.1210 o versiones posteriores.

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

Habilita el aprovisionamiento automático de nodos

Habilita el aprovisionamiento automático de nodos en un clúster con gcloud o Google Cloud Console.

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

Console

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. En la página de Google Kubernetes Engine, haz clic en el nombre del clúster que quieres modificar.
  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 quieres 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, sigue estos pasos:

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

  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 la CLI de gcloud 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 superiores.

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: 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
    • cos: Container-Optimized OS con Docker.
    • ubuntu_containerd: Ubuntu con containerd
    • ubuntu: Ubuntu con Docker.

File

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 la CLI de gcloud 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 pueda acceder.

  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 pueda acceder.

  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, sigue estos pasos:

  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 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, sigue estos pasos:

  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 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 la CLI de gcloud o un archivo de configuración. De forma predeterminada, GKE establece la estrategia de actualización del grupo 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, sigue estos pasos:

  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 la CLI de gcloud. 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.

A fin de actualizar la estrategia de actualización de grupos 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 grupos 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. 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

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 pueda acceder.

  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.

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 la CLI de gcloud o Google Cloud Console. 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, sigue estos pasos:

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

Console

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. En la página de Google Kubernetes Engine, haz clic en el nombre del clúster que quieres modificar.
  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 el aprovisionamiento automático de nodos.
  5. Configura el uso mínimo y máximo de CPU y memoria que quieres 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.

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. No se admiten ubicaciones regionales. 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, 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,...).

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.

Console

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. En la página de Google Kubernetes Engine, haz clic en el nombre del clúster que quieres modificar.
  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.

Selecciona una plataforma de CPU mínima a nivel de la carga de trabajo

A partir de la versión 1.23 de GKE, puedes elegir una plataforma de CPU mínima para tus cargas de trabajo.

A fin de elegir una plataforma de CPU mínima para tus cargas de trabajo, especifica una familia de máquinas que sea compatible con la plataforma de CPU mínima que desees y realiza una de las siguientes tareas:

  • Agrega una regla de afinidad de nodo con la clave cloud.google.com/requested-min-cpu-platform, el operador In y un valor de plataforma de CPU mínima deseado con espacios reemplazados por guiones bajos (para ejemplo, AMD_Milan).
  • Agrega una nodeSelector con la clave cloud.google.com/requested-min-cpu-platform y el valor de plataforma de CPU mínima deseado con espacios reemplazados por guiones bajos (por ejemplo, AMD_Milan).

En el siguiente ejemplo, se establece nodeAffinity en una plataforma de CPU mínima de AMD Milan en la familia n2d:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: cloud.google.com/machine-family
            operator: In
            values:
            - n2d
          - key: cloud.google.com/requested-min-cpu-platform
            operator: In
            values:
            - AMD_Milan

Las cargas de trabajo que solicitan una plataforma de CPU mínima solo se pueden programar en grupos de nodos aprovisionados de forma automática que tengan el mismo valor para la clave cloud.google.com/requested-min-cpu-platform. Por ejemplo, si una carga de trabajo solicita cloud.google.com/requested-min-cpu-platform=Intel_Ice_Lake y el aprovisionamiento automático de nodos crea un grupo de nodos nuevo, GKE programa las cargas de trabajo posteriores que solicitan Intel_Ice_Lake en ese grupo de nodos. Sin embargo, una carga de trabajo que solicita Intel_Cascade_Lake activará la creación de otro grupo de nodos, aunque Intel Ice Lake es técnicamente una plataforma más alta que Intel Cascade Lake.

Selecciona una plataforma de CPU mínima a nivel del clúster

A fin de especificar la plataforma de CPU mínima predeterminada en todo el clúster para los grupos nuevos de nodos aprovisionados de forma automática, usa la CLI de gcloud o un archivo de configuración.

gcloud

Para establecer la plataforma de CPU mínima predeterminada, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-min-cpu-platform MIN_CPU_PLATFORM

Reemplaza lo siguiente:

Archivo

Para establecer la plataforma de CPU mínima predeterminada, puedes usar un archivo de configuración. Mediante la siguiente configuración de YAML, se establece la plataforma de CPU mínima predeterminada:

minCpuPlatform: MIN_CPU_PLATFORM

Reemplaza MIN_CPU_PLATFORM por la plataforma de CPU mínima que deseas.

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

  1. Crea un archivo de configuración que especifique la plataforma de CPU mínima en una ubicación a la que gcloud pueda acceder.

  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.

¿Qué sigue?