Adicione e faça a gestão de node pools


Esta página mostra como adicionar, gerir, dimensionar, atualizar e eliminar node pools que são executados nos seus clusters padrão do Google Kubernetes Engine (GKE). Também fica a saber como implementar pods em pools de nós específicos e sobre as implicações das atualizações de pools de nós em cargas de trabalho em execução.

As informações nesta página ajudam a otimizar os clusters do GKE Standard para desempenho e escalabilidade.

Esta página destina-se a operadores, arquitetos da nuvem e programadores que precisam de criar e configurar clusters, e implementar cargas de trabalho no GKE. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.

Antes de ler esta página, certifique-se de que conhece os conjuntos de nós.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Configure contas de serviço IAM para o GKE

O GKE usa contas de serviço da IAM anexadas aos seus nós para executar tarefas do sistema, como registo e monitorização. No mínimo, estas contas de serviço de nós têm de ter a função Conta de serviço de nós predefinida do Kubernetes Engine (roles/container.defaultNodeServiceAccount) no seu projeto. Por predefinição, o GKE usa a conta de serviço predefinida do Compute Engine, que é criada automaticamente no seu projeto, como a conta de serviço do nó.

Para conceder a função roles/container.defaultNodeServiceAccount à conta de serviço predefinida do Compute Engine, conclua os passos seguintes:

consola

  1. Aceda à página Boas-vindas:

    Aceder a Boas-vindas

  2. No campo Número do projeto, clique em Copiar para a área de transferência.
  3. Aceda à página IAM:

    Aceda ao IAM

  4. Clique em Conceder acesso.
  5. No campo Novos responsáveis, especifique o seguinte valor:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Substitua PROJECT_NUMBER pelo número do projeto que copiou.
  6. No menu Selecionar uma função, selecione a função Conta de serviço do nó predefinido do Kubernetes Engine.
  7. Clique em Guardar.

gcloud

  1. Encontre o seu Google Cloud número do projeto:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    Substitua PROJECT_ID pelo ID do seu projeto.

    O resultado é semelhante ao seguinte:

    12345678901
    
  2. Conceda a função roles/container.defaultNodeServiceAccount à conta de serviço predefinida do Compute Engine:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    Substitua PROJECT_NUMBER pelo número do projeto do passo anterior.

Adicione um conjunto de nós a um cluster padrão

Pode adicionar um novo conjunto de nós a um cluster padrão do GKE através da CLI gcloud, da Google Cloud consola ou do Terraform. O GKE também suporta o aprovisionamento automático de nós, que gere automaticamente os conjuntos de nós no seu cluster com base nos requisitos de escalabilidade.

Prática recomendada:

Crie e use uma conta de serviço de gestão de identidade e de acesso (IAM) com privilégios mínimos para os seus conjuntos de nós em vez da conta de serviço predefinida do Compute Engine. Para obter instruções sobre como criar uma conta de serviço com privilégios mínimos, consulte o artigo Reforçar a segurança do cluster.

gcloud

Para criar um node pool, execute o comando gcloud container node-pools create:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --service-account SERVICE_ACCOUNT

Substitua o seguinte:

  • POOL_NAME: o nome do novo node pool.
  • CLUSTER_NAME: o nome do cluster existente.
  • SERVICE_ACCOUNT: o nome da conta de serviço do IAM que os seus nós vão usar.

    Recomendamos vivamente que especifique uma conta de serviço do IAM com privilégios mínimos que os seus nós possam usar em vez da conta de serviço predefinida do Compute Engine. Para saber como criar uma conta de serviço com privilégios mínimos, consulte o artigo Use uma conta de serviço com privilégios mínimos.

    Para especificar uma conta de serviço personalizada na CLI gcloud, adicione a seguinte flag ao seu comando:

    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Substitua SERVICE_ACCOUNT_NAME pelo nome da sua conta de serviço com privilégios mínimos.

Para ver uma lista completa das flags opcionais que pode especificar, consulte a gcloud container node-pools create documentação.

O resultado é semelhante ao seguinte:

Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302

