Como criar e gerenciar pools de nós

Em um cluster de usuário, é possível criar um grupo de nós com a mesma configuração preenchendo a seção nodePools do arquivo de configuração do cluster. Em seguida, é possível gerenciar o pool de nós sem afetar os outros nós no cluster. Saiba mais sobre pools de nós.

Antes de começar

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.

É possível atualizar o campo replicas de uma seção nodePool sem interromper as cargas de trabalho. Entretanto, se você atualizar qualquer outro campo, os nós no pool serão excluídos e recriados.

Se você quiser anexar tags a todas as VMs em um pool de nós, sua conta de usuário do vCenter precisa ter estes privilégios de inclusão de tag do vSphere:

  • "vSphere Tagging.Assign" ou "Unassign vSphere Tag"
  • "vSphere Tagging.Assign" ou "Unassign vSphere Tag" no objeto (vSphere 7)

Ao atualizar uma seção nodePool, os clusters do Anthos no VMware criam um novo nó e, em seguida, excluem um nó antigo. Eles repetem esse processo até que todos os nós antigos sejam substituídos por novos nós. Isso significa que o cluster precisa ter um endereço IP extra disponível para uso 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 1 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. Para mais informações, consulte Verificar se endereços IP suficientes estão disponíveis.

Como preencher a seção nodePools do arquivo de configuração do cluster

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

Para cada pool de nós, é preciso especificar os seguintes campos:

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

Os seguintes campos são opcionais:

  • nodePools[i].labels
  • nodePools[i].taints
  • nodePools[i].bootDiskSizeGB
  • nodePools[i].osImageType
  • nodePools[i].vsphere.datastore
  • nodePools[i].vsphere.tags

Como criar pools de nós em um novo cluster

No arquivo de configuração do cluster de usuário, preencha a seção nodePools e crie o cluster:

gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Substitua:

  • ADMIN_CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster do administrador

  • USER_CLUSTER_CONFIG: o arquivo de configuração do cluster de usuário

Como atualizar os pools de nós em um cluster existente

No arquivo de configuração do cluster de usuário, edite a seção nodePools e atualize o cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Como 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:

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.

Exclusão do pool de nós

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

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

  2. Assegure-se de que não haja cargas de trabalho em execução nos nós afetados.

  3. Atualize o cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

Exemplos

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

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.