Como criar e gerenciar pools de nós

Ao criar um cluster de usuário, você precisa configurar pelo menos um pool de nós, que é um grupo de nós com a mesma configuração. Após a criação do cluster, é possível adicionar novos pools de nós, atualizar as configurações dele e excluir pools de nós.

Escolher uma ferramenta para gerenciar pools de nós

A maneira de criar, atualizar e excluir pools de nós é diferente quando o cluster é gerenciado pela API GKE On-Prem. Um cluster de usuário é gerenciado pela API GKE On-Prem quando uma destas condições é verdadeira:

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

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

Se a API GKE On-Prem estiver gerenciando um cluster de usuário, será possível usar o console ou a gcloud CLI para gerenciar pools de nós. Se o cluster de usuário não for gerenciado pela API GKE On-Prem, use gkectl na estação de trabalho do administrador para gerenciar pools de nós.

Para usar a gcloud CLI, faça o seguinte em um computador com a gcloud CLI instalada:

  1. Faça login com sua Conta do Google

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    

Adicionar um pool de nós

Se o cluster for gerenciado pela API GKE On-Prem, será possível usar o console ou a gcloud CLI para adicionar um pool de nós. No entanto, é necessário usar gkectl na estação de trabalho do administrador para definir as seguintes configurações do pool de nós:

Antes de adicionar outro pool de nós, verifique se endereços IP suficientes estão disponíveis no cluster.

gkectl

Faça o seguinte na estação de trabalho do administrador:

  1. No arquivo de configuração do cluster de usuário, preencha a seção nodePools.

    É necessário especificar os seguintes campos:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    Os seguintes campos são opcionais. Se você não incluir nodePools[i].bootDiskSizeGB ou nodePools[i].osImageType, os valores padrão serão usados.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. Execute este comando:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua:

    • ADMIN_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig para o cluster de administrador;

    • USER_CLUSTER_CONFIG é o caminho do arquivo de configuração do cluster de usuário.

Exemplo de configuração

No exemplo de configuração a seguir, há quatro pools de nós, cada um com atributos diferentes:

  • pool-1: somente os atributos mínimos necessários são especificados
  • pool-2: inclui vsphere.datastore e vsphere.tags
  • pool-3: inclui taints e labels
  • pool-4: inclui osImageType e bootDiskSizeGB
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

Console

  1. No console, acesse a página 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 cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  4. Clique em Adicionar pool de nós.

  5. Configure o pool de nós:

    1. Digite o Nome do pool de nós.
    2. Insira o número de vCPUs de cada nó no pool (mínimo de 4 por worker do cluster de usuário)
    3. Insira o tamanho da memória em mebibytes (MiB) para cada nó no pool (mínimo de 8.192 MiB por nó de trabalho do cluster de usuário, e precisa ser um múltiplo de 4).
    4. No campo Nodes, insira o número de nós no pool (mínimo de três).
    5. Selecione o tipo de imagem do SO: Ubuntu Containerd ou COS.

    6. Digite Tamanho do disco de inicialização em gibibytes (GiB). O padrão é 40 GiB.

  6. Na seção Metadados do pool de nós (opcional), se você quiser adicionar rótulos e taints do Kubernetes, faça o seguinte:

    1. Clique em + Adicionar rótulos do Kubernetes. Insira a Chave e o Valor do rótulo. Repita quantas vezes forem necessárias.
    2. Clique em + Adicionar taint. Insira Key, Value e Effect para o taint. Repita quantas vezes forem necessárias.
  7. Clique em Criar.

  8. O console do Google Cloud exibe Status do cluster: alterações em andamento. Clique em Mostrar detalhes para ver a Condição do status do recurso e as Mensagens de status.

CLI da gcloud

Execute o comando a seguir para criar um pool de nós:

