Configurar la creación automática de grupos de nodos

Puedes reducir la cantidad de gestión manual de la infraestructura en los clústeres estándar de Google Kubernetes Engine (GKE) dejando que GKE cree automáticamente grupos de nodos para los pods pendientes. En este documento se explica cómo habilitar la creación automática de grupos de nodos para clústeres y cargas de trabajo, cómo definir valores predeterminados para los nodos creados automáticamente y cómo activar la creación automática en algunos casos de uso habituales.

Este documento está dirigido a administradores, operadores y desarrolladores de clústeres que gestionan la infraestructura y despliegan cargas de trabajo en clústeres estándar. Para obtener más información sobre cómo funciona la creación automática de grupos de nodos y los diferentes métodos de habilitación (como ComputeClasses y el aprovisionamiento automático de nodos a nivel de clúster), consulta Información sobre la creación automática de grupos de nodos.

Limitaciones

La creación automática de grupos de nodos tiene las siguientes limitaciones:

  • Todas las limitaciones del autoescalador de clústeres también se aplican a la creación automática de grupos de nodos.
  • Los clústeres que tengan más de 200 grupos de nodos en total pueden experimentar una mayor latencia durante el autoescalado. Cualquier configuración que active la creación de un grupo de nodos nuevo, como la separación de cargas de trabajo o el uso de varias ComputeClasses, aumenta este número. Para obtener más información sobre los límites de los clústeres, consulta los límites y las prácticas recomendadas en "Planificar clústeres grandes".
  • Los límites de recursos que definas para el clúster al habilitar el aprovisionamiento automático de nodos también se aplican a los grupos de nodos que GKE crea para las clases de Compute.
  • ComputeClasses no admite los siguientes ajustes:
    • Actualizaciones de picos o actualizaciones azul-verde.
    • Integridad de los nodos y arranque seguro.
  • Para habilitar la creación automática de grupos de nodos en una ComputeClass en versiones de GKE anteriores a la 1.33.3-gke.1136000, también debes habilitar el aprovisionamiento automático de nodos a nivel de clúster. Esta limitación no se aplica en la versión 1.33.3-gke.1136000 de GKE ni en versiones posteriores.

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la CLI de gcloud, obtén la versión más reciente ejecutando el comando gcloud components update. Es posible que las versiones anteriores de la interfaz de línea de comandos de gcloud no admitan la ejecución de los comandos de este documento.

Requisitos

Puedes habilitar la creación automática de grupos de nodos en todo el clúster en cualquier versión de GKE mediante la función de aprovisionamiento automático de nodos. Si quieres usar una ComputeClass para habilitar la creación automática de grupos de nodos a nivel de carga de trabajo y no quieres habilitar el aprovisionamiento automático de nodos, tu clúster debe cumplir los siguientes requisitos:

  • Usa la versión 1.33.3-gke.1136000 de GKE o una posterior.
  • Usa el canal de lanzamiento rápido.

Para activar la creación automática de grupos de nodos con configuraciones de nodos específicas, debes cumplir los requisitos de versión correspondientes. Para obtener más información sobre la compatibilidad de versiones con varias configuraciones, consulta las notas de las versiones de GKE (nuevas funciones) o la documentación de tu caso práctico.

Habilitar la creación automática a nivel de carga de trabajo

Puedes habilitar la creación automática de grupos de nodos para cargas de trabajo específicas del clúster mediante una ComputeClass. El campo nodePoolAutoCreation de una especificación de ComputeClass controla si GKE puede crear nuevos grupos de nodos para los pods que seleccionen ese ComputeClass. En la versión 1.33.3-gke.1136000 de GKE y posteriores, puedes habilitar la creación automática de grupos de nodos para una ComputeClass aunque el clúster no tenga habilitado el aprovisionamiento automático de nodos. En versiones anteriores a la 1.33.3-gke.1136000, también debes habilitar el aprovisionamiento automático de nodos a nivel de clúster.

Para habilitar la creación automática de grupos de nodos en un ComputeClass, sigue estos pasos:

  1. Usa un clúster estándar nuevo o ya creado que cumpla los siguientes requisitos:

    • Usa la versión 1.33.3-gke.1136000 de GKE o una posterior.
    • Usa el canal de lanzamiento rápido.

    También puedes crear un clúster estándar.

  2. Si tu clúster no cumple los requisitos del paso anterior, habilita el aprovisionamiento automático de nodos a nivel de clúster.

  3. Guarda el siguiente ejemplo de ComputeClass como archivo YAML:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      -  machineFamily: n4
      -  machineFamily: n2
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Sustituye COMPUTE_CLASS por el nombre de la nueva ComputeClass. Para obtener más información sobre los campos disponibles en ComputeClasses, consulta la CustomResourceDefinition de ComputeClass.

  4. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

  5. Guarda el siguiente ejemplo de Deployment, que selecciona un ComputeClass, como helloweb-deploy.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          nodeSelector:
            # Replace with the name of a compute class
            cloud.google.com/compute-class: COMPUTE_CLASS 
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "250m"
                memory: "1Gi"

  6. Crea el Deployment en el clúster:

    kubectl apply -f helloweb-deploy.yaml
    
  7. Para verificar que GKE ha creado un grupo de nodos para tu pod, obtén una lista de los grupos de nodos de tu clúster:

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster.
    • CONTROL_PLANE_LOCATION: la región o zona del plano de control del clúster, como us-central1 o us-central1-a.

Habilitar el aprovisionamiento automático de nodos a nivel de clúster

Para habilitar la creación automática de grupos de nodos en todo el clúster de GKE, usa el ajuste Aprovisionamiento automático de nodos. El aprovisionamiento automático de nodos permite a GKE crear nuevos grupos de nodos para cargas de trabajo pendientes en todo el clúster en función de la configuración de la especificación del pod o de una ComputeClass. Puedes habilitar el aprovisionamiento automático de nodos en clústeres nuevos o ya creados.