Neste resultado, vê detalhes sobre o conjunto de nós, como o tipo de máquina e a versão do GKE em execução nos nós.

Ocasionalmente, o conjunto de nós é criado com êxito, mas o comando gcloud excede o limite de tempo em vez de comunicar o estado do servidor. Para verificar o estado de todos os conjuntos de nós, incluindo os que ainda não foram totalmente aprovisionados, use o seguinte comando:

gcloud container node-pools list --cluster CLUSTER_NAME

Consola

Para adicionar um conjunto de nós a um cluster padrão existente, siga os passos abaixo:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster padrão que quer modificar.

  3. Clique em Adicionar conjunto de nós.

  4. Configure o node pool.

  5. No menu de navegação, clique em Segurança.

  6. Opcionalmente, especifique uma conta de serviço do IAM personalizada para os seus nós:
    1. Na página Definições avançadas, expanda a secção Segurança.
    2. No menu Conta de serviço, selecione a sua conta de serviço preferida.

    Recomendamos vivamente que especifique uma conta de serviço do IAM com privilégios mínimos que os seus nós possam usar em vez da conta de serviço predefinida do Compute Engine. Para saber como criar uma conta de serviço com privilégios mínimos, consulte o artigo Use uma conta de serviço com privilégios mínimos.

  7. Clique em Criar para adicionar o conjunto de nós.

Terraform

Use um dos seguintes exemplos:

  • Adicione um conjunto de nós que use a conta de serviço do IAM predefinida do Compute Engine:
resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    service_account = google_service_account.default.email
  }
}
  • Adicione um conjunto de nós que use uma conta de serviço do IAM personalizada:
  1. Crie uma conta de serviço de IAM e conceda-lhe a função roles/container.defaultNodeServiceAccount no projeto:

    resource "google_service_account" "default" {
      account_id   = "service-account-id"
      display_name = "Service Account"
    }
    
    data "google_project" "project" {
    }
    
    resource "google_project_iam_member" "default" {
      project = data.google_project.project.project_id
      role    = "roles/container.defaultNodeServiceAccount"
      member  = "serviceAccount:${google_service_account.default.email}"
    }
  2. Crie um node pool que use a nova conta de serviço:

    resource "google_container_node_pool" "default" {
      name    = "gke-standard-regional-node-pool"
      cluster = google_container_cluster.default.name
    
      node_config {
        service_account = google_service_account.default.email
      }
    }

Para saber mais sobre a utilização do Terraform, consulte o artigo Compatibilidade do Terraform com o GKE.

Veja node pools num cluster padrão

gcloud

Para apresentar uma lista de todos os conjuntos de nós de um cluster padrão, execute o comando gcloud container node-pools list:

gcloud container node-pools list --cluster CLUSTER_NAME

Para ver detalhes sobre um pool de nós específico, execute o comando gcloud container node-pools describe:

gcloud container node-pools describe POOL_NAME \
    --cluster CLUSTER_NAME

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • POOL_NAME: o nome do node pool a ver.

Consola

Para ver os conjuntos de nós de um cluster padrão, siga os seguintes passos:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster padrão.

  3. Clique no separador Nós.

  4. Em Conjuntos de nós, clique no nome do conjunto de nós que quer ver.

Dimensione um node pool

Pode aumentar ou diminuir a escala dos conjuntos de nós para otimizar o desempenho e o custo. Com os conjuntos de nós padrão do GKE, pode dimensionar um conjunto de nós horizontalmente alterando o número de nós no conjunto de nós ou dimensionar um conjunto de nós verticalmente alterando a configuração dos atributos da máquina dos nós.

Aumente a escala horizontalmente alterando a quantidade de nós

gcloud

Para redimensionar os node pools de um cluster, execute o comando gcloud container clusters resize:

gcloud container clusters resize CLUSTER_NAME \
    --node-pool POOL_NAME \
    --num-nodes NUM_NODES

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster a redimensionar.
  • POOL_NAME: o nome do node pool a redimensionar.
  • NUM_NODES: o número de nós no conjunto num cluster zonal. Se usar clusters multizonais ou regionais, NUM_NODES é o número de nós para cada zona em que o conjunto de nós se encontra.

