Usar o provisionamento automático de nós


Nesta página, explicamos como usar o provisionamento automático de nós em clusters padrão do Google Kubernetes Engine (GKE). Você já deve estar familiarizado com o conceito de provisionamento automático de nós.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos

O provisionamento automático de nós está disponível nas seguintes versões do GKE:

  • versão 1.11.2-gke.25 e superior para clusters zonais;
  • versão 1.12.x e superior para clusters regionais.
  • Versão 1.27.6 e posteriores ou 1.28 e posteriores para o Cloud TPU v4 e v5e
  • Versão 1.28.7-gke.1020000 ou posterior e 1.29.2-gke.1035000 ou posterior para o Cloud TPU v5p.

Ativar provisionamento automático de nós

É possível ativar o provisionamento automático de nós em um cluster com a gcloud CLI ou o console do Google Cloud.

O provisionamento automático de nós tem as seguintes limitações de recursos:

É preciso planejar com cuidado o intervalo de endereços IP do nó. É possível expandir o intervalo de endereços IP do nó depois de criar um cluster. No entanto, recomendamos não fazer isso porque é necessário atualizar as regras de firewall para incluir o novo intervalo como uma origem. É possível expandir o intervalo de endereços IP do pod usando o CIDR de vários pods distintos com o provisionamento automático de nós.

gcloud

Para ativar o provisionamento automático de nós, execute o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster para ativar o provisionamento automático de nós.
  • MINIMUM_CPU: o número mínimo de núcleos no cluster.
  • MINIMUM_MEMORY: o número mínimo de gigabytes de memória no cluster.
  • MAXIMUM_CPU: o número máximo de núcleos no cluster.
  • MAXIMUM_MEMORY: o número máximo de gigabytes de memória no cluster.

O exemplo a seguir ativa o provisionamento automático de nós no dev-cluster e permite o escalonamento entre um tamanho de cluster total de 1 CPU e 1 gigabyte de memória a um máximo de 10 CPUs e 64 gigabytes de memória:

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

Console

Para ativar o provisionamento automático de nós, execute as seguintes etapas:

  1. Acesse a página do Google Kubernetes Engine no Console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique no nome do cluster.

  3. Na seção Automação, para provisionamento automático de nós, clique em Editar.

  4. Marque a caixa de seleção Ativar provisionamento automático de nós.

  5. Defina o uso mínimo e máximo da CPU e da memória para o cluster.

  6. Clique em Save changes.

Como usar um arquivo de configuração de provisionamento automático

O provisionamento automático de nós pode ser configurado usando um arquivo de configuração YAML. Se for usado para alterar uma única configuração, o arquivo de configuração poderá conter apenas uma linha. Várias definições podem ser especificadas em um único arquivo de configuração. Nesse caso, todas elas serão alteradas quando o arquivo de configuração for aplicado.

Algumas configurações avançadas só podem ser especificadas com um arquivo de configuração.

Exemplo 1: a aplicação do arquivo de configuração a seguir permite o reparo e upgrade automáticos de nós para qualquer novo pool de nós criado pelo provisionamento automático:

management:
  autoRepair: true
  autoUpgrade: true

Exemplo 2: a aplicação do arquivo de configuração abaixo altera as seguintes configurações:

  • Define limites de recursos para CPU, memória e GPU. O provisionamento automático de nós não criará um nó se o tamanho total do cluster exceder os limites de recursos especificados.
  • Ativa o reparo e o upgrade automáticos de nós em qualquer novo pool de nós criado pelo provisionamento automático de nós.
  • Permite o Monitoramento de integridade e Inicialização segura em qualquer novo pool de nós criado pelo provisionamento automático de nós.
  • Define o tamanho do disco de inicialização como 100 GB para qualquer novo pool de nós criado pelo provisionamento automático de nós.
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-k80'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

Para usar um arquivo de configuração de provisionamento automático:

  1. Crie um arquivo com a configuração desejada em um local em que a CLI da gcloud possa acessá-lo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o nome do arquivo de configuração.

    Para mais informações, consulte a documentação gcloud container clusters update.

Padrões de provisionamento automático

O provisionamento automático de nós analisa os requisitos de pods no seu cluster para determinar o tipo de nó mais adequado para esses pods. No entanto, algumas configurações de pool de nós não são especificadas diretamente pelos pods, como configurações relacionadas a upgrades de nó. Defina valores padrão para essas configurações, que serão aplicadas a todos os pools de nós recém-criados.