Antes de habilitar el aprovisionamiento automático de nodos, planifica el tamaño del intervalo de direcciones IPv4 principal de tu subred de VPC. GKE usa este intervalo de direcciones IP como intervalo de direcciones IP de nodo principal. En función del tamaño y la escala de tu clúster, es posible que el intervalo de direcciones IP de nodo predeterminado no tenga suficientes direcciones IP para asignar a los nodos nuevos. Si actualizas el tamaño del intervalo de direcciones IP de los nodos después de crear el clúster, debes actualizar las reglas de cortafuegos del clúster de GKE para permitir el tráfico de las nuevas direcciones IP.

Para obtener grupos de nodos creados automáticamente en versiones de GKE anteriores a la 1.33.3-gke.1136000, debes seguir los pasos de esta sección. También puedes habilitar el aprovisionamiento automático de nodos en un clúster que ya tengas. Para ello, edita la configuración del clúster en la Google Cloud consola.

Para habilitar el aprovisionamiento automático de nodos al crear un clúster, selecciona una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Crear un clúster de Kubernetes.

    Ir a Crear un clúster de Kubernetes

  2. En la página Pasos básicos del clúster, especifica un nombre y una ubicación para el nuevo clúster.

  3. En el menú de navegación, haz clic en Automatización.

  4. Seleccione la casilla Habilitar aprovisionamiento automático de nodos. Aparecerá una sección Límites.

  5. Especifica los límites de CPU y memoria.

  6. Haz clic en Guardar cambios.

gcloud

gcloud container clusters create CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --min-cpu=MINIMUM_CPU \
    --min-memory=MINIMUM_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

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster para habilitar el aprovisionamiento automático de nodos.
  • CONTROL_PLANE_LOCATION: la región o zona del plano de control del clúster, como us-central1 o us-central1-a.
  • MINIMUM_CPU: número mínimo de núcleos del clúster.
  • MINIMUM_MEMORY: capacidad mínima de memoria, en GiB, del clúster.
  • MAXIMUM_CPU: número máximo de núcleos del clúster. Este límite se aplica a la suma de los núcleos de CPU de todos los nodos nuevos y actuales del clúster, incluidos los grupos de nodos creados manualmente.
  • MAXIMUM_MEMORY: capacidad máxima de memoria del clúster, en GiB. Este límite se aplica a la suma de la capacidad de memoria de todos los grupos de nodos nuevos y actuales del clúster, incluidos los grupos de nodos creados manualmente.

Configurar ajustes con un archivo de configuración de aprovisionamiento automático de nodos

Puedes configurar los límites de recursos y los ajustes de configuración de nodos para el aprovisionamiento automático de nodos mediante un archivo de configuración YAML. El archivo de configuración te permite especificar de forma declarativa los valores predeterminados de los grupos de nodos creados automáticamente y realizar configuraciones avanzadas, como habilitar la reparación automática de nodos. Este archivo no está relacionado con ComputeClasses, que son recursos personalizados de Kubernetes. En su lugar, el archivo de configuración es una alternativa más extensible al uso de marcas de línea de comandos para especificar la configuración del aprovisionamiento automático de nodos. Para obtener más información, consulta Configuración predeterminada a nivel de clúster con un archivo de configuración.

Para crear y usar un archivo de configuración, sigue estos pasos:

  1. En un editor de texto, crea un archivo YAML en una ruta a la que pueda acceder la CLI de Google Cloud.
  2. Añade las configuraciones que quieras definir o modificar, como en el siguiente ejemplo:

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
      - resourceType: 'nvidia-tesla-t4'
        maximum: 4
    management:
      autoRepair: true
      autoUpgrade: true
    shieldedInstanceConfig:
      enableSecureBoot: true
      enableIntegrityMonitoring: true
    

    En este ejemplo, el aprovisionamiento automático de nodos tiene los siguientes ajustes:

    • resourceLimits: define los límites de recursos para la CPU, la capacidad de memoria y las GPUs NVIDIA T4 del clúster. Estos límites se aplican a la suma de la capacidad de recursos del clúster, incluidos los grupos de nodos creados manualmente.
    • management: habilita la reparación y la actualización automáticas de nodos en todos los grupos de nodos creados automáticamente en el clúster.
    • shieldedInstanceConfig: habilita el arranque seguro y la monitorización de integridad de los nodos en todos los grupos de nodos creados automáticamente en el clúster.
  3. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Después de aplicar el archivo de configuración al clúster, GKE usa los ajustes del archivo para los grupos de nodos creados automáticamente en el clúster. Estos ajustes no se aplican a los grupos de nodos que GKE haya creado en el clúster.

Configurar límites de recursos para el aprovisionamiento automático de nodos

Cuando usas el aprovisionamiento automático de nodos a nivel de clúster, debes configurar límites para la cantidad total de recursos que puede tener tu clúster en todos sus grupos de nodos. Para habilitar el aprovisionamiento automático de nodos en un clúster, debe especificar los límites de capacidad de CPU y memoria del clúster. Además, para usar otros tipos de recursos adjuntos, como GPUs y TPUs, debes especificar límites para esos recursos. Estos límites solo son obligatorios si habilitas el ajuste de aprovisionamiento automático de nodos en tu clúster. Si solo usas ComputeClasses para obtener grupos de nodos creados automáticamente, no tienes que configurar límites de recursos.

Puedes añadir o modificar los límites de recursos para la creación automática de grupos de nodos mediante uno de los siguientes métodos:

Para configurar los límites de recursos de un clúster, selecciona una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Clústeres de Kubernetes.

    Ir a clústeres de Kubernetes

  2. Haz clic en el nombre del clúster. Se abrirá la página Detalles del clúster.

  3. Haga clic en la pestaña Detalles.

  4. En la sección Automatización, en la fila Aprovisionamiento automático de nodos, haz clic en Editar. Se abrirá el panel Editar aprovisionamiento automático de nodos.

  5. Seleccione la casilla Habilitar aprovisionamiento automático de nodos.

  6. En la sección Límites, especifica los valores mínimo y máximo de la capacidad de CPU y de memoria del clúster.

  7. Para configurar límites de otro recurso, como GPUs o TPUs, haz lo siguiente:

    1. Haz clic en Añadir recurso.
    2. En la lista desplegable Tipo de recurso, selecciona el modelo de GPU o el tipo de máquina de TPU, como NVIDIA A100 80 GB o ct5p.
    3. Especifica los valores mínimo y máximo del recurso.
  8. Opcional: En la sección Ubicaciones del pool de nodos, selecciona zonas específicas para que GKE cree nodos. Por ejemplo, si tienes previsto ejecutar cargas de trabajo de GPU, selecciona zonas que tengan una alta disponibilidad para el tipo de GPU que hayas elegido.

  9. Haz clic en Guardar cambios.

