Criar e gerir node pools

Quando cria um cluster de utilizadores, tem de configurar, pelo menos, um conjunto de nós, que é um grupo de nós que têm todos a mesma configuração. Depois de criar o cluster, pode adicionar novos node pools, atualizar as definições dos node pools e eliminar node pools.

Escolha uma ferramenta para gerir pools de nós

A forma como cria, atualiza e elimina pools de nós depende de o cluster ser gerido pela API GKE On-Prem. Um cluster de utilizadores é gerido pela API GKE On-Prem se uma das seguintes condições for verdadeira:

  • O cluster foi criado na Google Cloud consola ou através da CLI Google Cloud (CLI gcloud), que configura automaticamente a API GKE On-Prem para gerir o cluster.

  • O cluster foi criado com o gkectl, mas foi configurado para ser gerido pela API GKE On-Prem.

Se a API GKE On-Prem estiver a gerir um cluster de utilizadores, pode usar a consola ou a CLI gcloud para gerir pools de nós. Se o cluster de utilizadores não for gerido pela API GKE On-Prem, use gkectl na estação de trabalho de administração para gerir os conjuntos de nós.

Se planeia usar a CLI gcloud, faça o seguinte num computador com a CLI gcloud instalada:

  1. Inicie sessão com a sua Conta Google

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    

Adicione um node pool

Se o cluster for gerido pela API GKE On-Prem, pode usar a consola ou a CLI gcloud para adicionar um conjunto de nós. No entanto, tem de usar gkectl na sua estação de trabalho de administração para configurar as seguintes definições do conjunto de nós:

Antes de adicionar outro conjunto de nós, verifique se existem endereços IP suficientes disponíveis no cluster.

gkectl

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

  1. No seu ficheiro de configuração do cluster de utilizadores, preencha a secção nodePools.

    Tem de especificar os seguintes campos:

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

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

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua o seguinte:

    • ADMIN_CLUSTER_KUBECONFIG com o caminho do ficheiro kubeconfig para o cluster de administrador.

    • USER_CLUSTER_CONFIG com o caminho do ficheiro de configuração do cluster de utilizadores.

Exemplo de configuração

Na configuração de exemplo seguinte, existem quatro conjuntos de nós, cada um com atributos diferentes:

  • pool-1: apenas são especificados os atributos mínimos obrigatórios
  • 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

Consola

  1. Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.

    Aceda aos clusters do GKE

  2. Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.

  3. Na lista de clusters, clique no nome do cluster e, de seguida, clique em Ver detalhes no painel Detalhes.

  4. Clique em Adicionar conjunto de nós.

  5. Configure o node pool:

    1. Introduza o nome do conjunto de nós.
    2. Introduza o número de vCPUs para cada nó no conjunto (mínimo de 4 por worker do cluster de utilizadores).
    3. Introduza o tamanho da memória em mebibytes (MiB) para cada nó no conjunto (mínimo de 8192 MiB por nó de trabalho do cluster de utilizadores e tem de ser um múltiplo de 4).
    4. No campo Nodes, introduza o número de nós no conjunto (mínimo de 3).
    5. Selecione o tipo de imagem do SO: Ubuntu Containerd ou COS.

    6. Introduza o tamanho do disco de arranque em gibibytes (GiB) (o valor predefinido é 40 GiB).

  6. Na secção Metadados do node pool (opcional), se quiser adicionar etiquetas do Kubernetes e restrições, faça o seguinte:

    1. Clique em + Adicionar etiquetas do Kubernetes. Introduza a Chave e o Valor da etiqueta. Repita estes passos conforme necessário.
    2. Clique em + Adicionar contaminação. Introduza a Chave, o Valor e o Efeito da contaminação. Repita estes passos conforme necessário.
  7. Clique em Criar.

  8. A Google Cloud consola apresenta Estado do cluster: alterações em curso. Clique em Mostrar detalhes para ver a condição do estado do recurso e as mensagens de estado.

CLI gcloud