Como definir o tipo de imagem de nó padrão

É possível especificar o tipo de imagem de nó a ser usado em todos os novos pools de nós provisionados automaticamente usando a CLI gcloud ou um arquivo de configuração. Essa configuração está disponível apenas para a versão 1.20.6-gke.1800 e do cluster do GKE.

gcloud

Para definir o tipo de imagem de nó padrão, execute o comando a seguir:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • IMAGE_TYPE: o tipo de imagem do nó, que pode ser um dos seguintes:

    • cos_containerd: Container-Optimized OS com o containerd
    • ubuntu_containerd Ubuntu com o containerd.

Arquivo

Para todos os novos pools de nós provisionados automaticamente, é possível especificar o tipo de imagem do nó a ser usado usando um arquivo de configuração. A seguinte configuração YAML especifica que, para novos pools de nós provisionados automaticamente, o tipo de imagem é cos_containerd e tem limites de recursos associados para CPU e memória. Para ativar o provisionamento automático, especifique os valores máximos para CPU e memória.

  1. Salve a configuração do YAML:

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
    imageType: 'cos_containerd'
    
  2. Aplique a configuração:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o nome do arquivo de configuração.

Como definir padrões de identidade para pools de nós com provisionamento automático

As permissões para recursos do Google Cloud são fornecidas por identidades.

É possível especificar uma identidade padrão (uma conta de serviço ou pelo menos um escopo) para novos pools de nós com provisionamento automático usando a CLI gcloud ou um arquivo de configuração.

gcloud

Para especificar a conta de serviço padrão do IAM usada pelo provisionamento automático de nós, execute o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • SERVICE_ACCOUNT: o nome da conta de serviço padrão.

O exemplo a seguir define test-service-account@google.com como a conta de serviço padrão no cluster dev-cluster:

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

Para especificar os escopos padrão usados pelo provisionamento automático de nós, execute o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • SCOPE: os escopos do Google Cloud usados pelos pools de nós com provisionamento automático. Para especificar vários escopos, separe-os por vírgula. por exemplo: SCOPE1, SCOPE2,....

O exemplo a seguir define o escopo padrão no cluster 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

arquivo

É possível especificar o padrão de identidade usado pelo provisionamento automático de nós usando um arquivo de configuração. A seguinte configuração YAML define a conta de serviço do IAM:

  serviceAccount: SERVICE_ACCOUNT

Substitua SERVICE_ACCOUNT pelo nome da conta de serviço padrão.

Como alternativa, é possível usar a configuração YAML a seguir para especificar os escopos padrão usados pelo provisionamento automático de nós:

  scopes: SCOPE

Substitua SCOPE pelo escopo do Google Cloud usado pelos pools de nós com provisionamento automático. Para especificar vários escopos, separe-os com vírgulas. Por exemplo: SCOPE1, SCOPE2,....

Para usar um arquivo de configuração de provisionamento automático:

  1. Crie um arquivo de configuração especificando os padrões de identidade em um local em que a CLI da gcloud possa acessá-lo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • FILE_NAME: o nome do arquivo de configuração.

Chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês)

É possível especificar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) usadas por novos pools de nós provisionados automaticamente.

É possível ativar a criptografia gerenciada pelo cliente para unidades de inicialização usando um arquivo de configuração. A seguinte configuração YAML define a chave de CMEK:

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

Substitua:

  • KEY_PROJECT_ID: o ID de projeto da chave;
  • LOCATION: a localização do keyring;
  • KEY_RING: o nome do keyring;
  • KEY_NAME: o nome da chave;

Para usar um arquivo de configuração de provisionamento automático:

  1. Crie um arquivo de configuração especificando uma chave CMEK em um local onde a CLI gcloud possa acessá-la.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o nome do arquivo de configuração.

Integridade de nós

O provisionamento automático de nós é compatível com a criação de pools de nós com o Monitoramento de integridade e Inicialização segura ativado.

É possível ativar o Monitoramento de integridade e Inicialização segura usando um arquivo de configuração. A seguinte configuração YAML ativa a Inicialização segura e desativa o Monitoramento de integridade:

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

Para usar um arquivo de configuração de provisionamento automático:

  1. Copie a configuração acima em um arquivo em um local em que a CLI gcloud possa acessá-lo. Edite os valores de enableSecureBoot e enableIntegrityMonitoring. Salve o arquivo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o nome do arquivo de configuração.