gcloud

Ejecuta uno de los siguientes comandos:

  • Especifica los límites de recursos de CPU y memoria:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY
    

    Haz los cambios siguientes:

    • MINIMUM_CPU: número mínimo de núcleos del clúster.
    • MINIMUM_MEMORY: capacidad mínima de memoria, en GiB, del clúster.
    • MAXIMUM_CPU: número máximo de núcleos del clúster. Este límite se aplica a la suma de los núcleos de CPU de todos los grupos de nodos del clúster, incluidos los grupos de nodos creados manualmente.
    • MAXIMUM_MEMORY: capacidad máxima de memoria del clúster, en GiB. Este límite se aplica a la suma de la capacidad de memoria de todos los grupos de nodos del clúster, incluidos los grupos de nodos creados manualmente.
  • Especifica los límites de recursos de GPU:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY \
        --min-accelerator=type=GPU_TYPE,count=MINIMUM_GPU_COUNT \
        --max-accelerator=type=GPU_TYPE,count=MAXIMUM_GPU_COUNT
    

    Haz los cambios siguientes:

    • GPU_TYPE: el tipo de GPU para el que se va a definir un límite, como nvidia-l4.
    • MINIMUM_GPU_COUNT: el número mínimo de GPUs del tipo especificado que puede tener el clúster.
    • MAXIMUM_GPU_COUNT: número máximo de GPUs del tipo especificado que puede tener el clúster.
  • Especifica los límites de recursos de TPU:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY \
        --min-accelerator=type=TPU_TYPE,count=MINIMUM_TPU_COUNT \
        --max-accelerator=type=TPU_TYPE,count=MAXIMUM_TPU_COUNT
    

    Haz los cambios siguientes:

    • TPU_TYPE: el tipo de TPU para el que se va a definir un límite. Se admiten los siguientes valores:
      • tpu-v4-podslice: TPU v4.
      • tpu-v5-lite-podslice: TPU v5e con tipos de máquinas que empiezan por ct5lp-.
      • tpu-v5p-slice: TPU v5e con tipos de máquinas que empiezan por ct5p-.
      • tpu-v6e-slice: TPU Trillium.
    • MINIMUM_TPU_COUNT: número mínimo de chips de TPU del tipo especificado que puede tener el clúster. Si el valor que especifica es mayor que el número de chips de TPU de un slice de TPU multihost, es posible que el slice de TPU no se reduzca.
    • MAXIMUM_TPU_COUNT: número máximo de chips de TPU del tipo especificado que puede tener el clúster. En el caso de las porciones de TPU de varios hosts, especifica un valor superior al número de chips de cada porción para que GKE pueda escalar la porción de forma atómica. El número de chips de un segmento es el producto de la topología de la TPU. Por ejemplo, si la topología es 2x2x2, el número de chips de la porción es 8, lo que significa que el valor de MAXIMUM_TPU_COUNT debe ser mayor que 8.

Archivo de configuración

  1. En el archivo de configuración, especifica uno de los siguientes conjuntos de campos en el campo resourceLimits:

    • Especifica los límites de recursos de CPU y memoria:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
      

      Haz los cambios siguientes:

      • MINIMUM_CPU: número mínimo de núcleos del clúster.
      • MINIMUM_MEMORY: capacidad mínima de memoria, en GiB, del clúster.
      • MAXIMUM_CPU: número máximo de núcleos del clúster. Este límite se aplica a la suma de los núcleos de CPU de todos los grupos de nodos del clúster, incluidos los grupos de nodos creados manualmente.
      • MAXIMUM_MEMORY: capacidad máxima de memoria del clúster, en GiB. Este límite se aplica a la suma de la capacidad de memoria de todos los grupos de nodos del clúster, incluidos los grupos de nodos creados manualmente.
    • Especifica los límites de recursos de GPU:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
        - resourceType: 'GPU1_TYPE'
          minimum: MINIMUM_GPU1_COUNT
          maximum: MAXIMUM_GPU1_COUNT
        - resourceType: 'GPU2_TYPE'
          minimum: MINIMUM_GPU2_COUNT
          maximum: MAXIMUM_GPU2_COUNT
      

      Haz los cambios siguientes:

      • GPU1_TYPE y GPU2_TYPE: los tipos de GPU para los que se van a definir límites, como nvidia-l4.
      • MINIMUM_GPU1_COUNT,MINIMUM_GPU2_COUNT: el número mínimo de GPUs de los tipos especificados que puede tener el clúster.
      • MAXIMUM_GPU1_COUNT,MAXIMUM_GPU2_COUNT: el número máximo de GPUs de los tipos especificados que puede tener el clúster.
    • Especifica los límites de recursos de TPU:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
        - resourceType: 'TPU1_TYPE'
          minimum: MINIMUM_TPU1_COUNT
          maximum: MAXIMUM_TPU1_COUNT
        - resourceType: 'TPU2_TYPE'
          minimum: MINIMUM_TPU2_COUNT
          maximum: MAXIMUM_TPU2_COUNT
      

      Haz los cambios siguientes:

      • TPU1_TYPE,TPU2_TYPE: los tipos de TPU para los que se van a definir límites. Se admiten los siguientes valores:
        • tpu-v4-podslice: TPU v4.
        • tpu-v5-lite-podslice: TPU v5e con tipos de máquinas que empiezan por ct5lp-.
        • tpu-v5p-slice: TPU v5e con tipos de máquinas que empiezan por ct5p-.
        • tpu-v6e-slice: TPU Trillium.
      • MINIMUM_TPU1_COUNT,MINIMUM_TPU2_COUNT: el número mínimo de chips de TPU del tipo especificado que puede tener el clúster. Si el valor que especifiques es mayor que el número de chips de TPU de un segmento de TPU multihost, es posible que tu segmento de TPU no se reduzca.
      • MAXIMUM_TPU1_COUNT,MAXIMUM_TPU2_COUNT: número máximo de chips de TPU del tipo especificado que puede tener el clúster. En el caso de las slices de TPU de varios hosts, especifica un valor superior al número de chips de cada slice para que GKE pueda escalar la slice de forma atómica. El número de chips de un segmento es el producto de la topología de la TPU. Por ejemplo, si la topología de TPU1_TYPE es 2x2x2, el número de chips de la porción es 8, lo que significa que el valor de MAXIMUM_TPU1_COUNT debe ser mayor que 8.
  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Marcar grupos de nodos como creados automáticamente