Repita este comando para cada conjunto de nós. Se o cluster tiver apenas um conjunto de nós, omita a flag --node-pool.

Consola

Para redimensionar os conjuntos de nós de um cluster, siga estes passos:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster padrão que quer modificar.

  3. Clique no separador Nós.

  4. Na secção Node Pools, clique no nome do conjunto de nós que quer redimensionar.

  5. Clique em Redimensionar.

  6. No campo Número de nós, introduza quantos nós quer no conjunto de nós e, de seguida, clique em Redimensionar.

  7. Repita o procedimento para cada conjunto de nós, conforme necessário.

Aumente a escala verticalmente alterando os atributos da máquina do nó

Pode modificar o tipo de máquina, o tipo de disco e o tamanho do disco configurados do conjunto de nós.

Quando edita um ou mais destes atributos da máquina, o GKE atualiza os nós para a nova configuração através da estratégia de atualização configurada para o conjunto de nós. Se configurar a estratégia de atualização azul-verde, pode migrar as cargas de trabalho dos nós originais para os novos nós, ao mesmo tempo que consegue reverter os nós originais se a migração falhar. Inspeccione as definições de atualização do conjunto de nós para garantir que a estratégia configurada é a forma como quer que os nós sejam atualizados.

Atualize, pelo menos, um dos atributos da máquina realçados no seguinte comando:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --machine-type MACHINE_TYPE \
    --disk-type DISK_TYPE \
    --disk-size DISK_SIZE

Omita quaisquer flags para atributos de máquinas que não quer alterar. No entanto, tem de usar, pelo menos, uma flag de atributo da máquina, caso contrário, o comando falha.

Substitua o seguinte:

  • POOL_NAME: o nome do node pool a redimensionar.
  • CLUSTER_NAME: o nome do cluster a redimensionar.
  • MACHINE_TYPE: o tipo de máquina a usar para os nós. Para saber mais, consulte o artigo gcloud container node-pools update.
  • DISK_TYPE: o tipo do disco de arranque da VM do nó tem de ser um dos seguintes: pd-standard, pd-ssd ou pd-balanced.
  • DISK_SIZE: o tamanho dos discos de arranque da VM do nó em GB. A predefinição é 100 GB.

Esta alteração requer a recriação dos nós, o que pode causar interrupções nas cargas de trabalho em execução. Para ver detalhes sobre esta alteração específica, procure a linha correspondente na tabela alterações manuais que recriam os nós através de uma estratégia de atualização de nós sem respeitar as políticas de manutenção. Para saber mais sobre as atualizações de nós, consulte o artigo Planeamento de interrupções de atualizações de nós.

Atualize um node pool

Por predefinição, os nós de um cluster têm a atualização automática ativada. As atualizações automáticas dos nós garantem que a versão do painel de controlo e dos nós do cluster permanecem sincronizadas e em conformidade com a política de variação da versão do Kubernetes, o que garante que os painéis de controlo são compatíveis com nós até duas versões secundárias mais antigas do que o painel de controlo. Por exemplo, os planos de controlo do Kubernetes 1.29 são compatíveis com os nós do Kubernetes 1.27.

Prática recomendada:

Evite desativar as atualizações automáticas de nós para que o cluster beneficie das atualizações indicadas no parágrafo anterior.

Com as atualizações de pool de nós do GKE, pode escolher entre duas estratégias de atualização configuráveis, nomeadamente atualizações de picos e atualizações azul-verde.

Escolha uma estratégia e use os parâmetros para ajustar a estratégia de forma a adequar-se melhor às necessidades do seu ambiente de cluster.

Como funcionam as atualizações de nós

Enquanto um nó está a ser atualizado, o GKE deixa de agendar novos pods no mesmo e tenta agendar os respetivos pods em execução noutros nós. Isto é semelhante a outros eventos que recriam o nó, como ativar ou desativar uma funcionalidade no conjunto de nós.