Reparo e upgrade automáticos de nós

O provisionamento automático de nós é compatível com a criação de pools de nós com o reparo e o upgrade automáticos de nós ativados.

gcloud

Para ativar o reparo e o upgrade automáticos em todos os novos pools de nós provisionados automaticamente, execute o seguinte comando:

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

Substitua CLUSTER_NAME pelo nome do cluster.

Para desativar o reparo e o upgrade automáticos em todos os novos pools de nós provisionados automaticamente, execute o seguinte comando:

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

Substitua CLUSTER_NAME pelo nome do cluster.

arquivo

É possível ativar ou desativar o reparo e o upgrade automáticos de nós usando um arquivo de configuração. A configuração YAML a seguir ativa o reparo automático e desativa o upgrade automático:

  management:
    autoRepair: true
    autoUpgrade: false

Para usar um arquivo de configuração de provisionamento automático:

  1. Copie a configuração acima em um arquivo em um local em que a CLI gcloud possa acessá-lo. Edite os valores de autoUpgrade e autoRepair. Salve o arquivo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • FILE_NAME: o nome do arquivo de configuração.

Usar upgrades de sobretensão para novos pools de nós provisionados automaticamente

É possível especificar configurações de upgrade súbito em todos os novos pools de nós provisionados automaticamente usando a CLI gcloud ou um arquivo de configuração. Por padrão, o GKE define a estratégia de upgrade de nós para upgrades súbitos.

gcloud

Para especificar as configurações de upgrade súbito para todos os novos pools de nós provisionados automaticamente, execute o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • MAX_SURGE: o número máximo de nós que podem ser adicionados ao pool de nós durante os upgrades.
  • MAX_UNAVAILABLE: o número máximo de nós no pool de nós que podem estar indisponíveis simultaneamente durante os upgrades.

Arquivo

É possível especificar configurações de upgrade súbito para todos os novos pools de nós provisionados automaticamente usando um arquivo de configuração como o seguinte:

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

Para usar um arquivo de configuração de provisionamento automático:

  1. Copie a configuração acima para um arquivo em um local onde gcloud possa acessá-lo. Edite os valores de maxSurgeUpgrade e maxUnavailableUpgrade. Salve o arquivo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • FILE_NAME: o nome do arquivo de configuração.

Para mais informações, consulte a documentação gcloud container clusters update.

Para voltar a usar upgrades de sobretensão para novos pools de nós provisionados automaticamente, execute o seguinte comando:

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

Substitua CLUSTER_NAME pelo nome do cluster.

Como opção, é possível incluir as sinalizações para configurações específicas, como nos comandos anteriores. O GKE reutilizará a configuração anterior da estratégia de upgrade se ela tiver sido definida.

Usar upgrades azul-verde para novos pools de nós provisionados automaticamente

É possível usar upgrades azul-verde para todos os novos pools de nós provisionados automaticamente usando a CLI gcloud. Com as atualizações azul-verde, você pode usar as configurações padrão ou ajustá-las para otimizar o ambiente. Para saber mais sobre as atualizações azul-verde, consulte Upgrades azul-verde.

Para atualizar a estratégia de upgrade de nós para qualquer pool de nós já existente provisionado automaticamente, consulte Ativar ou desativar o upgrade súbito de um pool de nós já existente e Como atualizar a estratégia de upgrade azul/verde de um pool de nós já existente.

As seguintes variáveis são usadas nos comandos listadas abaixo:

  • CLUSTER_NAME: o nome do cluster do pool de nós.
  • COMPUTE_ZONE: a zona do cluster.
  • NODE_POOL_NAME: o nome do pool de nós.
  • NUMBER_NODES: o número de nós no pool em cada uma das zonas do cluster.
  • BATCH_NODE_COUNT: o número de nós azuis a serem drenados em um lote durante a fase de drenagem do pool azul. O padrão é um. Se for definido como zero, a fase de drenagem do pool azul será ignorada.
  • BATCH_PERCENT: a porcentagem de nós azuis a serem drenados em um lote durante a fase de drenagem do pool azul. Precisa ser um valor entre [0.0, 1.0].
  • BATCH_SOAK_DURATION: a duração, em segundos, de espera após cada drenagem em lote. O padrão é zero.
  • NODE_POOL_SOAK_DURATION: a duração em segundos a ser esperada após a conclusão da drenagem de todos os lotes. O padrão é 3600 segundos.