Después de habilitar el aprovisionamiento automático de nodos a nivel de clúster, puedes marcar cualquier grupo de nodos del clúster como creado automáticamente. GKE gestiona el escalado de estos grupos de nodos, incluida la eliminación de los grupos de nodos cuando están vacíos. Puedes marcar los grupos de nodos creados manualmente como creados automáticamente para que GKE los gestione por ti.

Si inhabilitas el aprovisionamiento automático en tu clúster, GKE dejará de gestionar todos los grupos de nodos creados automáticamente en el clúster. Si vuelves a habilitar el aprovisionamiento automático del clúster más adelante, GKE no reanudará automáticamente la gestión de esos grupos de nodos. Debes marcar esos grupos de nodos como creados automáticamente.

Para marcar un grupo de nodos como creado automáticamente, ejecuta el siguiente comando:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning

Sustituye NODE_POOL_NAME por el nombre del grupo de nodos.

Configurar los ajustes predeterminados de los grupos de nodos creados automáticamente

GKE usa tus ComputeClasses y especificaciones de Pod para determinar los tipos de nodos que pueden ejecutar de forma óptima tus Pods pendientes. También puedes configurar ajustes predeterminados que GKE aplique a los grupos de nodos creados automáticamente, como una cuenta de servicio de gestión de identidades y accesos (IAM) personalizada para los nodos o configuraciones de disco de arranque personalizadas. Estos ajustes predeterminados anulan los valores predeterminados correspondientes que Google haya definido para tus clústeres. Por ejemplo, puedes definir una imagen de nodo de Ubuntu como predeterminada para los grupos de nodos creados automáticamente, lo que anula la imagen de nodo predeterminada de Container-Optimized OS de GKE.

Puede configurar los ajustes predeterminados a nivel de clúster mediante el aprovisionamiento automático de nodos o a nivel de carga de trabajo en ComputeClasses. Antes de configurar un ajuste en uno de estos niveles, ten en cuenta lo siguiente:

  • Los ajustes a nivel de clúster se aplican a cualquier grupo de nodos creado automáticamente en el clúster, mientras que los ajustes de ComputeClass solo se aplican a las cargas de trabajo que usan esa ComputeClass.
  • Si especificas el mismo ajuste predeterminado en un ComputeClass y en el nivel del clúster, GKE usará el ajuste de ComputeClass para las cargas de trabajo que usen ComputeClass.
  • Los valores predeterminados que configure solo se aplicarán a los grupos de nodos creados automáticamente nuevos. Los grupos de nodos que ya tengas no se verán afectados.

En las siguientes secciones se explica cómo configurar ajustes predeterminados específicos.

Definir la imagen de nodo predeterminada

Selecciona una de las opciones siguientes:

ComputeClass

  1. En un archivo de manifiesto de ComputeClass, usa el campo nodePoolConfig.imageType. Este campo está disponible en la versión 1.32.4-gke.1198000 de GKE y en versiones posteriores.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      nodePoolConfig:
        imageType: IMAGE_TYPE
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Sustituye IMAGE_TYPE por un valor de la imagen del nodo, que puede ser uno de los siguientes:

    • cos_containerd: Container-Optimized OS con containerd.
    • ubuntu_containerd: Ubuntu con containerd.
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

Para definir la imagen de nodo predeterminada en la línea de comandos, usa la marca --autoprovisioning-image-type:

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

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster.
  • IMAGE_TYPE: la imagen del nodo, que puede ser una de las siguientes:
    • cos_containerd: Container-Optimized OS con containerd.
    • ubuntu_containerd: Ubuntu con containerd.

Para definir la imagen de nodo predeterminada en un archivo de configuración, sigue estos pasos:

  1. En el archivo de configuración, especifica el campo imageType:

      imageType: 'IMAGE_TYPE'
    

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Definir la cuenta de servicio de gestión de identidades y accesos predeterminada para los nodos

Los nodos de GKE usan una cuenta de servicio de IAM para tareas del sistema, como el registro y la monitorización. Para cambiar la cuenta de servicio de IAM de los grupos de nodos creados automáticamente, selecciona una de las siguientes opciones:

ComputeClass

  1. En un manifiesto de ComputeClass, usa el campo nodePoolConfig.serviceAccount. Este campo está disponible en la versión 1.31.4-gke.1072000 de GKE y en versiones posteriores.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      nodePoolConfig:
        serviceAccount: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Haz los cambios siguientes:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio de gestión de identidades y accesos, como my-node-account.
    • PROJECT_ID: el ID del proyecto de la cuenta de servicio.
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

Cuando usas la CLI de gcloud para configurar una cuenta de servicio predeterminada para grupos de nodos creados automáticamente, también debes especificar los ámbitos de acceso que necesitan los grupos de nodos para funcionar correctamente.

Para definir la cuenta de servicio predeterminada y los ámbitos de acceso en la línea de comandos, usa las marcas --autoprovisioning-service-account y --autoprovisioning-scopes:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --autoprovisioning-service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append

Haz los cambios siguientes:

  • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio de gestión de identidades y accesos, como my-node-account.
  • PROJECT_ID: el ID del proyecto de la cuenta de servicio.

Para definir la cuenta de servicio y los ámbitos de acceso predeterminados en un archivo de configuración, sigue estos pasos:

  1. En el archivo de configuración, especifica los campos serviceAccount y scopes:

    serviceAccount: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    scopes: https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append
    

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Definir las zonas predeterminadas de los nodos creados automáticamente