Durante as atualizações automáticas ou manuais de nós, os orçamentos de interrupção de pods (PDBs) e o período de tolerância de encerramento de pods são respeitados durante um máximo de 1 hora. Se não for possível agendar Pods em execução no nó para novos nós após uma hora, o GKE inicia a atualização na mesma. Este comportamento aplica-se mesmo que configure os PDBs para terem sempre todas as réplicas disponíveis definindo o campo maxUnavailable como 0 ou 0%, ou definindo o campo minAvailable como 100% ou o número de réplicas. Em todos estes cenários, o GKE elimina os pods após uma hora para que a eliminação do nó possa ocorrer.

Prática recomendada:

Se uma carga de trabalho exigir mais flexibilidade com a terminação gradual, use atualizações azul-verde, que fornecem definições para um tempo de teste de esforço adicional para prolongar as verificações de PDB para além da predefinição de uma hora.

Para saber mais sobre o que esperar durante a terminação de nós em geral, consulte o tópico sobre Pods.

A atualização só fica concluída quando todos os nós forem recriados e o cluster estiver no estado pretendido. Quando um nó recém-atualizado se regista no plano de controlo, o GKE marca o nó como agendável.

As novas instâncias de nós executam a versão do Kubernetes pretendida, bem como:

Para que uma atualização do node pool seja considerada concluída, todos os nós no node pool têm de ser recriados. Se uma atualização tiver sido iniciada, mas não tiver sido concluída e estiver num estado parcialmente atualizado, a versão do conjunto de nós pode não refletir a versão de todos os nós. Para saber mais, consulte o artigo Algumas versões de nós não correspondem à versão do conjunto de nós após uma atualização incompleta do conjunto de nós. Para determinar que a atualização do conjunto de nós foi concluída, verifique o estado da atualização do conjunto de nós. Se a operação de atualização estiver fora do período de retenção, verifique se a versão de cada nó individual corresponde à versão do conjunto de nós.

Atualize manualmente um node pool

Pode atualizar manualmente a versão de um conjunto de nós para corresponder à versão do plano de controlo ou a uma versão anterior que ainda esteja disponível e seja compatível com o plano de controlo. Pode atualizar manualmente vários conjuntos de nós em paralelo, enquanto o GKE atualiza automaticamente apenas um conjunto de nós de cada vez.

Quando atualiza manualmente um conjunto de nós, o GKE remove todas as etiquetas que adicionou a nós individuais através de kubectl. Para evitar esta situação, aplique etiquetas aos conjuntos de nós.

Antes de atualizar manualmente o conjunto de nós, considere as seguintes condições:

  • A atualização de um node pool pode interromper as cargas de trabalho em execução nesse node pool. Para evitar esta situação, pode criar um novo conjunto de nós com a versão pretendida e migrar a carga de trabalho. Após a migração, pode eliminar o conjunto de nós antigo.
  • Se atualizar um conjunto de nós com um Ingress num estado de erro, o grupo de instâncias não é sincronizado. Para contornar este problema, verifique primeiro o estado através do comando kubectl get ing. Se o grupo de instâncias não estiver sincronizado, pode contornar o problema reaplicando o manifesto usado para criar a entrada.

Pode atualizar manualmente os seus conjuntos de nós para uma versão compatível com o plano de controlo através da Google Cloud consola ou da CLI Google Cloud.

gcloud

As seguintes variáveis são usadas nos comandos desta secção:

  • CLUSTER_NAME: o nome do cluster do node pool a ser atualizado.
  • NODE_POOL_NAME: o nome do node pool a ser atualizado.
  • CONTROL_PLANE_LOCATION: a localização (região ou zona) do plano de controlo, como us-central1 ou us-central1-a.
  • VERSION: a versão do Kubernetes para a qual os nós são atualizados. Por exemplo, --cluster-version=1.7.2 ou cluster-version=latest.

Atualize um node pool:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION

Para especificar uma versão diferente do GKE nos nós, use a flag --cluster-version opcional:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION

Para mais informações sobre a especificação de versões, consulte o artigo Criação de versões.

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

Consola

Para atualizar um conjunto de nós através da Google Cloud consola, siga os passos seguintes:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Clique no nome do cluster.

  3. Na página Detalhes do cluster, clique no separador Nós.

  4. Na secção Conjuntos de nós, clique no nome do conjunto de nós que quer atualizar.

  5. Clique em Editar.

  6. Clique em Alterar em Versão do nó.

  7. Selecione a versão pretendida na lista pendente Versão do nó e, de seguida, clique em Alterar.

A alteração da versão do nó pode demorar vários minutos.

Implemente um pod num node pool específico

Pode implementar explicitamente um pod num conjunto de nós específico usando um nodeSelector no manifesto do pod. nodeSelector agenda Pods em nós com uma etiqueta correspondente.

Todos os pools de nós do GKE têm etiquetas com o seguinte formato: cloud.google.com/gke-nodepool: POOL_NAME. Adicione esta etiqueta ao campo nodeSelector no seu Pod, conforme mostrado no exemplo seguinte:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    cloud.google.com/gke-nodepool: POOL_NAME

Para mais informações, consulte o artigo Atribuir pods a nós.

Em alternativa ao seletor de nós, pode usar a afinidade de nós. Use a afinidade de nós se quiser uma regra "flexível" em que o pod tenta cumprir a restrição, mas continua a ser agendado mesmo que a restrição não possa ser satisfeita. Para mais informações, consulte o artigo Afinidade de nós. Também pode especificar pedidos de recursos para os contentores.

Mude para uma versão anterior de um node pool

Pode alterar para uma versão anterior de um node pool, por exemplo, para mitigar uma atualização do node pool sem êxito. Reveja as limitações antes de fazer a mudança para uma versão anterior de um conjunto de nós.

Prática recomendada:

Use a estratégia de atualização de nós azul-verde se precisar de otimizar a mitigação de riscos para atualizações de conjuntos de nós que afetam as suas cargas de trabalho. Com esta estratégia, pode reverter uma atualização em curso para os nós originais se a atualização não for bem-sucedida.

  1. Defina uma exclusão de manutenção para o cluster para impedir que o pool de nós seja atualizado automaticamente pelo GKE após a reversão.
  2. Para reverter um node pool, especifique uma versão anterior seguindo as instruções para atualizar manualmente um node pool.

Elimine um node pool

A eliminação de um node pool elimina os nós e todas as cargas de trabalho em execução, não respeitando as definições de PodDisruptionBudget. Para saber mais sobre como isto afeta as suas cargas de trabalho, incluindo as interações com os seletores de nós, consulte o artigo Eliminar conjuntos de nós.

gcloud

Para eliminar um node pool, execute o comando gcloud container node-pools delete:

gcloud container node-pools delete POOL_NAME \
    --cluster CLUSTER_NAME

Consola

Para eliminar um conjunto de nós, siga estes passos:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster padrão que quer modificar.

  3. Clique no separador Nós.

  4. Na secção Conjuntos de nós, clique em junto ao conjunto de nós que quer eliminar.

  5. Quando lhe for pedido que confirme, clique em Eliminar.

Migre nós para um tipo de máquina diferente

Para saber mais sobre diferentes abordagens para mover cargas de trabalho entre tipos de máquinas, por exemplo, para migrar para um tipo de máquina mais recente, consulte o artigo Migre nós para um tipo de máquina diferente.

Migre cargas de trabalho entre node pools

Para migrar cargas de trabalho de um node pool para outro, consulte o artigo Migrar cargas de trabalho entre node pools. Por exemplo, pode usar estas instruções se estiver a substituir um conjunto de nós existente por um novo conjunto de nós e quiser garantir que as cargas de trabalho são movidas para os novos nós a partir dos nós existentes.

Resolver problemas

Para informações de resolução de problemas, consulte os artigos Resolva problemas de pools de nós padrão e Resolva problemas de registo de nós.

O que se segue?