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.

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 del conjunto de grupos de nodos elegidos 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 aplican en función de la cantidad de CPU y memoria usada 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 esta acción hace que se exceda uno de los límites definidos. Si ya se excedieron los límites, no se borra ningún nodo automáticamente.

Separación de la carga de trabajo

Si hay pods pendientes con tolerancias y afinidades de nodo, el aprovisionamiento automático de nodos puede aprovisionar nodos con etiquetas y taints que coincidan.

En la actualidad, el aprovisionamiento automático de nodos considera la creación de grupos de nodos con etiquetas y taints si se cumplen todas las condiciones siguientes:

  • Un pod pendiente requiere un nodo etiquetado con una clave y 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

gcloud

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

gcloud container clusters update [CLUSTER_NAME] \
  --enable-autoprovisioning \
  --max-cpu 10 \
  --max-memory 64

En este comando, 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.

Configura valores predeterminados de identidad para grupos de nodos aprovisionados de forma automática

Puedes especificar Cloud Identity and Access Management predeterminado con el aprovisionamiento automático de grupos de nodos. Puedes especificar una cuenta de servicio o uno o más alcances para usar el aprovisionamiento automático de nodos. 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 de gcloud:

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

Por ejemplo, para configurar test-service-account@google.com como tu cuenta de servicio predeterminada de aprovisionamiento automático, haz lo siguiente:

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

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

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

Comando de ejemplo para especificar los alcances predeterminados de aprovisionamiento automático:

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

En los comandos anteriores, se ilustra lo siguiente:

  • --enable-autoprovisioning indica que el aprovisionamiento automático de nodos está habilitado.
  • --autoprovisioning-service-account especifica la cuenta de servicio de GCP que usan los grupos de nodos aprovisionados automáticamente.
  • --autoprovisioning-scopes especifica los alcances de GCP que usan los grupos de nodos aprovisionados de forma automática.

Configura los límites de GPU

gcloud

Cuando se usa el aprovisionamiento automático de nodos con GPU, se recomienda configurar el límite para cada tipo de GPU en el clúster mediante la marca --max-accelerator.

Para configurar varios tipos de GPU, debes usar un archivo de configuración en lugar de la marca. Un archivo de configuración de muestra sigue este ejemplo.

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

En este comando, 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.
  • --max-accelerator especifica la cantidad máxima de aceleradores de GPU nvidia-tesla-k80.

Puedes cargar límites desde un archivo de configuración. El archivo de configuración configura los 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

El comando siguiente muestra cómo aplicar un archivo de configuración guardado localmente:

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

En este comando, se ilustra lo siguiente:

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

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 este comando, 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 este comando, se ilustra lo siguiente:

  • --no-enable-autoprovisioning indica que el aprovisionamiento automático de nodos está 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 este comando, 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 este comando, 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