Execute o seguinte comando para criar um node pool:

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 o seguinte:

  • NODE_POOL_NAME: um nome à sua escolha para o node pool. O nome tem de:

    • Conter, no máximo, 40 carateres
    • conter apenas carateres alfanuméricos minúsculos ou um hífen (-)
    • Começar com um caráter alfabético
    • Terminar com um caráter alfanumérico
  • USER_CLUSTER_NAME: O nome do cluster de utilizadores no qual o node pool vai ser criado.

  • FLEET_HOST_PROJECT_ID: o ID do projeto no qual o cluster está registado.

    • LOCATION: a localização Google Cloud associada ao cluster de utilizadores.

    • IMAGE_TYPE: O tipo de imagem do SO a executar nas VMs no node pool. Defina uma das seguintes opções: ubuntu_containerd ou cos.

    • BOOT_DISK_SIZE: O tamanho do disco de arranque em gibibytes (GiB) para cada nó no conjunto. O mínimo é de 40 GiB.

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

    • MEMORY: o tamanho da memória em mebibytes (MiB) para cada nó no conjunto. O mínimo é de 8192 MiB por nó de trabalho do cluster de utilizadores e o valor tem de ser um múltiplo de 4.

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

    Por 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
    

    Opcionalmente, pode especificar o seguinte:

    • --enable-load-balancer: apenas relevante para o balanceador de carga do MetalLB. Se especificado, permite que o altifalante do MetalLB seja executado nos nós no conjunto. Tem de ter, pelo menos, um conjunto de nós ativado para o equilibrador de carga do MetalLB.

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

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

    • --node-taints=KEY=VALUE:EFFECT,... Uma lista separada por vírgulas de Kubernetes taints aplicadas a cada nó no conjunto. As restrições são pares de chave-valor associados a um efeito. As restrições são usadas com tolerâncias para o agendamento de pods. Especifique uma das seguintes opções para EFFECT: NoSchedule, PreferNoSchedule, NoExecute.

    Por 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 obter informações sobre outras flags opcionais, consulte a referência gcloud.

Atualize um node pool

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

Se atualizar qualquer outro campo do node pool, isto aciona uma atualização contínua no cluster. Numa atualização contínua, o Google Distributed Cloud cria um novo nó e, em seguida, elimina um nó antigo. Este processo é repetido até todos os nós antigos terem sido substituídos por novos nós. Este processo não causa tempo de inatividade, mas o cluster tem de ter um endereço IP adicional disponível para utilização durante a atualização.

Suponhamos que um node pool tem N nós no final de uma atualização. Em seguida, tem de ter, pelo menos, N + 1 endereços IP disponíveis para os nós nesse conjunto. Isto significa que, se estiver a redimensionar um cluster adicionando nós a um ou mais conjuntos, tem de ter, pelo menos, mais um endereço IP do que o número total de nós que vão estar em todos os conjuntos de nós do cluster no final do redimensionamento. Para mais informações, consulte o artigo Verifique se existem endereços IP suficientes disponíveis.

Para atualizar um node pool num cluster de utilizador:

gkectl

  1. Modifique os valores dos campos que quer alterar na secção nodePools do ficheiro de configuração do cluster de utilizadores.

  2. Atualize o cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua o seguinte:

    • ADMIN_CLUSTER_KUBECONFIG com o caminho do ficheiro kubeconfig para o cluster de administrador.

    • USER_CLUSTER_CONFIG com o caminho do ficheiro de configuração do cluster de utilizadores.

Atualize o osImageType usado por um node pool

Para atualizar um node pool para usar um osImageType diferente, tem de usar a linha de comandos. Para alterar o osImageType usado por um node pool, atualize o ficheiro de configuração do node pool, como mostrado no exemplo seguinte, e execute gkectl update cluster.

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

Consola

Só pode atualizar os seguintes campos através da consola:

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

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

  1. Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.

    Aceda aos clusters do GKE

  2. Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.

  3. Na lista de clusters, clique no nome do cluster e, de seguida, clique em Ver detalhes no painel Detalhes.

  4. Clique no separador Nós.

  5. Clique no nome do conjunto de nós que quer modificar.

  6. Clique em Editar junto ao campo que quer modificar e clique em Concluído.

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

  8. A Google Cloud consola apresenta Estado do cluster: alterações em curso. Clique em Mostrar detalhes para ver a condição do estado do recurso e as mensagens de estado.

