Como criar e gerenciar pools de nós

A partir da versão 1.3 do GKE On-Prem, é possível criar um pool de nós para definir um grupo de nós em todos os clusters do usuário que tenham a mesma configuração. Em seguida, é possível gerenciar esse pool de nós separadamente sem afetar os outros nós em cada cluster. Saiba mais sobre pools de nós.

É possível definir um ou mais pools de nós nos arquivos de configuração dos clusters de usuário. A criação de um pool de nós cria nós adicionais em cada cluster. O gerenciamento do pool de nós é feito por meio do arquivo de configuração do cluster do usuário, incluindo a criação, a atualização e a exclusão de pools de nós. Depois que os pools de nós forem definidos nos arquivos de configuração, implante essas alterações nos clusters com o comando gkectl update cluster. As alterações implantadas são realizadas imediatamente em cada cluster de usuário. Por exemplo, se você remover um pool de nós de um cluster, esses nós serão excluídos imediatamente, mesmo que estejam 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 é compatível apenas com o gerenciamento de pool de nós. Todas as outras alterações atuais no arquivo de configuração são ignoradas.

    • Embora seja possível gerenciar nós em um pool de nós em cada cluster de usuário separadamente, nenhum nó de cluster pode ser atualizado separadamente. 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. É preciso garantir que cada pool de nós não esteja executando uma carga de trabalho que não será interrompida.

    • Quando você implanta as alterações no pool de nós, um nó temporário pode ser criado. É necessário verificar se um endereço IP está disponível para esse nó temporário.

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 cada 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 em usercluster no arquivo de configuração:

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

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

      • usercluster.nodepools.cpus: especifique quantas CPUs estão alocadas em cada nó de trabalho do cluster de usuário. A atualização desse atributo recria o nó. Exemplo: cpus: 4

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

      • usercluster.nodepools.replicas: especifica o número total de nós de trabalho que o cluster de usuário usa para executar cargas de trabalho. É possível atualizar esse atributo sem afetar os nós ou executar cargas de trabalho. Exemplo: replicas: 5

      Embora alguns dos atributos nodepools sejam os mesmos que workernode (DHCP | IP estático), a seção workernode é necessária para todos os clusters de usuários. Não é possível remover workernode nem substituí-lo por nodepools.

      Exemplo:

      nodepools:
        - name: pool-1
          cpus: 4
          memorymb: 8192
          replicas: 5
      

      Consulte Exemplos para ver um exemplo de configuração 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.

      • usercluster.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 pelo GKE On-Prem: kubernetes.io, k8s.io e googleapis.com.

        Exemplo:

        labels:
          key1: value1
          key2: value2
        
      • usercluster.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
        
      • usercluster.nodepools.vsphere.datastore: especifique o vSphere Datastore a ser usado com o pool de nós. 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.

    Observação: o gkectl update cluster aceita apenas o gerenciamento de pool de nós. Somente as alterações na seção nodepools são implantadas. Todas as outras alterações no arquivo de configuração são ignoradas.

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
    
    em que:
    • [ADMIN_CLUSTER_KUBECONFIG]: especifica o arquivo kubeconfig do cluster de administrador.
    • config.yaml: especifica o configuration file editado do cluster de usuários. Talvez você tenha escolhido um nome diferente para este arquivo.
    • --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 os pools de nós

Para remover pools de nós de um cluster de usuário:

  1. Remova todas as configurações de nodepools do arquivo de configuração do cluster de usuário. Se houver vários pools de nós, remova todas as configurações.

  2. Verifique se há cargas de trabalho em execução. Todos os nós afetados serão excluídos.

  3. Implante as alterações executando o comando gkectl update cluster:

    gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
    
    em que:
    • [ADMIN_CLUSTER_KUBECONFIG]: especifica o arquivo kubeconfig do cluster de administrador.
    • config.yaml: especifica o configuration file editado do cluster de usuários. Talvez você tenha escolhido um nome diferente para este arquivo.
    • --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 taints e rótulos
  • pool-4: inclui todos os atributos
...
usercluster:
  ...
  workernode:
    cpus: 4
    memorymb: 8192
    replicas: 3
  # (Optional) Node pools with customizable labels, taints, etc.
  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: 4
      memorymb: 8192
      replicas: 5
      taints:
        - key: "example-key"
          effect: NoSchedule
      labels:
        environment: production
        app: nginx
    - name: pool-4
      cpus: 8
      memorymb: 16384
      replicas: 3
      taints:
        - key: "my_key"
          value: my_value1
          effect: NoExecute
      labels:
        environment: test
      vsphere:
        datastore: my_datastore
...

Veja um exemplo completo do arquivo de configuração do cluster de usuários.

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.