gcloud container vmware node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME  \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --image-type=IMAGE_TYPE  \
  --boot-disk-size=BOOT_DISK_SIZE \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES

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 de usuários em que o pool de nós será criado.

  • FLEET_HOST_PROJECT_ID: o ID do projeto em que o cluster está registrado.

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

    • IMAGE_TYPE: o tipo de imagem do SO a ser executado nas VMs no pool de nós Defina como ubuntu_containerd ou cos.

    • BOOT_DISK_SIZE: o tamanho do disco de inicialização em gibibytes (GiB) para cada nó no pool. O mínimo é de 40 GiB.

    • vCPUs: o número de CPUs de cada nó no pool de nós. O mínimo é 4.

    • MEMORY: o tamanho da memória em mebibytes (MiB) para cada nó no pool. O mínimo é 8.192 MiB por nó de trabalho do cluster de usuário, e o valor precisa ser um múltiplo de 4.

    • NODES: o número de nós no pool de nós. O mínimo é 3.

    Exemplo:

    gcloud container vmware node-pools create default-pool \
      --cluster=user-cluster-1  \
      --location=us-west1 \
      --image-type=ubuntu_containerd  \
      --boot-disk-size=40 \
      --cpus=8 \
      --memory=8192 \
      --replicas=5
    

    Também é possível especificar o seguinte:

    • --enable-load-balancer: relevante apenas para o balanceador de carga MetalLB. Se especificado, permite que o alto-falante do MetalLB seja executado nos nós no pool. Pelo menos um pool de nós precisa estar ativado para o balanceador de carga do MetalLB.

    • --image=IMAGE: nome da imagem do SO no vCenter.

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

    Exemplo:

    gcloud container vmware node-pools create default-pool \
        --cluster=user-cluster-1  \
        --location=us-west1 \
        --image-type=ubuntu_containerd  \
        --boot-disk-size=40 \
        --cpus=8 \
        --memory=8192 \
        --replicas=5 \
        --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
    

    Para mais informações sobre outras sinalizações opcionais, consulte a referência do gcloud.

Atualizar um pool de nós

Quando você aumenta o número de réplicas, o Google Distributed Cloud adiciona o número necessário de nós ao cluster de usuário e, quando você diminui o número de réplicas, os nós são removidos. Alterar o número de réplicas de um pool de nós não interrompe as cargas de trabalho. Verifique se você tem endereços IP disponíveis ao aumentar o número de réplicas.

Se você atualizar qualquer outro campo do pool de nós, isso acionará uma atualização gradual no cluster. Em uma atualização gradual, o Google Distributed Cloud cria um novo nó e, depois, exclui um antigo. Esse processo é repetido até que todos os nós antigos sejam substituídos por novos nós. Esse processo não causa inatividade, mas o cluster precisa ter um endereço IP extra disponível para usar durante a atualização.

Suponha que um pool de nós tenha N nós no final de uma atualização. Assim, será preciso ter pelo menos N + 1 endereços IP disponíveis para os nós no pool. Isso significa que, se você estiver redimensionando um cluster adicionando nós a um ou mais pools, precisará ter pelo menos um endereço IP a mais do que o número total de nós que estará em todos os pools de nós do cluster no final do redimensionamento. Saiba mais em Verificar se endereços IP suficientes estão disponíveis.

Para atualizar um pool de nós em um cluster de usuário:

gkectl

  1. Modifique os valores dos campos que você quer alterar na seção nodePools do arquivo de configuração do cluster de usuário.

  2. Atualize o cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua:

    • ADMIN_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig para o cluster de administrador;

    • USER_CLUSTER_CONFIG é o caminho do arquivo de configuração do cluster de usuário.

Atualizar o osImageType usado por um pool de nós

Para atualizar um pool de nós para usar um osImageType diferente, use a linha de comando. Para alterar o osImageType usado por um pool de nós, atualize o arquivo de configuração do pool de nós, conforme mostrado no exemplo a seguir, e execute gkectl update cluster.

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

Console

Só é possível atualizar os seguintes campos no console:

  • Número de réplicas
  • Memória
  • Número de vCPUs

Para atualizar outros campos, use a gcloud CLI ou gkectl.

  1. No console, acesse a página 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 cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  4. Clique na guia Nós.

  5. Clique no nome do pool de nós que você quer modificar.

  6. Clique em Editar ao lado do campo que você quer modificar e clique em Concluído.

  7. Clique em para voltar à página anterior.

  8. O console do Google Cloud exibe Status do cluster: alterações em andamento. Clique em Mostrar detalhes para ver a Condição do status do recurso e as Mensagens de status.