De forma predeterminada, GKE crea automáticamente nodos en las siguientes zonas, en función del tipo de clúster:

  • Clústeres regionales: GKE crea nodos en tres zonas aleatorias de la región del clúster.
  • Clústeres zonales: GKE crea nodos en la misma zona que el plano de control del clúster.

Puedes especificar manualmente una lista de zonas en las que GKE cree nodos automáticamente. Estas zonas deben estar en la misma región que el plano de control del clúster. Por ejemplo, si tienes un clúster zonal con el plano de control en us-central1-a, puedes especificar cualquier zona de la región us-central1 para que GKE cree nodos automáticamente. Si modificas las zonas predeterminadas de los nodos creados automáticamente en un clúster, los cambios solo se aplicarán a los grupos de nodos que cree GKE.

Para especificar las zonas predeterminadas de los nodos creados automáticamente, selecciona una de las siguientes opciones:

ComputeClass

  1. En un archivo de manifiesto de ComputeClass, usa el campo spec.priorityDefaults.location.zones. Este campo está disponible en la versión 1.33.1-gke.1545000 de GKE y en versiones posteriores.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2','...']
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Sustituye ZONE1,ZONE2,... por una lista separada por comas de las zonas predeterminadas de los nodos creados automáticamente, como us-central1-a','us-central1-b', 'us-central1-f'. GKE usa estas zonas si las reglas específicas del campo spec.priorities no incluyen una lista explícita de zonas.

  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

Para definir las zonas predeterminadas para la creación automática de grupos de nodos en la línea de comandos, usa la marca --autoprovisioning-locations:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --autoprovisioning-locations=ZONE1,ZONE2,...

Sustituye ZONE1,ZONE2,... por una lista separada por comas de las zonas predeterminadas de los nodos creados automáticamente, como us-central1-a','us-central1-b', 'us-central1-f'.

Para definir las zonas predeterminadas para la creación automática de grupos de nodos mediante un archivo de configuración, sigue estos pasos:

  1. Especifica el campo autoprovisioningLocations en el archivo de configuración:

    autoprovisioningLocations:
    - ZONE1
    - ZONE2
    

    Sustituye ZONE1,ZONE2 por las zonas predeterminadas de los nodos creados automáticamente, como 'us-central1-a' y 'us-central1-b'.

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Definir claves de encriptado gestionadas por el cliente para el encriptado del disco de arranque

Puedes especificar una clave de cifrado gestionada por el cliente (CMEK) en Cloud Key Management Service que GKE usa para cifrar los discos de arranque de los nodos de los grupos de nodos creados automáticamente. Debes crear la clave antes de usarla con la creación automática de grupos de nodos. Para definir una CMEK para los discos de arranque de tu nodo, selecciona una de las siguientes opciones:

ComputeClass

En ComputeClasses, debes especificar la clave en cada regla de prioridad del campo spec.priorities de ComputeClass.

  1. En un archivo de manifiesto de ComputeClass, usa el campo priorities.storage.bootDiskKMSKey:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
        storage:
          bootDiskKMSKey: projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
      - machineFamily: n4d
        storage:
          bootDiskKMSKey: projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Haz los cambios siguientes:

    • KEY_PROJECT_ID: el ID del proyecto que tiene la clave.
    • KEY_LOCATION: la ubicación del conjunto de claves.
    • KEY_RING: el nombre del conjunto de claves que contiene la clave.
    • KEY_NAME: el nombre de la clave.
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

  1. Especifica el campo bootDiskKmsKey en el archivo de configuración:

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

    Haz los cambios siguientes:

    • KEY_PROJECT_ID: el ID del proyecto que tiene la clave.
    • KEY_LOCATION: la ubicación del conjunto de claves.
    • KEY_RING: el nombre del conjunto de claves que contiene la clave.
    • KEY_NAME: el nombre de la clave.

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Configurar la integridad de los nodos y el arranque seguro

Solo puedes habilitar el arranque seguro y la monitorización de integridad en los grupos de nodos creados automáticamente mediante el archivo de configuración de aprovisionamiento automático de nodos.

  1. Especifica el campo shieldedInstanceConfig en el archivo de configuración:

    shieldedInstanceConfig:
      enableSecureBoot: true
      enableIntegrityMonitoring: true
    

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

Configurar la reparación y la actualización automáticas de nodos

Puedes modificar los ajustes de las reparaciones automáticas de nodos y las actualizaciones automáticas de nodos en los grupos de nodos creados automáticamente. Estas funciones están habilitadas de forma predeterminada en todos los clústeres y grupos de nodos de GKE. Te recomendamos que mantengas habilitadas estas funciones para mejorar la fiabilidad y la estabilidad de tus clústeres.

Para cambiar los ajustes de reparación y actualización automáticas de los nodos, selecciona una de las siguientes opciones:

ComputeClass

  1. En un manifiesto de ComputeClass, usa el campo autoRepair y el campo autoUpgrade en el campo spec.nodePoolConfig. Estos campos están disponibles en la versión 1.34.0-gke.2201000 de GKE y en versiones posteriores.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      nodePoolConfig:
        autoRepair: true
        autoUpgrade: true
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

  • Para habilitar los ajustes de reparación y actualización automáticas en la línea de comandos, usa las marcas --enable-autoprovisioning-autorepair y --enable-autoprovisioning-autoupgrade:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --enable-autoprovisioning-autorepair \
        --enable-autoprovisioning-autoupgrade
    
  • Para inhabilitar los ajustes de reparación y actualización automáticas en la línea de comandos, usa las marcas --no-enable-autoprovisioning-autorepair y --no-enable-autoprovisioning-autoupgrade:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --no-enable-autoprovisioning-autorepair \
        --no-enable-autoprovisioning-autoupgrade
    
  • Para modificar los ajustes de reparación y actualización automáticas de los nodos mediante un archivo de configuración, sigue estos pasos:

    1. Especifica los campos management.autoRepair y management.autoUpgrade en el archivo de configuración:

      management:
        autoRepair: true
        autoUpgrade: true
      

      Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

    2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

      gcloud container clusters create CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-autoprovisioning \
          --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
      

      Haz los cambios siguientes:

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

Configurar los ajustes de actualización de subidas

