Gerenciar pools de nós em um cluster

Um pool de nós é um grupo de nós em um cluster que têm a mesma configuração. Todos os nós do cluster precisam pertencer a um pool de nós. Há três tipos de pools de nós em um cluster do GKE em Bare Metal: plano de controle, balanceador de carga e pools de nós de trabalho.

Nesta página, descrevemos como verificar o status dos pools de nós de trabalho e como adicionar, atualizar e remover os pools.

Escolha uma ferramenta para gerenciar pools de nós

A maneira como você gerencia pools de nós depende do tipo de cluster e dos clusters de usuário, se o cluster é gerenciado pela API GKE On-Prem. Um cluster de usuário será gerenciado pela API GKE On-Prem se uma das seguintes condições for verdadeira:

  • O cluster foi criado no console do Google Cloud ou usando a Google Cloud CLI (CLI gcloud), que configura automaticamente a API GKE On-Prem para gerenciar o cluster.

  • O cluster foi criado usando bmctl, mas foi configurado para ser gerenciado pela API GKE On-Prem.

Se a API GKE On-Prem estiver gerenciando um cluster de usuário, use o console ou a CLI gcloud para gerenciar os pools de nós. Se o cluster de usuário não for gerenciado pela API GKE On-Prem, use kubectl na estação de trabalho de administrador para gerenciar pools de nós. Também é possível usar kubectl para gerenciar pools de nós para todos os tipos de clusters que podem conter pools de nós de trabalho (clusters híbridos, independentes e de usuário).

Se você planeja usar a CLI gcloud, faça o seguinte em um computador que tenha a CLI gcloud instalada:

  1. Efetue login com a sua Conta do Google

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    

Verificar o status do nó

Antes de adicionar ou remover pools de nós, verifique o status dos nós e os respectivos pools.

kubectl

Com o kubectl, é possível receber o status dos nós em um namespace específico ou em todo o cluster. Veja no exemplo a seguir o status dos pools de nós no namespace cluster-abm-cluster do cluster:

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

O sistema retorna resultados semelhantes aos seguintes:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

Cada coluna na tabela indica os diferentes status em que um nó pode estar. Cada linha na tabela é o número de nós por pool em cada um dos status de nós.

Quando você adiciona um nó, inicialmente ele tem o status Reconciling enquanto o nó está provisionado. Depois que o nó fizer parte do cluster, o status do nó mudará para Ready.

Também é possível verificar o status dos nós no cluster executando o seguinte comando:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de clusters, clique no nome dele e em Mais detalhes no painel Detalhes.

  4. Clique na guia Nós.

    Uma lista de pools de nós é exibida.

Lista de nós de captura de tela

CLI da gcloud

  1. Liste os pools de nós no cluster:

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Substitua:

    • USER_CLUSTER_NAME: o nome do cluster do usuário que contém os pools de nós.

    • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

    • LOCATION: o local do Google Cloud associado ao cluster de usuário.

  2. Descreva um pool de nós:

    gcloud container bare-metal node-pools describe NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Substitua NODE_POOL_NAME pelo nome do pool de nós.

Veja como diagnosticar seus clusters em Criar snapshots para diagnosticar clusters.

Adicionar um novo pool de nós

kubectl

Lembre-se das seguintes regras ao adicionar um pool de nós a um cluster:

  • Um cluster de administrador pode conter um pool de nós do balanceador de carga e um pool de nós do plano de controle, mas não um pool de nós de trabalho: tentar adicionar um pool de nós de trabalho a um cluster de administrador produz um erro.

  • Um cluster pode conter apenas um único pool de nós do plano de controle e um único pool de nós do balanceador de carga. Não é possível adicionar um plano de controle extra ou pools de nós de balanceamento de carga a um cluster.

Para adicionar novos pools de nós a um cluster, crie um novo recurso nodepools.baremetal.cluster.gke.io no cluster. No exemplo a seguir, um novo pool de nós chamado "machine-learning-pool" é adicionado ao manifesto. O novo pool de nós consiste em dois nós com endereços IP 10.200.0.7 e 10.200.0.8:

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

Armazene a configuração em um arquivo chamado machine-learning-pool.yaml e aplique a configuração ao cluster com o seguinte comando:

kubectl apply -f machine-learning-pool.yaml

Os seguintes fatores precisam ser considerados ao adicionar um pool de nós a um cluster:

  • As configurações NodePool.spec.taints e NodePool.spec.labels são reconciliadas para nós. Todos os taints e rótulos que são adicionados diretamente aos nós são removidos. O plano de controle não remove os taints e os rótulos que você adiciona diretamente durante o processo de sincronização. Para ignorar essa etapa da reconciliação, anote o nó com baremetal.cluster.gke.io/label-taint-no-sync.

  • O recurso de pool de nós precisa ser criado no mesmo namespace do cluster associado e o recurso de pool de nós precisa se referir ao nome do cluster no campo spec.clusterName.

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de clusters, clique no nome dele e em Mais detalhes no painel Detalhes.

  4. Clique em Adicionar pool de nós.

  5. Insira um nome para o pool de nós.

  6. No campo Endereço de nós 1, insira o endereço IP da máquina de nó do worker.

    Se você tiver mais de uma máquina de nó de trabalho para adicionar, clique em Adicionar endereço.

  7. Se quiser, adicione rótulos do Kubernetes e/ou taints do Kubernetes.

  8. Clique em Criar.

O status do pool de nós é exibido na guia "Nós". Talvez seja necessário atualizar a página para ver o novo status.

CLI da gcloud

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

Substitua:

  • NODE_POOL_NAME: um nome de sua escolha para o pool de nós. O nome precisa:

    • conter no máximo 40 caracteres
    • conter apenas caracteres alfanuméricos minúsculos ou um hífen (-)
    • começam com um caractere alfabético
    • terminar com um caractere alfanumérico.
  • USER_CLUSTER_NAME: o nome do cluster do usuário.

  • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

  • LOCATION: o local do Google Cloud que você especificou ao criar o cluster.

  • NODE_POOL_CONFIG: o caminho de um arquivo de configuração que descreve o pool de nós. Exemplo:

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

Também é possível especificar o seguinte:

  • --node-labels=KEY=VALUE,...: uma lista separada por vírgulas de rótulos do Kubernetes (pares de chave-valor) aplicados a cada nó no pool.

  • --node-taints=KEY=VALUE:EFFECT,... Uma lista separada por vírgulas de taints do Kubernetes

aplicados a cada nó no pool. Os taints são pares de chave-valor associados a um efeito. Taints são usados com tolerâncias para a programação de pods. Especifique um dos seguintes para EFFECT: NoSchedule, PreferNoSchedule, NoExecute.

  • --validate-only: especifique essa sinalização se quiser validar a atualização, mas não fizer mudanças.

Atualizar um pool de nós

kubectl

Para atualizar um pool de nós, modifique o recurso nodepools.baremetal.cluster.gke.io no cluster. É possível atualizar o recurso diretamente usando kubectl edit ou atualizar o arquivo YAML e usar kubectl apply.

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de clusters, clique no nome dele e em Mais detalhes no painel Detalhes.

  4. Clique na guia Nós.

  5. Na lista, clique no pool de nós que você quer atualizar.

  6. Na página Detalhes do pool de nós, clique em Editar.

  7. Altere as configurações conforme necessário e clique em Salvar.

CLI da gcloud

  1. Opcionalmente, liste os pools de nós no cluster para receber o nome do pool de nós que você quer atualizar.

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    Substitua:

    • USER_CLUSTER_NAME: o nome do cluster do usuário que contém os pools de nós.

    • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

    • LOCATION: o local do Google Cloud associado ao cluster de usuário.

  2. Execute este comando:

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

    Substitua:

    • NODE_POOL_NAME pelo nome do pool de nós.

    • NODE_CONFIG_FILE: o caminho de um arquivo de configuração que descreve o pool de nós. Exemplo:

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

Também é possível especificar o seguinte:

  • --node-labels=KEY=VALUE,...: uma lista separada por vírgulas de rótulos do Kubernetes (pares de chave-valor) aplicados a cada nó no pool.

  • --node-taints=KEY=VALUE:EFFECT,... Uma lista separada por vírgulas de taints do Kubernetes aplicados a cada nó no pool. Os taints são pares de chave-valor associados a um efeito. Taints são usados com tolerâncias para a programação de pods. Especifique um dos seguintes para EFFECT: NoSchedule, PreferNoSchedule, NoExecute.

  • --validate-only: especifique essa sinalização se quiser validar a atualização, mas não fizer mudanças.

Exemplo:

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

Remover um pool de nós

kubectl

Remova os pools de nós com kubectl delete. Por exemplo, para remover o pool de nós adicionado na seção anterior, machine-learning-pool, use o seguinte comando:

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

Lembre-se de que os pools de nós do plano de controle e os pools de nós do balanceador de carga são essenciais para a função de um cluster e, consequentemente, não podem ser removidos de um cluster.

Console

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud em que o cluster de usuário está.

  3. Na lista de clusters, clique no nome dele e em Mais detalhes no painel Detalhes.

  4. Clique na guia Nós e, em seguida, clique no pool de nós que você quer excluir.

  5. Clique em Excluir.

  6. Na caixa de diálogo de confirmação, insira o nome do pool de nós e clique em Confirmar.

CLI da gcloud

gcloud container bare-metal node-pools delete NODE_POOL_NAME  \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

Substitua:

  • NODE_POOL_NAME pelo nome do pool de nós.

  • USER_CLUSTER_NAME: o nome do cluster do usuário que contém os pools de nós.

  • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster foi criado.

  • LOCATION: o local do Google Cloud associado ao cluster de usuário.

A remoção de um pool de nós de trabalho em um cluster pode causar interrupções no pod. Se houver um Orçamento de interrupção de pod (PDB, na sigla em inglês) em vigor, você poderá ser impedido de remover um pool de nós. Para mais informações sobre políticas de interrupção de pods, consulte Como remover nós bloqueados pelo Orçamento de interrupção de pod.

A seguir

Se os requisitos da carga de trabalho mudarem após a criação dos pools de nós, vai ser possível atualizar um pool de nós de trabalho para adicionar ou remover nós. Para adicionar ou remover nós de um pool de nós de trabalho, consulte Adicionar ou remover nós de um cluster.