Como criar e gerenciar pools de nós

A partir da versão 1.3 dos clusters do Anthos no VMware (GKE On-Prem), é possível criar um grupo de nós no cluster de usuário. Todos eles têm a mesma configuração definida no pool de nós no arquivo de configuração desse cluster. Assim, é possível gerenciar esse pool de nós separadamente sem afetar qualquer outro nó no cluster. Saiba mais sobre pools de nós.

Um ou mais pools de nós podem ser definidos no arquivo de configuração de qualquer cluster de usuário. A criação de um pool de nós cria nós no cluster de usuário. O gerenciamento do pool de nós, incluindo a criação, atualização e exclusão de pools de nós em um cluster de usuário, é feito com a modificação da seção nodePools do arquivo de configuração e da implantação dessas alterações no cluster atual com o comando gkectl update cluster. A exclusão de pools de nós causará a remoção imediata dos nós relacionados, independentemente de algum deles estar executando uma carga de trabalho.

Exemplo de pool de nós:

nodePools:
  - name: pool-1
    cpus: 4
    memoryMB: 8192
    replicas: 5

Dica para novas instalações: crie seu primeiro cluster de usuários e defina pools de nós nesse cluster. Em seguida, use o arquivo de configuração desse cluster para criar clusters de usuário adicionais com as mesmas configurações do pool de nós.

Antes de começar

  • Suporte:

    • Apenas clusters de usuário versão 1.3.0 ou posterior são compatíveis.

    • Os pools de nós em clusters de administração não são compatíveis.

    • Atualmente, o comando gkectl update cluster é totalmente compatível com a atualização de pools de nós e inclusão de IPs estáticos. Além disso, ele permite a ativação da geração de registros de auditoria na nuvem e a ativação/desativação do reparo automático. Todas as outras alterações atuais no arquivo de configuração são ignoradas.

    • Os nós em um pool podem ser gerenciados separadamente de outros nós, mas não é possível fazer upgrade dos nós de qualquer cluster. Todos os nós são atualizados quando você faz o upgrade dos clusters.

  • Recursos:

    • É possível implantar apenas alterações no pool de nós replicas sem interrupção na carga de trabalho de um nó.

      Importante: se você implantar qualquer outra alteração na configuração do pool de nós, os nós serão recriados no pool. Verifique se esse pool de nós não está executando uma carga de trabalho que não pode ser interrompida.

    • Quando você implanta as alterações no pool de nós, os nós indesejados são excluídos depois que os pretendidos são criados ou atualizados. Uma imposição dessa política é que, mesmo que o número total de nós permaneça o mesmo antes e depois de uma atualização, mais recursos (por exemplo, endereços IP) poderão ser necessários 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 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 no final do redimensionamento. Saiba mais em Verificar se endereços IP suficientes estão disponíveis.

Como criar e atualizar os pools de nós

Você gerencia um pool de nós modificando e implantando o arquivo de configuração do cluster de usuários. É possível criar e implantar um ou mais pools de nós em um cluster de usuário.