Puedes especificar los ajustes de actualización de picos en los grupos de nodos creados automáticamente. Las actualizaciones de aumento son la estrategia de actualización de nodos predeterminada de GKE. Para cambiar la configuración de las actualizaciones de picos de demanda, debes configurar el aprovisionamiento automático de nodos a nivel de clúster.

  • Para especificar los ajustes de actualización de picos en la línea de comandos, usa las marcas --autoprovisioning-max-surge-upgrade y --autoprovisioning-max-unavailable-upgrade:

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

    Haz los cambios siguientes:

    • MAX_SURGE: número máximo de nodos que se pueden añadir al grupo de nodos durante las actualizaciones.
    • MAX_UNAVAILABLE: el número máximo de nodos del grupo de nodos que pueden no estar disponibles simultáneamente durante las actualizaciones.
  • Para especificar los ajustes de actualización de subidas de tensión mediante un archivo de configuración, sigue estos pasos:

    1. Especifica los campos upgradeSettings.maxSurgeUpgrade y upgradeSettings.maxUnavailableUpgrade en el archivo de configuración:

      upgradeSettings:
        maxSurgeUpgrade: MAX_SURGE
        maxUnavailableUpgrade: MAX_UNAVAILABLE
      

      Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

    2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

      gcloud container clusters create CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-autoprovisioning \
          --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
      

      Haz los cambios siguientes:

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

Los ajustes de actualización de picos que especifiques solo se aplicarán si tu clúster usa actualizaciones de picos para actualizar los grupos de nodos creados automáticamente. Para cambiar la estrategia de actualización de nodos a actualizaciones de picos en los grupos de nodos creados automáticamente, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --enable-autoprovisioning-surge-upgrade

Cuando cambias la estrategia de actualización, GKE usa los ajustes que hayas configurado previamente para esa estrategia.

Usar actualizaciones azul-verde en los grupos de nodos creados automáticamente

Puedes cambiar la estrategia de actualización de nodos a actualizaciones azul-verde para todos los grupos de nodos creados automáticamente y ajustar la configuración predeterminada de las actualizaciones azul-verde. Para cambiar tu estrategia de actualización, debes configurar el aprovisionamiento automático de nodos a nivel de clúster. Los cambios que hagas solo se aplicarán a los grupos de nodos creados automáticamente. También puedes actualizar los grupos de nodos creados automáticamente para usar las actualizaciones azul-verde.

  • Para usar las actualizaciones azul-verde y la configuración predeterminada de GKE en los grupos de nodos creados automáticamente, ejecuta el siguiente comando:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
        --enable-autoprovisioning \
        --enable-autoprovisioning-blue-green-upgrade
    
  • Para usar las actualizaciones azul-verde y configurar tus propios ajustes predeterminados para los nuevos grupos de nodos creados automáticamente, ejecuta el siguiente comando:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --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
    

    Haz los cambios siguientes:

    • NODE_POOL_SOAK_DURATION: la duración, en segundos, que espera GKE después de drenar todos los lotes de nodos del grupo azul antes de eliminarlo. El valor predeterminado es 3600.
    • BATCH_NODE_COUNT: número de nodos que se van a vaciar en un lote durante la fase de vaciado del grupo azul. El valor predeterminado es 1. Si especificas el valor 0, GKE se saltará la fase de drenaje del grupo azul.
    • BATCH_SOAK_DURATION: la duración, en segundos, que espera GKE para iniciar una operación de drenaje por lotes después de que se complete la operación de drenaje anterior. El valor predeterminado es 0.

Configurar discos de arranque de nodos personalizados

Para especificar el tipo y el tamaño de los discos de arranque que GKE adjunta a cada VM de nodo de un grupo de nodos creado automáticamente, seleccione una de las siguientes opciones:

ComputeClass

  1. Usa los campos bootDiskType y bootDiskSize en el campo spec.priorities.storage de un ComputeClass:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
        storage:
          bootDiskType: BOOT_DISK_TYPE
          bootDiskSize: BOOT_DISK_SIZE
      - machineFamily: n4d
        storage:
          bootDiskType: BOOT_DISK_TYPE
          bootDiskSize: BOOT_DISK_SIZE
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    Haz los cambios siguientes:

    • BOOT_DISK_TYPE: el tipo de disco que se usará como disco de arranque del nodo. El valor que especifiques debe ser compatible con el tipo de máquina de Compute Engine que GKE utilice para esa regla de prioridad. El valor debe ser uno de los siguientes:
      • pd-balanced: disco persistente balanceado.
      • pd-standard: disco persistente estándar.
      • pd-ssd: disco persistente de rendimiento (SSD).
      • hyperdisk-balanced: Google Cloud Hyperdisk Balanced.
    • BOOT_DISK_SIZE: tamaño, en GiB, del disco de arranque del nodo. El valor mínimo es 10.
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

gcloud

  1. En el archivo de configuración, especifica los campos diskSizeGb y diskType:

    diskSizeGb: BOOT_DISK_SIZE
    diskType: BOOT_DISK_TYPE
    

    Haz los cambios siguientes:

    • BOOT_DISK_TYPE: el tipo de disco que se usará como disco de arranque del nodo. El valor que especifiques debe ser compatible con el tipo de máquina de Compute Engine que GKE utilice para esa regla de prioridad. El valor debe ser uno de los siguientes:
      • pd-balanced: disco persistente balanceado.
      • pd-standard: disco persistente estándar.
      • pd-ssd: disco persistente de rendimiento (SSD).
      • hyperdisk-balanced: Google Cloud Hyperdisk Balanced.
    • BOOT_DISK_SIZE: tamaño, en GiB, del disco de arranque del nodo. El valor mínimo es 10.

    Si tu archivo de configuración tiene otros ajustes, no los modifiques. Las modificaciones o eliminaciones que se hagan en el archivo de configuración también se aplicarán a los ajustes correspondientes a nivel de clúster.

  2. Proporciona el archivo de configuración a GKE especificando la marca --autoprovisioning-config-file y la marca --enable-autoprovisioning para un clúster nuevo o ya disponible:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

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

GKE reserva una parte del disco de arranque del nodo para la funcionalidad del sistema y para el almacenamiento efímero. Para obtener más información, consulta Almacenamiento efímero respaldado por el disco de arranque del nodo.