CLI gcloud

  1. Opcionalmente, liste os conjuntos de nós para obter o nome do conjunto de nós que quer atualizar:

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

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

    Substitua o seguinte:

    • NODE_POOL_NAME: O nome do node pool a atualizar.

    • USER_CLUSTER_NAME: O nome do cluster de utilizadores que contém o conjunto de nós.

    • LOCATION: a localização Google Cloud associada ao cluster de utilizadores.

    • ATTRIBUTE_TO_UPDATE: uma ou mais flags para atualizar os atributos do conjunto de nós. Por exemplo, para alterar o número de vCPUs e nós no conjunto, execute o seguinte comando.

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

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

Valide as alterações

Para verificar se os conjuntos de nós foram criados ou atualizados conforme previsto, inspecione os nós do cluster:

gkectl

Execute o seguinte comando:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

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

Consola

  1. Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.

    Aceda aos clusters do GKE

  2. Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.

  3. Na lista de clusters, clique no nome do cluster e, de seguida, clique em Ver detalhes no painel Detalhes.

  4. Clique no separador Nós.

  5. Clique no nome do conjunto de nós que quer ver.

CLI gcloud

Execute o seguinte comando:

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

Elimine um node pool

Embora possa eliminar conjuntos de nós, o cluster de utilizadores tem de ter, pelo menos, um conjunto de nós. A eliminação de um node pool provoca a remoção imediata dos nós do pool, independentemente de esses nós estarem a executar cargas de trabalho.

Para eliminar um conjunto de nós de um cluster de utilizadores:

gkectl

  1. Certifique-se de que não existem cargas de trabalho em execução nos nós afetados.

  2. Remova a respetiva definição da secção nodePools do ficheiro de configuração do cluster de utilizadores.

  3. Atualize o cluster:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    Substitua o seguinte:

    • [ADMIN_CLUSTER_KUBECONFIG] com o caminho do ficheiro kubeconfig para o cluster de administrador.

    • [USER_CLUSTER_CONFIG] com o caminho do ficheiro de configuração do cluster de utilizadores.

Consola

  1. Certifique-se de que não existem cargas de trabalho em execução nos nós afetados.

  2. Na consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.

    Aceda aos clusters do GKE

  3. Selecione o Google Cloud projeto no qual o cluster de utilizadores se encontra.

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

  5. Clique no separador Nós.

  6. Clique no nome do conjunto de nós que quer eliminar.

  7. Clique em Eliminar.

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

  9. A Google Cloud consola apresenta Estado do cluster: alterações em curso. Clique em Mostrar detalhes para ver a condição do estado do recurso e as mensagens de estado.

CLI gcloud

  1. Opcionalmente, liste os conjuntos de nós para obter o nome do conjunto de nós que quer eliminar:

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

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

    Substitua o seguinte:

    • NODE_POOL_NAME: O nome do node pool a eliminar.

    • USER_CLUSTER_NAME: O nome do cluster de utilizadores que contém o conjunto de nós.

    • LOCATION: a localização Google Cloud associada ao cluster de utilizadores.

Resolução de problemas

  • Em geral, o comando gkectl update cluster fornece detalhes quando falha. Se o comando for bem-sucedido e não vir os nós, pode resolver problemas com o guia Diagnosticar problemas do cluster.

  • É possível que existam recursos de cluster insuficientes, como a falta de endereços IP disponíveis durante a criação ou a atualização do conjunto de nós. Consulte o tópico Redimensionar um cluster de utilizadores para ver detalhes sobre como verificar se os endereços IP estão disponíveis.

  • Também pode rever o artigo Resolva problemas de atualização do Google Distributed Cloud.

  • Não avança para além de Creating node MachineDeployment(s) in user cluster….

    Pode demorar algum tempo a criar ou atualizar os pools de nós no cluster de utilizadores. No entanto, se o tempo de espera for extremamente longo e suspeitar que algo pode ter falhado, pode executar os seguintes comandos:

    1. Execute kubectl get nodes para obter o estado dos seus nós.
    2. Para todos os nós que não estejam prontos, execute o comando kubectl describe node NODE_NAME para obter detalhes.