Usa el aprovisionamiento automático de nodos

En esta página, se explica cómo usar la función de aprovisionamiento automático de nodos de Google Kubernetes Engine (GKE).

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 considera iniciar nuevos nodos solo a partir del conjunto de grupos de nodos creados por el usuario. Con el aprovisionamiento automático de nodos, se pueden crear y borrar grupos de nodos nuevos de forma automática.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece tu ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, establece tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Requisitos

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

  • v.1.11.2-gke.25 y posteriores para clústeres zonales
  • v.1.12.x y posteriores para clústeres regionales

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 automáticamente en función de las especificaciones de pods no programables.

El aprovisionamiento automático de nodos crea grupos de nodos en función de la siguiente 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 creados por NAP tienen un límite de 1,000 nodos.

Límites para los clústeres

Los límites que definas se aplicarán en función de los recursos totales de CPU y memoria utilizados 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 automáticamente.

Separación de la carga de trabajo

Si los pods pendientes tienen afinidades y tolerancias 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 condiciones siguientes:

  • 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 las dos maneras siguientes:

  • 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 marca dedicated=ui-team se consideran para la creación en el aprovisionamiento automático de nodos.

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

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

Borra grupos de nodos aprovisionados de modo automático

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

En la actualidad, el aprovisionamiento automático de nodos solo considerará la creación de grupos de nodos con máquinas que poseen hasta 64 CPU virtuales. Esta limitación quedará sin efecto en el futuro.

Limitaciones de escalabilidad

El aprovisionamiento automático de nodos tiene las mismas limitaciones que el escalador automático del clúster, así como las limitaciones adicionales que se describen en las secciones siguientes.

Límite sobre la cantidad de cargas de trabajo separadas
El aprovisionamiento automático de nodos admite un máximo de 100 cargas de trabajo separadas y distintas.
Límite sobre la cantidad de grupos de nodos
El aprovisionamiento automático de nodos reduce la prioridad de la creación de grupos de nodos nuevos cuando la cantidad de grupos 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 [MINIMUM_MEMORY] \
  --max-cpu [MAXIMUM_CPU] \
  --max-memory [MAXIMUM_MEMORY]

En el ejemplo anterior, se ilustra lo siguiente:

  • --enable-autoprovisioning indica que el aprovisionamiento automático de nodos está habilitado.
  • --min-cpu especifica la cantidad mínima de núcleos en el clúster.
  • --min-memory especifica la cantidad mínima de gigabytes de memoria en el clúster.
  • --max-cpu especifica la cantidad máxima de núcleos en el clúster.
  • --max-memory especifica la cantidad máxima de gigabytes de memoria en el clúster.

Por ejemplo, para habilitar el aprovisionamiento automático de nodos en un clúster y permitir el escalamiento entre el tamaño total del clúster de 1 CPU y 1 gigabyte de memoria hasta un máximo de 10 CPU y 64 gigabytes de memoria, ejecuta el siguiente comando:

gcloud container clusters update [CLUSTER_NAME] \
  --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. Visita el menú de Google Kubernetes Engine en Cloud Console.

Ir al menú Google Kubernetes Engine

  1. Selecciona el clúster deseado.
  2. Haz clic en el ícono edit.
  3. Desplázate hasta Aprovisionamiento automático de nodos y selecciona Habilitado.
  4. Configura el uso mínimo y máximo de CPU y memoria que deseas para el clúster.
  5. Haz clic en Guardar. GKE actualiza el clúster.

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

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

Puedes especificar la identidad predeterminada (ya sea una cuenta de servicio o uno o más alcances) utilizada por los nuevos grupos de nodos de aprovisionamiento automático. El cambio de los valores predeterminados de identidad no afecta a ningún grupo de nodos existente.

Para especificar la cuenta de servicio de Cloud 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

Por ejemplo, si deseas configurar 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 alcances predeterminados que usa el aprovisionamiento automático de nodos, ejecuta el siguiente comando de gcloud:

gcloud container clusters update \
[CLUSTER_NAME] --enable-autoprovisioning --autoprovisioning-scopes=SCOPE,[SCOPE,...]

Por ejemplo, para configurar el alcance predeterminado en el clúster dev-cluster como 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