Configurar grupos de nodos creados automáticamente para casos prácticos habituales

En las siguientes secciones se muestra cómo solicitar grupos de nodos creados automáticamente para determinados casos prácticos habituales de GKE. Para obtener más información sobre otros casos prácticos y configuraciones admitidas, consulta la documentación de tu caso práctico específico.

Seleccionar una serie o un tipo de máquina

Para seleccionar una serie o un tipo de máquina de Compute Engine admitidos, elige una de las siguientes opciones:

ComputeClass

  1. En un manifiesto de ComputeClass, especifica uno de los siguientes campos en el campo spec.priorities. Puede especificar ambos campos en el mismo manifiesto de ComputeClass, pero no en la misma regla de prioridad.

    • Para seleccionar una serie de máquinas, especifica el campo machineFamily en una regla de prioridad:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: COMPUTE_CLASS
      spec:
        priorities:
        - machineFamily: MACHINE_SERIES
        whenUnsatisfiable: ScaleUpAnyway
        nodePoolAutoCreation:
          enabled: true
      

      Sustituye MACHINE_SERIES por una serie de máquinas de Compute Engine, como n4.

    • Para seleccionar un tipo de máquina, especifica el campo machineType en una regla de prioridad:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: COMPUTE_CLASS
      spec:
        priorities:
        - machineType: MACHINE_TYPE
        whenUnsatisfiable: ScaleUpAnyway
        nodePoolAutoCreation:
          enabled: true
      

      Sustituye MACHINE_TYPE por un tipo de máquina de Compute Engine, como c4-standard-96. En GKE 1.33.2-gke.1111000 y versiones posteriores, también puedes especificar tipos de máquinas personalizados en este campo.

    No puedes especificar los campos machineFamily y machineType en la misma regla de prioridad.

  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

  3. Selecciona la clase ComputeClass en una carga de trabajo.

Especificaciones de pod

  1. En un manifiesto de Pod, selecciona una de las siguientes etiquetas de nodo:

    • Para seleccionar una serie de máquinas, usa la etiqueta de nodo cloud.google.com/machine-family:

      apiVersion: v1
      kind: Pod
      metadata:
        name: machine-series-pod
      spec:
        nodeSelector:
          cloud.google.com/machine-family: MACHINE_SERIES
        containers:
        - name: hello-app
          image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      

      Sustituye MACHINE_SERIES por una serie de máquinas de Compute Engine, como n4.

    • Para seleccionar un tipo de máquina predefinido, usa las etiquetas de nodo cloud.google.com/machine-family y node.kubernetes.io/instance-type:

      apiVersion: v1
      kind: Pod
      metadata:
        name: machine-series-pod
      spec:
        nodeSelector:
          cloud.google.com/machine-family: MACHINE_SERIES
          node.kubernetes.io/instance-type: MACHINE_TYPE
        containers:
        - name: hello-app
          image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      

      Sustituye MACHINE_TYPE por un tipo de máquina de Compute Engine de la serie de máquinas especificada. Por ejemplo, si especificas n4 en MACHINE_SERIES, puedes especificar n4-standard-80 en MACHINE_TYPE.

      En la versión 1.33.2-gke.1111000 de GKE, también puedes especificar tipos de máquina personalizados en este campo.

  2. Crea el Pod:

    kubectl apply -f PATH_TO_POD_MANIFEST
    

    Sustituye PATH_TO_POD_MANIFEST por la ruta al manifiesto de Pod.

Seleccionar GPUs

Para solicitar GPUs para grupos de nodos creados automáticamente, selecciona una de las siguientes opciones:

ComputeClass

  1. En un manifiesto de ComputeClass, especifica el campo spec.priorities.gpu:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - gpu:
          type: GPU_TYPE
          count: GPU_COUNT
          driverVersion: DRIVER_VERSION
      whenUnsatisfiable: DoNotScaleUp
      nodePoolAutoCreation:
        enabled: true
    

    Haz los cambios siguientes:

    • GPU_TYPE: el tipo de GPU que se va a asociar, como nvidia-l4.
    • GPU_COUNT: número de GPUs que se van a asociar a cada nodo. Este valor debe ser 1 como mínimo.
    • DRIVER_VERSION: la versión del controlador de la GPU que se va a instalar. El valor debe ser default o latest. Este campo requiere la versión 1.31.1-gke.1858000 de GKE o una posterior.
  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

  3. Selecciona ComputeClass en una carga de trabajo de GPU, como en el siguiente ejemplo:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-gpu-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: nvidia-l4-class
      containers:
      - name: my-gpu-container
        image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
        command: ["/bin/bash", "-c", "--"]
        args: ["while true; do sleep 600; done;"]
        resources:
          limits:
          nvidia.com/gpu: 1
    

Especificaciones de pod

Para seleccionar GPUs en las especificaciones de tu pod, debes configurar el aprovisionamiento automático de nodos a nivel de clúster y definir límites de recursos para ese tipo de GPU. Para configurar los límites de recursos de GPU y seleccionar las GPUs de tus pods, sigue estos pasos:

  1. Configura los límites de recursos a nivel de clúster para las GPUs que quieras usar, tal como se describe en la sección Configurar límites de recursos para la creación automática de grupos de nodos.
  2. Selecciona GPUs mediante etiquetas de nodo en la especificación del pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-gpu-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-accelerator: GPU_TYPE
        cloud.google.com/gke-accelerator-count: GPU_COUNT
        cloud.google.com/gke-gpu-driver-version: DRIVER_VERSION
      containers:
      - name: my-gpu-container
        image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
        command: ["/bin/bash", "-c", "--"]
        args: ["while true; do sleep 600; done;"]
        resources:
          limits:
          nvidia.com/gpu: GPU_QUANTITY
    

    Haz los cambios siguientes:

    • GPU_TYPE: el tipo de GPU que se va a asociar, como nvidia-l4.
    • GPU_COUNT: número de GPUs que se van a asociar a cada nodo. Este valor debe ser 1 como mínimo.
    • DRIVER_VERSION: la versión del controlador de la GPU que se va a instalar. El valor debe ser default o latest. En la versión 1.32.2-gke.1297000 de GKE y posteriores, GKE instala automáticamente la versión del controlador default. Esta etiqueta de nodo requiere la versión 1.29.2-gke.1108000 de GKE o una posterior. Para obtener más información, consulta Instalar controladores mediante el aprovisionamiento automático de nodos con GPUs.
    • GPU_QUANTITY: número de GPUs que se van a asociar al pod. Este valor debe ser inferior o igual al valor de GPU_COUNT.