CLI da gcloud

  1. Se quiser, liste os pools de nós para receber o nome do pool que você quer atualizar:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Execute este comando para atualizar o pool de nós:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --ATTRIBUTE_TO_UPDATE \
      ...
    

    Substitua:

    • NODE_POOL_NAME: o nome do pool de nós a ser atualizado;

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

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

    • ATTRIBUTE_TO_UPDATE: uma ou mais sinalizações para atualizar os atributos do pool de nós. Por exemplo, para alterar o número de vCPUs e nós no pool, execute o comando a seguir.

    gcloud container vmware node-pools update default-pool \
        --cluster=user-cluster-1  \
        --project=example-project-12345
        --location=us-west1 \
        --cpus=10 \
        --replicas=6
    

    Para informações sobre os atributos do pool de nós que você pode atualizar, consulte a referência do gcloud.

Verificar as alterações

Para verificar se os pools de nós foram criados ou atualizados conforme o esperado, inspecione os nós do cluster:

gkectl

Execute este comando:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

Se você precisar reverter as alterações, edite o arquivo de configuração do cluster e execute gkectl update cluster.

Console

  1. No console, acesse a página 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 cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  4. Clique na guia Nós.

  5. Clique no nome do pool de nós que você quer ver.

CLI da gcloud

Execute este comando:

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

Excluir um pool de nós

Embora seja possível excluir pools de nós, seu cluster de usuário precisa ter pelo menos um pool de nós. A exclusão de um pool de nós causa a remoção imediata dos nós do pool, mesmo que eles estejam executando cargas de trabalho.

Para excluir um pool de nós de um cluster de usuário:

gkectl

  1. Confira se não há cargas de trabalho em execução nos nós afetados.

  2. Remova a definição da seção nodePools do arquivo de configuração do cluster de usuário.

  3. Atualize o cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua:

    • [ADMIN_CLUSTER_KUBECONFIG] pelo caminho do arquivo kubeconfig para o cluster de administrador;

    • [USER_CLUSTER_CONFIG] é o caminho do arquivo de configuração do cluster de usuário.

Console

  1. Confira se não há cargas de trabalho em execução nos nós afetados.

  2. No console, acesse a página Visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

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

  4. Na lista de cluster, clique no nome dele e em Ver detalhes no painel Detalhes.

  5. Clique na guia Nós.

  6. Clique no nome do pool de nós que você quer excluir.

  7. Clique em Excluir.

  8. Clique em para voltar à página anterior.

  9. O console do Google Cloud exibe Status do cluster: alterações em andamento. Clique em Mostrar detalhes para ver a Condição do status do recurso e as Mensagens de status.

CLI da gcloud

  1. Como opção, liste os pools de nós para saber o nome do pool que você quer excluir:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. Execute o comando a seguir para excluir o pool de nós:

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

    Substitua:

    • NODE_POOL_NAME: o nome do pool de nós a ser excluído

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

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

Solução de problemas

  • Em geral, o comando gkectl update cluster fornece detalhes quando falha. Se o comando for bem-sucedido e você não vir os nós, solucione o problema com o guia Como diagnosticar problemas de cluster.

  • É possível que haja recursos de cluster insuficientes, como a falta de endereços IP disponíveis durante a criação ou atualização do pool de nós. Consulte o tópico Como redimensionar um cluster de usuários para ver detalhes sobre como verificar se os endereços IP estão disponíveis.

  • Você também pode consultar o guia geral de Solução de problemas.

  • Não prosseguirá depois de Creating node MachineDeployment(s) in user cluster….

    Pode levar algum tempo para criar ou atualizar os pools de nós no cluster de usuários. No entanto, se o tempo de espera for extremamente longo e você suspeitar que algo possa ter ocorrido, execute os seguintes comandos:

    1. Execute kubectl get nodes para ver o estado dos nós.
    2. Para qualquer nó que não esteja pronto, execute kubectl describe node NODE_NAME para mais detalhes.