Donde:

  • --enable-autoprovisioning habilita el aprovisionamiento automático de nodos.
  • --autoprovisioning-service-account especifica la cuenta de servicio de Google Cloud que usan los grupos de nodos aprovisionados automáticamente.
  • --autoprovisioning-scopes especifica los alcances de Google Cloud que utilizan los grupos de nodos aprovisionados automáticamente.

Configura los límites de GPU

Cuando uses el aprovisionamiento automático de nodos con GPU, establece el límite máximo para cada tipo de GPU en el clúster con la marca --max-accelerator o desde Google Cloud Console.

Encontrarás una lista de resourceTypes disponibles en el resultado del comando gcloud compute accelerator-types list.

Para configurar varios tipos de GPU, debes usar un archivo de configuración.

gcloud

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

En el ejemplo anterior, se ilustra lo siguiente:

  • --enable-autoprovisioning indica que el aprovisionamiento automático de nodos está habilitado.
  • --max-cpu especifica la cantidad máxima de núcleos en el clúster.
  • --max-memory especifica la cantidad máxima de gigabytes de memoria en el clúster.
  • --min-accelerator especifica la cantidad mínima de aceleradores de GPU nvidia-tesla-k80.
  • --max-accelerator especifica la cantidad máxima de aceleradores de GPU nvidia-tesla-k80.

Archivo

Puedes cargar límites desde un archivo de configuración. La siguiente configuración de YAML configura dos tipos diferentes de GPU:

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

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

  1. Copia la configuración anterior en un archivo 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. Usa gcloud para aplicar la configuración al clúster:

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

Donde:

  • --enable-autoprovisioning indica que el aprovisionamiento automático de nodos está habilitado.
  • --autoprovisioning-config-file especifica el archivo con límites de recursos.

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. Visita el menú de Google Kubernetes Engine en Cloud Console.

Ir al menú Google Kubernetes Engine

  1. Selecciona el clúster deseado.
  2. Haz clic en el ícono editEditar.
  3. Desplázate hasta Aprovisionamiento automático de nodos y selecciona Habilitado.
  4. Configura el uso mínimo y máximo de CPU y memoria que deseas para el clúster.
  5. Haz clic en addAgregar recurso.
  6. 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.
  7. Acepta las limitaciones de GPU en GKE.
  8. Haz clic en Guardar. GKE actualiza el clúster.

Ubicaciones de aprovisionamiento automático de nodos

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

gcloud

Para configurar las ubicaciones en las que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos, ejecuta el comando de gcloud siguiente:

gcloud container clusters update [CUSTER_NAME] \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE,[ZONE,...]

En el ejemplo anterior, se ilustra lo siguiente:

  • --enable-autoprovisioning indica que el aprovisionamiento automático de nodos está habilitado.
  • --autoprovisioning-locations especifica las ubicaciones en las que el aprovisionamiento automático de nodos puede crear grupos de nodos nuevos.

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

Para inhabilitar el aprovisionamiento automático de nodos, actualiza el clúster con la marca --no-enable-autoprovisioning:

gcloud container clusters update [CLUSTER_NAME] --no-enable-autoprovisioning

En el ejemplo anterior, se ilustra lo siguiente:

  • --no-enable-autoprovisioning indica que el aprovisionamiento automático de nodos está inhabilitado.

Console

Para inhabilitar el aprovisionamiento automático de nodos, usa Google Cloud Console.

  1. Visita el menú de Google Kubernetes Engine en Cloud Console.

Ir al menú Google Kubernetes Engine

  1. Selecciona el clúster deseado.
  2. Haz clic en el ícono editEditar.
  3. Desplázate hasta Aprovisionamiento automático de nodos y selecciona Inhabilitado.

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 automáticamente cuando no hay cargas de trabajo que lo usen.

gcloud

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

gcloud container node-pools update [NODE_POOL_NAME] --enable-autoprovisioning

En el ejemplo anterior, se ilustra lo siguiente:

  • --enable-autoprovisioning indica que el grupo de nodos está marcado como aprovisionado de forma automática.

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

Para quitar el aprovisionamiento automático de un grupo de nodos, usa la marca --no-enable-autoprovisioning.

gcloud

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

gcloud container node-pools update [NODE_POOL_NAME] --no-enable-autoprovisioning

En el ejemplo anterior, se ilustra lo siguiente:

  • --no-enable-autoprovisioning indica que el grupo de nodos está marcado como no aprovisionado de forma automática.

Próximos pasos