Seleccionar TPUs

Puedes solicitar TPUs en especificaciones de ComputeClass o de Pod. En esta sección se da por hecho que conoces la selección de TPU de Cloud y que sabes el tipo, la topología y el número de TPU que quieres usar. Los pasos que debes seguir dependen de cómo selecciones las TPUs:

Limitar el tiempo de ejecución de los nodos creados automáticamente

Puedes especificar una duración máxima tras la cual GKE finalizará los nodos creados automáticamente. A este límite de tiempo se aplican las restricciones de Compute Engine.

Selecciona una de las opciones siguientes:

ComputeClass

  1. En un archivo de manifiesto de ComputeClass, usa el campo spec.priorities.maxRunDurationSeconds. Este campo está disponible en la versión 1.32.1-gke.1159000 de GKE y en versiones posteriores.

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machine-family: n4
        maxRunDurationSeconds: MAX_RUN_DURATION
      whenUnsatisfiable: DoNotScaleUp
      nodePoolAutoCreation:
        enabled: true
    

    Sustituye MAX_RUN_DURATION por el tiempo, en segundos, que pueden ejecutarse los nodos creados automáticamente antes de que GKE los termine.

  2. Aplica el manifiesto de ComputeClass al clúster:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    Sustituye PATH_TO_COMPUTECLASS_MANIFEST por la ruta al archivo de manifiesto de ComputeClass.

  3. Selecciona la clase ComputeClass en una carga de trabajo.

Especificaciones de pod

  1. En el manifiesto de tu pod, usa un selector de nodos para la etiqueta de nodo cloud.google.com/gke-max-run-duration-seconds. Esta etiqueta de nodo está disponible en GKE 1.31.2-gke.1518000 y versiones posteriores.

    apiVersion: v1
    kind: Pod
    metadata:
      name: machine-series-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: n4
        cloud.google.com/gke-max-run-duration-seconds: MAX_RUN_DURATION
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    Sustituye MAX_RUN_DURATION por el tiempo, en segundos, que pueden ejecutarse los nodos creados automáticamente antes de que GKE los termine.

  2. Crea el Pod:

    kubectl apply -f PATH_TO_POD_MANIFEST
    

    Sustituye PATH_TO_POD_MANIFEST por la ruta al manifiesto de Pod.

Especificar una 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 carga de trabajo (opción recomendada) o de clúster.

Inhabilitar la creación automática de grupos de nodos

En las siguientes secciones se explica cómo inhabilitar la creación automática de grupos de nodos en grupos de nodos específicos o en todo el clúster. También puedes inhabilitar la creación automática de grupos de nodos en una ComputeClass especificando el valor false en el campo nodePoolAutoCreation.enabled de la ComputeClass. Sin embargo, no te recomendamos que inhabilites la creación automática de ComputeClasses, ya que es una de las principales ventajas de ComputeClasses, que te permite usar funciones como la migración activa y las prioridades de fallback.

Inhabilitar la creación automática en grupos de nodos específicos

Puedes impedir que GKE gestione los nodos de los grupos de nodos creados automáticamente. Esta acción tiene los siguientes efectos:

  • La herramienta de escalado automático de clústeres deja de crear o eliminar nodos en ese grupo de nodos. Si quieres que GKE ajuste la escala de los nodos automáticamente, puedes habilitar la herramienta de ajuste automático de escala del clúster para ese grupo de nodos por separado.
  • GKE no elimina el grupo de nodos cuando el número de nodos es cero.
  • GKE sigue colocando los pods pendientes en los nodos disponibles del grupo de nodos. Si el aprovisionamiento automático de nodos sigue habilitado en el clúster, GKE también puede crear grupos de nodos para los pods pendientes según sea necesario.

Para inhabilitar la creación automática de un grupo de nodos específico, ejecuta el siguiente comando:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autoprovisioning

Inhabilitar el aprovisionamiento automático de nodos en el clúster

Puedes inhabilitar la creación automática de grupos de nodos en todo el clúster si inhabilitas el ajuste de clúster de aprovisionamiento automático de nodos. Esta acción tiene los siguientes efectos:

  • La herramienta de adaptación dinámica del clúster deja de crear y eliminar nodos en los grupos de nodos creados automáticamente. Los grupos de nodos creados manualmente que usen el autoescalador de clústeres no se verán afectados.
  • GKE no crea automáticamente grupos de nodos para cargas de trabajo pendientes. Monitoriza tu clúster para evitar que los pods se queden bloqueados.
  • Si el clúster cumple los siguientes requisitos, GKE seguirá creando grupos de nodos para las ComputeClasses que habiliten la creación automática:

    • Usa la versión 1.33.3-gke.1136000 de GKE o una posterior.
    • Está registrado en el canal de lanzamiento rápido.

    Si el clúster no cumple estos requisitos, GKE no creará grupos de nodos para las clases de Compute que habiliten la creación automática.

Si vuelves a habilitar el ajuste de aprovisionamiento automático de nodos a nivel de clúster más adelante, GKE no volverá a habilitar la creación automática de grupos de nodos en los grupos de nodos que ya tengas. Debes marcar grupos de nodos concretos como creados automáticamente.

Para inhabilitar el ajuste de aprovisionamiento automático de nodos a nivel de clúster, selecciona una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Clústeres de Kubernetes:

    Ir a clústeres de Kubernetes

  2. Haga clic en el nombre del clúster que quiera modificar. Se abrirá la página Detalles del clúster.

  3. Haga clic en la pestaña Detalles.

  4. En la sección Automatización, en la fila Aprovisionamiento automático de nodos, haz clic en Editar. Aparecerá el panel Editar aprovisionamiento automático de nodos.

  5. Desmarca la casilla Habilitar aprovisionamiento automático de nodos.

  6. Haz clic en Guardar cambios.

gcloud

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autoprovisioning

Siguientes pasos