Para criar ou atualizar pools de nós:

  1. Em um editor, abra o arquivo de configuração do cluster de usuários em que você quer criar ou atualizar os pools de nós.

  2. Defina um ou mais pools de nós na seção nodePools do arquivo de configuração do cluster do usuário:

    1. Configure os atributos mínimos necessários do pool de nós. Especifique os seguintes atributos para cada pool de nós:

      • nodePools.name: especifica um nome exclusivo para o pool de nós. A atualização desse atributo recria o nó. Exemplo: - name: pool-1

      • nodePools.cpus: especifica quantas CPUs são alocadas para cada nó de trabalho no pool. A atualização desse atributo recria o nó. Exemplo: cpus: 4

      • nodePools.memoryMB: especifica o volume de memória, em megabytes, alocado para cada nó de trabalho do cluster de usuário. A atualização desse atributo recria o nó. Exemplo: memoryMB: 8192

      • nodePools.replicas: especifica o número total de nós de trabalho no pool. O cluster do usuário usa nós em todos os pools para executar cargas de trabalho. É possível atualizar esse atributo sem afetar os nós ou executar cargas de trabalho. Exemplo: replicas: 5

      Mesmo que alguns dos atributos nodePools sejam os mesmos que os workernode (DHCP | IP estático ) no arquivo de configuração antigo, a seção workernode ainda é necessária nos arquivos de configuração antigos de cada cluster de usuário. Não é possível remover a seção workernode nem substituí-la por nodepools. No novo arquivo de configuração do cluster de usuário, não há mais nenhuma seção workernode. Defina pelo menos um pool de nós para um cluster de usuário e garanta que haja nós sem taint suficientes para substituir o pool workernode padrão em arquivos de configuração antigos.

      Exemplo:

      nodePools:
      - name: pool-1
        cpus: 4
        memoryMB: 8192
        replicas: 5
      

      Consulte Exemplos para ver um arquivo de configuração do cluster de usuário com vários pools de nós.

    2. Configure atributos opcionais do pool de nós. É possível adicionar rótulos e taints à configuração do pool de nós para direcionar cargas de trabalho de nós. Também é possível definir qual vSphere Datastore é usado pelo pool de nós.

      • nodePools.labels: especifica um ou mais pares de key : value para identificar exclusivamente seus pools de nós. O key e o value precisam ter até 63 caracteres cada e começar com uma letra ou um número. Podem conter letras, números, hífens, pontos e sublinhados.

        Para informações detalhadas de configuração, consulte rótulos (em inglês).

        Importante: não é possível especificar as seguintes chaves para um rótulo porque elas estão reservadas para uso por clusters do Anthos no VMware: kubernetes.io, k8s.io e googleapis.com.

        Exemplo:

        labels:
          key1: value1
          key2: value2
        
      • nodePools.taints: especifica um key, value e effect para definir taints para os pools de nós. Essas taints correspondem ao tolerations configurado para os pods.

        O key é obrigatório e o value é opcional. Ambos precisam ter até 253 caracteres e começar com uma letra ou um número. Podem conter letras, números, hífens, pontos e sublinhados. Opcionalmente, é possível prefixar um key com um subdomínio DNS seguido por uma /. Por exemplo, example.com/my-app.

        Os valores effect válidos são: NoSchedule, PreferNoSchedule, ou NoExecute.

        Para ver informações detalhadas de configuração, consulte taints (em inglês).

        Exemplo:

        taints:
          - key: key1
            value: value1
            effect: NoSchedule
        
      • nodePools.bootDiskSizeGB: especifica o tamanho do disco de inicialização, em gigabytes, que é alocado para cada nó de trabalho no pool. Essa configuração está disponível a partir da versão 1.5.0 dos clusters do Anthos no VMware.

        Exemplo:

        bootDiskSizeGB: 40
        
      • nodePools.vsphere.datastore: especifica o armazenamento de dados do vSphere em que cada nó do pool será criado. Isso substitui o vSphere Datastore padrão do cluster de usuário.

        Exemplo:

        vsphere:
          datastore: datastore_name
        

    Consulte Exemplos para ver um exemplo de configuração com vários pools de nós.

  3. Use o comando gkectl update cluster para implantar as alterações no cluster de usuários.

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG_FILE] --dry-run --yes
    
    em que:
    • [ADMIN_CLUSTER_KUBECONFIG]: especifica o arquivo kubeconfig do cluster de administrador.
    • [USER_CLUSTER_CONFIG_FILE]: especifica o arquivo configuration do cluster de usuário;
    • --dry-run: sinalização opcional. Adicione esta sinalização para visualizar somente a alteração. Nenhuma alteração é implantada no cluster de usuários.
    • --yes: sinalização opcional. Adicione essa sinalização para executar o comando silenciosamente. O prompt que verifica se você quer continuar está desativado.

    Se você tiver cancelado o comando antecipadamente, poderá executar o mesmo comando novamente para concluir a operação e implantar as alterações no cluster do usuário.

    Se você precisar reverter as alterações, será necessário revertê-las no arquivo de configuração e reimplantá-las no cluster de usuários.

  4. Verifique se as alterações foram bem-sucedidas inspecionando todos os nós. Execute o seguinte comando para listar todos os nós no cluster de usuários:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
    

    [USER_CLUSTER_KUBECONFIG] é o arquivo kubeconfig do cluster de usuário.

Como excluir um 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. Implante as alterações executando o comando gkectl update cluster:

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG_FILE] --dry-run --yes
    
    em que:
    • [ADMIN_CLUSTER_KUBECONFIG]: especifica o arquivo kubeconfig do cluster de administrador.
    • [USER_CLUSTER_CONFIG_FILE]: especifica o arquivo configuration do cluster de usuário;
    • --dry-run: sinalização opcional. Adicione esta sinalização para visualizar somente a alteração. Nenhuma alteração é implantada no cluster de usuários.
    • --yes: sinalização opcional. Adicione essa sinalização para executar o comando silenciosamente. O prompt que verifica se você quer continuar está desativado.
  4. Verifique se as alterações foram bem-sucedidas inspecionando todos os nós. Execute o seguinte comando para listar todos os nós no cluster de usuários:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
    

    [USER_CLUSTER_KUBECONFIG] é o arquivo kubeconfig do cluster de usuário.

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 o vSphere Datastore
  • pool-3: inclui o bootDiskSizeGB
  • pool-4: inclui taints e rótulos
  • pool-5: inclui todos os atributos
apiVersion: v1
kind: UserCluster
...
# (Required) List of node pools. The total un-tainted replicas across all node pools
# must be greater than or equal to 3
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
- name: pool-3
  cpus: 8
  memoryMB: 8192
  replicas: 3
  bootDiskSizeGB: 40
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-5
  cpus: 8
  memoryMB: 16384
  replicas: 3
  taints:
    - key: "my_key"
      value: my_value1
      effect: NoExecute
  labels:
    environment: test
  vsphere:
    datastore: my_datastore
  bootDiskSizeGB: 60
...

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.