As configurações padrão para os upgrades azul-verde são:

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

Atualizar um cluster para usar upgrades azul-verde para novos pools de nós provisionados automaticamente

Os comandos a seguir usam gcloud container clusters update para atualizar a estratégia de upgrade de nós para novos pools de nós com provisionamento automático.

Você também pode usar essas sinalizações quando:

Para atualizar um cluster para usar upgrades azul-verde com configurações padrão para novos pools de nós provisionados automaticamente, use este comando:

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

É possível atualizar um cluster para usar upgrades azul-verde com configurações específicas para novos pools de nós provisionados automaticamente. Esses comandos também podem ser usados sem a sinalização --enable-autoprovisioning-blue-green-upgrade para atualizar as configurações.

O comando a seguir usa BATCH_NODE_COUNT para definir um tamanho total de lote de contagem de nós:

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

Também é possível usar BATCH_PERCENT para definir um tamanho de lote com base em porcentagem, substituindo batch-node-count no último comando por batch-percent e usando um decimal entre 0 e 1 (por exemplo, 25% é 0.25 Para saber como os tamanhos de lote com base em porcentagem são definidos, consulte Atualizar um pool de nós com upgrade azul/verde usando tamanhos de lote com base em porcentagem.

Discos de inicialização personalizados

O provisionamento automático de nós é compatível com a criação de pools de nós com discos de inicialização personalizados.

É possível personalizar a configuração do disco de inicialização usando um arquivo de configuração. O GKE reserva uma parte do disco de inicialização de nós para as funções do kubelet. Para mais informações, consulte Armazenamento temporário baseado em disco de inicialização de nós.

A seguinte configuração YAML faz com que o provisionamento automático de nós crie pools de nós com discos SSD de 100 GB:

  diskSizeGb: 100
  diskType: pd-ssd

Especifique o seguinte:

  • diskSizeGb: o tamanho do disco, especificado em GB;
  • diskType: o tipo de disco, que pode ser um dos seguintes valores:
    • pd-balanced (padrão)
    • pd-standard
    • pd-ssd. No GKE 1.22 e em versões anteriores, quando você especifica pd-ssd, o provisionamento automático de nós considera apenas os tipos de máquina N1 ao criar pools de nós.

Para usar um arquivo de configuração de provisionamento automático:

  1. Crie um arquivo com a configuração de disco de inicialização desejada em um local em que a CLI gcloud possa acessá-lo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o nome do arquivo de configuração.

Como separar pods kube-system de cargas de trabalho

Como administrador de cluster, você pode querer separar os pods kube-system das suas cargas de trabalho. Essa configuração impede que o cluster tenha problemas de redução em nós subutilizados com pods kube-system em execução.

O exemplo a seguir mostra como separar pods kube-system de cargas de trabalho do cluster usando uma combinação de provisionamento automático de nós e tolerâncias de taint.

  1. Crie um cluster com um pool de nós padrão de VMs e2-standard-2:

    gcloud container clusters create test --machine-type=e2-standard-2
    
  2. Aplique um taint no pool de nós default-pool:

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

    O resultado será assim:

    node/gke-test-default-pool-66fd7aed-7xbd tainted
    node/gke-test-default-pool-66fd7aed-kg1x tainted
    node/gke-test-default-pool-66fd7aed-ljc7 tainted
    
  3. Ative o provisionamento automático de nós para o cluster:

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

    O cluster pode ser escalonado entre o tamanho total de 1 CPU e 1 gigabyte de memória para, no máximo, 10 CPUs e 64 gigabytes de memória.

  4. Para testar essa configuração, salve o seguinte manifesto de amostra como nginx.yaml:

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

    Esse manifesto implanta um pod de carga de trabalho de teste no cluster com um identificador nodeSelector e um taint de nó de dedicated: ui-team. Sem provisionamento automático de nós, este pod de carga de trabalho não pode ser programado porque nenhum pool de nós tem o identificador e os taints apropriados.

  5. Aplique o manifesto ao cluster:

    kubectl apply -f nginx.yaml
    

    O resultado será assim:

    pod/nginx created
    
  6. Confira o novo pool de nós que se encaixa no identificador ui-team:

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

    O resultado será assim:

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

Com o provisionamento automático de nós e as tolerâncias de taints, o cluster separa kube-system dos pods de cargas de trabalho.

Usar aceleradores para novos pools de nós provisionados automaticamente

É possível ativar o provisionamento automático de nós e configurar o GKE para provisionar automaticamente aceleradores de GPU ou do Cloud TPU, a fim de garantir a capacidade necessária para programar cargas de trabalho de IA/ML.

Como configurar limites de GPU

Ao usar o provisionamento automático de nós com GPUs, defina o limite máximo de cada tipo de GPU no cluster usando a CLI gcloud ou o Console do Google Cloud. A contagem do limite de GPUs é o número máximo de GPUs. Por exemplo, uma VM com 16 GPUs conta como 16, não 1 para esse limite. Para configurar vários tipos de GPU, use um arquivo de configuração.

Para listar os resourceTypes disponíveis, execute gcloud compute accelerator-types list.

gcloud

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • MAXIMUM_CPU: o número máximo de núcleos no cluster.
  • MAXIMUM_MEMORY: o número máximo de gigabytes de memória no cluster.
  • GPU_TYPE: o tipo de GPU.
  • MINIMUM_ACCELERATOR: o número mínimo de aceleradores de GPU no cluster.
  • MAXIMUM_ACCELERATOR: o número máximo de aceleradores de GPU no cluster.

O exemplo a seguir define os limites de GPU para o tipo de acelerador de GPU nvidia-tesla-k80 no cluster dev-cluster:

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

arquivo

É possível carregar limites para vários tipos de GPU usando um arquivo de configuração. A seguinte configuração YAML configura dois tipos diferentes de GPUs:

  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 um arquivo de configuração de provisionamento automático:

  1. Copie a configuração acima em um arquivo em um local em que a CLI gcloud possa acessá-lo. Edite os valores de cpu e memory. Adicione quantos valores forem necessários para resourceType. Salve o arquivo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • FILE_NAME: o nome do arquivo de configuração.

Para mais informações, consulte a documentação gcloud container clusters update.

Console

Para ativar o provisionamento automático de nós com recursos de GPU, execute as seguintes etapas:

  1. Acesse a página do Google Kubernetes Engine no Console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique no nome do cluster.

  3. Na seção Automação, para provisionamento automático de nós, clique em Editar.

  4. Marque a caixa de seleção Ativar provisionamento automático de nós.

  5. Defina o uso mínimo e máximo da CPU e da memória para o cluster.

  6. Clique em Adicionar recurso.

  7. Selecione o tipo de GPU que você quer adicionar, por exemplo, NVIDIA TESLA K80. Defina os números mínimo e máximo de GPUs para adicionar ao cluster.

  8. Aceite as limitações das GPUs no GKE.

  9. Clique em Salvar.

Escolha uma versão do driver para instalar

No GKE versão 1.29.2-gke.1108000 e mais recentes, selecione uma versão do driver da GPU para que o GKE instale automaticamente nos nós da GPU provisionados automaticamente. Adicione o seguinte campo ao seu manifesto:

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

Substitua DRIVER_VERSION por um dos seguintes valores:

  • default: o driver padrão e estável para a versão do GKE do seu nó. Se você omitir o nodeSeletor do manifesto, essa será a opção padrão.
  • latest: a versão mais recente do driver disponível para a versão do GKE do nó.

Como configurar Cloud TPUs

A partir do GKE 1.28, é possível usar o provisionamento automático de nós com Cloud TPUs. No entanto, a v5p não é compatível com o provisionamento automático de nós e escalonamento automático de cluster. Defina os limites da TPU no nível do cluster e crie os pools de nós da TPU. Para saber como funciona o provisionamento automático de nós com TPUs, consulte Aceleradores de machine learning compatíveis.

Crie um cluster e configure os pods para usar os recursos da TPU por meio da CLI gcloud. Para configurar vários tipos de TPU, use um arquivo de configuração.

gcloud

  1. Crie um cluster e defina os limites de TPU:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • MINIMUM_CPU: o número mínimo de vCPUs no cluster.
    • MAXIMUM_CPU: o número máximo de vCPUs no cluster.
    • MINIMUM_MEMORY: o número mínimo de gigabytes de memória no cluster.
    • MAXIMUM_MEMORY: o número máximo de gigabytes de memória no cluster.
    • TPU_TYPE: o tipo de TPU escolhido. Use tpu-v4-podslice para selecionar a TPU v4. Para selecionar a TPU v5e com um tipo de máquina que começa com ct5lp-, use tpu-v5-lite-podslice. Para selecionar o TPU v5e com um tipo de máquina que começa com ct5l-, use tpu-v5-lite-device.
    • MINIMUM_ACCELERATOR: o número mínimo de ícones de TPU no cluster.
      • Observe que o uso de MINIMUM_ACCELERATOR pode bloquear a redução da escala vertical de frações de TPU de vários hosts mesmo quando count é menor que o número de ícones de TPU na fração.
    • MAXIMUM_ACCELERATOR: o número máximo de ícones de TPU no cluster.
      • Se a configuração do pod solicitar uma fração de TPU de vários hosts, o GKE a criará atomicamente. Defina o valor de contagem alto o suficiente para permitir o provisionamento de todos os ícones de TPU da topologia especificada. O número de ícones em cada fração da TPU é igual ao produto da topologia. Por exemplo, se a topologia da fração de TPU de vários hosts for 2x2x2, o número de ícones de TPU será igual a 8. Portanto, MAXIMUM_ACCELERATOR precisará ser maior que 8.

    O exemplo a seguir define os limites de TPU para os tipos de máquina ct5lp-hightpu-1t, ct5lp-hightpu-4t e ct5lp-hightpu-8t no cluster dev-cluster. Por exemplo, até dez máquinas ct5lp-hightpu-4t podem ser provisionadas, cada uma com quatro ícones de TPU, 112 vCPU e 192 GiB de memória.

    gcloud container clusters create dev-cluster-inference \
          --enable-autoprovisioning \
          --min-cpu 0 \
          --max-cpu 1120 \
          --min-memory 0 \
          --max-memory 1920 \
          --min-accelerator=type=tpu-v5-lite-podslice,count=0 \
          --max-accelerator=type=tpu-v5-lite-podslice,count=40
    
  2. Crie uma especificação de implantação que faça com que um pod solicite recursos de TPU. Por exemplo, o seguinte manifesto fará com que o GKE provisione quatro nós ct5lp-hightpu-4t:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
            cloud.google.com/gke-tpu-topology:  2x2
            cloud.google.com/reservation-name: my-reservation
          containers:
          - name: nginx
            image: nginx:1.14.2
            resources:
              requests:
                google.com/tpu: 4
              limits:
                google.com/tpu: 4
            ports:
            - containerPort: 80
    

    No campo nodeSelector, defina o tipo de TPU, a topologia da TPU e a contagem de aceleradores, em que:

    • cloud.google.com/gke-tpu-accelerator: define o tipo de TPU. Por exemplo, tpu-v4-podslice.
    • cloud.google.com/gke-tpu-topology: define a topologia da TPU, por exemplo, 2x2x1 ou 4x4x8.

    Para consumir uma reserva atual com sua carga de trabalho, especifique outro rótulo no campo nodeSelector: * cloud.google.com/reservation-name: define o nome da reserva que o GKE usa para provisionar automaticamente os nós.

    Em limits: google.com/tpu, defina o número de ícones por nó.

Arquivo

É possível atribuir limites para vários tipos de TPUs usando um arquivo de configuração. A seguinte configuração YAML define dois tipos diferentes de TPUs:

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

Para usar um arquivo de configuração de provisionamento automático:

  1. Copie a configuração acima em um arquivo em um local em que a CLI gcloud possa acessá-lo. Edite os valores de resourceType e maximum. Adicione quantos valores forem necessários para resourceType. Salve o arquivo.

  2. Aplique a configuração ao cluster executando o seguinte comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • FILE_NAME: o nome do arquivo de configuração.

Para mais informações, consulte a documentação gcloud container clusters update.

Locais do provisionamento automático de nós

Defina as zonas em que o provisionamento automático de nós pode criar novos pools de nós. Os locais regionais não são compatíveis. Zonas precisam pertencer à mesma região que o cluster, mas não estão limitadas a locais de nós definidos no nível do cluster. Alterar os locais de provisionamento automático de nós não afeta os pools de nós existentes.

Para definir locais em que o provisionamento automático de nós possa criar novos pools de nós, use a CLI gcloud ou um arquivo de configuração.

gcloud

Execute este comando:

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

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • ZONE: a zona em que o provisionamento automático de nós pode criar novos pools de nós. Para especificar várias zonas, separe-as por vírgula. Por exemplo: ZONE1, ZONE2,....

Arquivo

Para definir locais em que o provisionamento automático de nós pode criar novos pools de nós, use um arquivo de configuração.

Adicione a seguinte configuração YAML que define o local do novo pool de nós:

    autoprovisioningLocations:
      - ZONE

Substitua ZONE pela zona em que o provisionamento automático de nós pode criar novos pools de nós. Para especificar várias zonas, adicione mais zonas à lista. Salve o arquivo.

Para usar um arquivo de configuração de provisionamento automático:

  1. Crie um arquivo de configuração em um local em que gcloud CLI possa acessá-lo.

  2. Aplique a configuração ao seu cluster:

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

    Substitua:

    • CLUSTER_NAME: o nome do cluster.
    • FILE_NAME: o caminho do arquivo de configuração.

Nós fisicamente próximos com posicionamento compacto

A partir da versão 1.25 do GKE, o provisionamento automático de nós é compatível com a política de posicionamento compacto. Com a política de posicionamento compacto, é possível instruir o GKE para criar pools de nós mais próximos dentro de uma zona.

Para definir uma política de posicionamento compacto, adicione um nodeSelector à especificação do pod com as seguintes chaves:

  • cloud.google.com/gke-placement-group é o identificador atribuído ao grupo de pods que precisam ser executados juntos, no mesmo grupo de posicionamento compacto.

  • cloud.google.com/machine-family é o nome da família de máquinas. Para mais informações, consulte as famílias de máquinas compatíveis com a posição compacta.

O exemplo a seguir define uma política de posicionamento compacto com um identificador de grupo de posições de placement-group-1 e uma família de máquinas de c2:

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

Para mais informações, consulte como definir a posição compacta para os nós do GKE.

Como desativar o provisionamento automático de nós

Quando você desativa o provisionamento automático de nós para um cluster, os pools de nós não são mais provisionados automaticamente.

gcloud

Para desativar o provisionamento automático de nós para um cluster, execute o seguinte comando:

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

Substitua CLUSTER_NAME pelo nome do cluster.

Arquivo

Para desativar o provisionamento automático de nós usando o Console do Google Cloud:

  1. Acesse a página do Google Kubernetes Engine no Console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique no nome do cluster.

  3. Na seção Automação, para provisionamento automático de nós, clique em Editar.

  4. Desmarque a caixa de seleção Ativar provisionamento automático de nós.

  5. Clique em Save changes.

Marcar o pool de nós como provisionado automaticamente

Depois de ativar o provisionamento automático de nós no cluster, especifique quais pools de nós serão provisionados automaticamente. Um pool de nós desse tipo é excluído automaticamente quando não é usado por nenhuma carga de trabalho.

Para marcar um pool de nós como automaticamente provisionado, execute o seguinte comando:

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

Substitua NODE_POOL_NAME pelo nome do pool de nós.

Como marcar o pool de nós como não provisionado automaticamente

Para marcar um pool de nós como não provisionado automaticamente, execute o seguinte comando:

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

Substitua NODE_POOL_NAME pelo nome do pool de nós.

Como usar uma família de máquinas personalizada

A partir do GKE 1.19.7-gke.800, é possível escolher uma família de máquinas para as suas cargas de trabalho. A família de máquinas T2D é compatível com a versão 1.22 e mais recentes do GKE.

Para escolher uma família de máquinas para as suas cargas de trabalho, execute uma das seguintes tarefas:

  • Defina a afinidade do nó com a chave de cloud.google.com/machine-family, o operador In e o valor como a família de máquinas desejada (por exemplo, n2).
  • Adicione um nodeSelector com a chave de cloud.google.com/machine-family e o valor como a família de máquinas desejada.

Confira um exemplo que define o nodeAffinity para uma família de máquinas de n2:

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

Após aplicar as alterações, o provisionamento automático de nós escolhe o melhor pool de nós com um tipo de máquina dentro da família de máquinas especificada. Se vários valores forem usados para a expressão correspondente, um valor será escolhido arbitrariamente.

Plataforma mínima de CPU

O provisionamento automático de nós oferece suporte à criação de pools de nós com uma plataforma de CPU mínima especificada. É possível especificar a plataforma de CPU mínima no nível da carga de trabalho (recomendado) ou no nível do cluster.

A seguir