Como usar o provisionamento automático de nós

Nesta página, explicamos como usar o recurso de provisionamento automático de nós do Google Kubernetes Engine.

Visão geral

O provisionamento automático de nós é um mecanismo do autoescalador de cluster usado para gerenciar automaticamente uma lista de pools de nós em nome do usuário. Sem o provisionamento automático de nós, o autoescalador de cluster considera novos nós somente a partir do conjunto de pools escolhidos pelo usuário. Com esse recurso, é possível criar e excluir novos pools de nós automaticamente.

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize a gcloud para a versão mais recente:
    gcloud components update

Operação

O autoescalador de cluster funciona por pool de nós. Com o provisionamento automático de nós, o conjunto de pools de nós com escalonamento automático pode ser estendido automaticamente com base nas especificações de pods não programáveis.

O provisionamento automático de nós cria pools de nós com base nas seguintes informações:

Limites de recurso

O provisionamento automático de nós requer limites mais altos de CPU e memória. A definição de limites para GPUs e de limites menores nos recursos é opcional. Os limites são verificados com relação a todos os nós do cluster. Por padrão, os pools de nós com provisionamento automático são limitados a 1.000 nós.

O autoescalador de clusters não cria novos nós se essa ação exceder um dos limites definidos. No entanto, se os limites já tiverem sido excedidos, nenhum nó será excluído automaticamente.

Separação da carga de trabalho

Se houver pods pendentes com afinidades e tolerâncias de nós e você indicar a separação da carga de trabalho, o provisionamento automático de nós poderá provisionar nós com rótulos e taints correspondentes.

Atualmente, o provisionamento automático de nós considera a criação de pools de nós com rótulos e taints se todas as condições a seguir forem atendidas:

  • Um pod pendente exige um nó rotulado com chave e valor específicos.
  • O pod tem uma tolerância para um taint com a mesma chave.
  • A tolerância é para o efeito NoSchedule, o efeito NoExecute ou todos os efeitos.

A especificação do pod pode expressar que ele exige nós com rótulos específicos de duas maneiras:

  • Usando um campo nodeSelector.
  • Usando um campo nodeAffinity com um operador In e exatamente um valor.

O exemplo a seguir é um trecho de uma especificação de pod interpretada como uma solicitação de separação de carga de trabalho. O pod tem uma tolerância para nós rotulados com uma chave foo e um valor de bar. Este exemplo usa nodeAffinity para a seleção de nós:

spec:
  tolerations:
  - key: foo
    operator: Equal
    value: bar
    effect: NoSchedule
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: foo
            operator: In
            values:
            - bar

Se esse pod existir, os nós com taint key=value:NoSchedule e rótulos key=value são considerados para serem criados.

O exemplo abaixo usa nodeSelector e tem o mesmo efeito:

spec:
  tolerations:
  - key: foo
    operator: Equal
    value: bar
    effect: NoSchedule
  nodeSelector:
    foo: bar

Exclusão de pools de nós provisionados automaticamente

Quando não há nós em um pool de nós provisionado automaticamente, o GKE exclui o pool de nós. Os pools de nós que não estão marcados como provisionados automaticamente não são excluídos.

Tipos de máquinas compatíveis

Atualmente, o provisionamento automático de nós considera apenas a criação de pools de nós com máquinas de até 16 vCPUs. Essa limitação será removida no futuro.

Limitações de escalonabilidade

Atualmente, testamos o provisionamento automático do nó em clusters com até 100 nós. Não recomendamos o uso do recurso em clusters maiores. Além disso, aplicam-se os limites de escalonabilidade do autoescalador de cluster.

Limite do número de pools de nós provisionados automaticamente

Não pode haver mais de 15 pools de nós provisionados automaticamente em um cluster. Se esse limite for atingido, nenhum novo pool de nós provisionado automaticamente será criado.

Como ativar o provisionamento automático de nós

gcloud

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

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

Nesse comando:

  • --enable-autoprovisioning indica que o provisionamento automático de nós está ativado;
  • --max-cpu especifica o número máximo de núcleos no cluster;
  • --max-memory especifica o número máximo de gigabytes de memória no cluster.

Como configurar os limites da GPU

gcloud

Ao usar o provisionamento automático de nós com GPUs, é recomendável definir o limite para o número total de cada tipo de GPU no cluster. Para isso, execute o seguinte comando:

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

Nesse comando:

  • --enable-autoprovisioning indica que o provisionamento automático de nós está ativado;
  • --max-cpu especifica o número máximo de núcleos no cluster;
  • --max-memory especifica o número máximo de gigabytes de memória no cluster;
  • --max-accelerator especifica o número máximo de aceleradores de GPU nvidia-tesla-k80.

Como alternativa, é possível carregar limites de um arquivo de configuração:

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

Nesse comando: * --enable-autoprovisioning indica que o provisionamento automático de nós está ativado; * --autoprovisioning-config-file especifica o arquivo com limites de recursos. Exemplo de configuração:

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

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, execute o seguinte comando:

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

Nesse comando:

  • --no-enable-autoprovisioning indica que o provisionamento automático de nós está desativado.

Como marcar o pool de nós como provisionado automaticamente

É possível marcar qualquer pool de nós no cluster como provisionado automaticamente. Isso pode fazer com que o pool de nós seja excluído automaticamente quando não estiver mais em uso.

gcloud

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

gcloud beta container node-pool update [NODE_POOL_NAME] --enable-autoprovisioning

Nesse comando:

  • --enable-autoprovisioning indica que o pool de nós está marcado como provisionado automaticamente.

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

É possível marcar um pool de nós como não provisionado automaticamente.

gcloud

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

gcloud beta container node-pool update [NODE_POOL_NAME] --no-enable-autoprovisioning

Nesse comando:

  • --no-enable-autoprovisioning indica que o pool de nós está marcado como não provisionado automaticamente.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine