Como usar o provisionamento automático de nós

Nesta página, você aprende a 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 clusters usado para gerenciar automaticamente um conjunto de pools de nós em nome do usuário. Sem o provisionamento automático de nós, o autoescalador de clusters leva em consideração 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

Requisitos

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

  • v1.11.2-gke.25 e superior para clusters zonais
  • v1.12.x e superior para clusters regionais

Operação

O autoescalador de clusters 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 nestas informações:

Limites de recursos

O provisionamento automático de nós e o autoescalador de clusters têm limites em dois níveis:

  • Nível do pool de nós
  • Nível do cluster

Limites dos pools de nós

Os pools de nós criados pelo NAP estão limitados a 1.000 nós.

Limites dos clusters

Os limites que você define são aplicados com base na quantidade de CPU e memória usada em todo o cluster, e não apenas nos pools provisionados automaticamente.

O autoescalador de clusters não criará novos nós se essa ação exceder um dos limites definidos. 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ó, o provisionamento automático de nós poderá ser feito com rótulos e taints correspondentes.

No momento, o provisionamento automático de nós leva em consideração 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

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

Limitações de escalonabilidade

O provisionamento automático de nós tem as mesmas limitações do autoescalador de clusters e outras descritas nas seções a seguir.

Limite no número de cargas de trabalho separadas
O provisionamento automático de nós é compatível com no máximo 100 cargas de trabalho separadas e diferentes.
Limite no número de pools de nós
O provisionamento automático de nós deixa de priorizar a criação de novos pools quando a quantidade deles chega perto de 100. Criar mais de 100 pools de nós é possível, mas só quando isso é a única opção para programar um pod pendente.

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 definir padrões de identidade para pools de nós com provisionamento automático

É possível especificar o Cloud Identity and Access Management padrão usado pelos pools de nós provisionados automaticamente. Isso inclui contas de serviço e escopos a serem usados no provisionamento automático de nós. A alteração de padrões de identidade não afeta os pools de nós atuais.

Para especificar a conta de serviço padrão a ser usada pelo provisionamento automático de nós, execute o comando gcloud a seguir:

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

Exemplo de comando para especificar a conta de serviço padrão do provisionamento automático:

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

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

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

Exemplo de comando para especificar escopos padrão do provisionamento automático:

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

Nos comandos acima:

  • --enable-autoprovisioning indica que o provisionamento automático de nós está ativado;
  • --autoprovisioning-service-account especifica a conta de serviço do GCP usada por pools de nós provisionados automaticamente;
  • --autoprovisioning-scopes especifica os escopos do GCP usados pelos pools de nós provisionados automaticamente.

Como configurar limites da GPU

gcloud

Ao usar o provisionamento automático de nós com GPUs, é recomendado definir o limite para cada tipo de GPU no cluster. Basta usar a sinalização --max-accelerator.

Para configurar vários tipos de GPU, você precisa usar um arquivo de configuração em vez da sinalização. Há uma amostra de arquivo de configuração que segue este exemplo.

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.

Se preferir, é possível carregar limites de um arquivo de configuração. Com o arquivo de configuração a seguir, você define dois 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

Veja no comando a seguir como aplicar um arquivo de configuração salvo localmente:

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.

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. Todas as zonas precisam pertencer à mesma região que o cluster, mas elas não estão limitadas aos 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 atuais.

gcloud

Para definir locais em que o provisionamento automático de nós pode criar novos pools de nós, execute o comando gcloud a seguir:

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

Nesse comando:

  • --enable-autoprovisioning indica que o provisionamento automático de nós está ativado;
  • --autoprovisioning-locations especifica locais em que o provisionamento automático de nós pode criar novos pools de nós.

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, atualize o cluster com a sinalização --no-enable-autoprovisioning:

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.

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.

gcloud

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

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

Nesse comando:

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

Marcar o pool de nós como não provisionado automaticamente

Use a sinalização --no-enable-autoprovisioning para remover o provisionamento automático de um pool de nós.

gcloud

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

gcloud beta container node-pools 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