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

Separar pods gerenciados pelo GKE das cargas de trabalho

Como administrador de cluster, talvez você queira separar os pods gerenciados pelo GKE das suas cargas de trabalho. Essa separação ajuda a evitar problemas de redução de escala vertical quando há nós subutilizados no cluster com pods do sistema em execução.

O exemplo a seguir mostra como separar pods gerenciados das cargas de trabalho usando uma combinação de provisionamento automático de nós e taints e tolerâncias do Kubernetes.

  1. Crie um cluster com um pool de nós padrão de VMs e2-standard-2 e aplique um taint de nó que permita apenas que cargas de trabalho do sistema do GKE sejam executadas nesses nós:

    gcloud container clusters create test-cluster \
        --machine-type=e2-standard-2 \
        --node-taints=components.gke.io/gke-managed-components=true:NoSchedule
    
  2. Ative o provisionamento automático de nós para o cluster:

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

    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.

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

  4. Aplique o manifesto ao cluster:

    kubectl apply -f nginx.yaml
    

    O resultado será assim:

    pod/nginx created
    
  5. 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
    

O cluster separa as cargas de trabalho dos pods gerenciados do GKE.

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-t4 no cluster dev-cluster:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --max-cpu 10 \
    --max-memory 64 \
    --min-accelerator type=nvidia-tesla-t4,count=1 \
    --max-accelerator type=nvidia-tesla-t4,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-t4'
      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 de CPU e memória do cluster.

  6. Clique em Adicionar recurso.

  7. Selecione o tipo de GPU (por exemplo, NVIDIA T4) que você quer adicionar. Defina os números mínimo e máximo de GPUs a serem adicionadas 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