Atualize node pools

Esta página mostra como atualizar o painel de controlo e os conjuntos de nós separadamente num cluster de utilizador criado com o Google Distributed Cloud (apenas software) no VMware. Esta página destina-se a administradores de TI e operadores que gerem o ciclo de vida da infraestrutura tecnológica subjacente. Para saber mais sobre as funções comuns e exemplos de tarefas que referimos no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE. Antes de ler este documento, certifique-se de que está familiarizado com o planeamento e a execução de atualizações do Google Distributed Cloud, conforme descrito no seguinte:

Limitações

A atualização dos node pools separadamente do plano de controlo tem as seguintes limitações:

  • Esta funcionalidade é suportada para pools de nós do Ubuntu e do COS, mas não para pools de nós do Windows.

  • Esta funcionalidade não está disponível quando atualiza clusters não avançados para clusters avançados. Os clusters não avançados vão ser atualizados automaticamente para clusters avançados na versão 1.33.

  • Versão 1.31: esta funcionalidade não está disponível em clusters avançados.

  • Versão 1.32 e superior: esta funcionalidade está disponível em clusters avançados.

Por que motivo deve atualizar o plano de controlo e os node pools separadamente?

  • Se os seus clusters estiverem na versão 1.16 ou superior, pode ignorar uma versão secundária ao atualizar os conjuntos de nós. A execução de uma atualização de versão ignorada reduz para metade o tempo necessário para atualizar sequencialmente os node pools duas versões. Além disso, as atualizações de versões ignoradas permitem-lhe aumentar o tempo entre as atualizações necessárias para permanecer numa versão suportada. Reduzir o número de atualizações reduz as interrupções da carga de trabalho e o tempo de validação. Para mais informações, consulte o artigo Ignore uma versão ao atualizar conjuntos de nós.

  • Em determinadas situações, pode querer atualizar alguns, mas não todos os node pools num cluster de utilizador, por exemplo:

    • Pode começar por atualizar o plano de controlo e um conjunto de nós com tráfego reduzido ou que execute as cargas de trabalho menos críticas. Depois de se certificar de que as cargas de trabalho são executadas corretamente na nova versão, pode atualizar pools de nós adicionais até que todos os pools de nós sejam atualizados.

    • Em vez de um grande período de manutenção para a atualização do cluster, pode atualizar o cluster em vários períodos de manutenção. Consulte o artigo Estime o tempo necessário e planeie um período de manutenção para obter informações sobre como estimar o tempo de um período de manutenção.

Antes de começar

  1. Na versão 1.29 e posteriores, as verificações prévias do lado do servidor estão ativadas por predefinição. Certifique-se de que reveja as regras da firewall para fazer as alterações necessárias.

  2. Para atualizar para a versão 1.28 e posteriores, tem de ativar o kubernetesmetadata.googleapis.com e conceder a função de IAM kubernetesmetadata.publisher à conta de serviço de registo e monitorização. Para ver detalhes, consulte os requisitos da API Google e da IAM.

  3. Certifique-se de que a versão atual do cluster é a 1.14 ou superior.

Atualize o plano de controlo e os node pools selecionados

A atualização do painel de controlo de um cluster de utilizadores separadamente dos conjuntos de nós de trabalho é suportada através do gkectl, da Google Cloud CLI e do Terraform. Só pode usar o Terraform para a atualização se tiver criado o cluster de utilizadores com o Terraform.

gkectl

  1. Defina a versão de origem e a versão de destino nas seguintes variáveis de marcadores de posição. Todas as versões têm de ser o número da versão completo no formato x.y.z-gke.N, como 1.16.11-gke.25.

    Versão Descrição
    SOURCE_VERSION A versão atual do cluster.
    TARGET_VERSION Escolha a versão de destino. Selecione o patch recomendado da versão secundária de destino.
  2. Atualize a estação de trabalho do administrador para a versão de destino. Aguarde uma mensagem a indicar que a atualização foi bem-sucedida.

  3. Importe as imagens do SO correspondentes para o vSphere:

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Substitua ADMIN_CLUSTER_KUBECONFIG pelo caminho do ficheiro kubeconfig do cluster de administrador.

  4. Faça as seguintes alterações no ficheiro de configuração do cluster de utilizadores:

    • Defina o campo gkeOnPremVersion para a versão de destino, TARGET_VERSION.

    • Para cada conjunto de nós que quer atualizar, defina o campo nodePools.nodePool[i].gkeOnPremVersion como a string vazia.

      • Na versão 1.28 e posteriores, pode acelerar a atualização do pool de nós definindo o campo nodePools.nodePool[i].updateStrategy.rollingUpdate.maxSurge para um valor inteiro superior a 1. Quando atualiza nós com maxSurge, vários nós são atualizados ao mesmo tempo que demora a atualizar um único nó.
    • Para cada conjunto de nós que não quer atualizar, defina nodePools.nodePool[i].gkeOnPremVersion para a versão de origem, SOURCE_VERSION.

    O exemplo seguinte mostra uma parte do ficheiro de configuração do cluster de utilizadores. Especifica que o plano de controlo e o pool-1 vão ser atualizados para TARGET_VERSION, mas o pool-2 vai permanecer em SOURCE_VERSION.

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: SOURCE_VERSION
      ...
    
  5. Atualize o painel de controlo e os node pools selecionados:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    

    Substitua USER_CLUSTER_CONFIG pelo caminho do ficheiro de configuração do cluster de utilizadores.

Atualize node pools adicionais

Usando o exemplo anterior, suponhamos que tudo está a funcionar bem com pool-1 e que agora quer atualizar pool-2.

  1. No ficheiro de configuração do cluster de utilizadores, em pool-2, defina gkeOnPremVersion como a string vazia:

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: ""
      ...
    
  2. Execute gkectl update cluster para aplicar a alteração:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

CLI gcloud

A atualização de um cluster de utilizadores requer algumas alterações ao cluster de administrador. O comando gcloud container vmware clusters upgrade faz automaticamente o seguinte:

  • Inscreve o cluster de administrador na API GKE On-Prem se ainda não estiver inscrito.

  • Transfere e implementa um pacote de componentes no cluster de administrador. A versão dos componentes corresponde à versão especificada para a atualização. Estes componentes permitem que o cluster de administrador faça a gestão dos clusters de utilizadores nessa versão.

Atualize o plano de controlo

Siga o passo seguinte para atualizar o plano de controlo do cluster de utilizadores.

  1. Atualize os componentes da CLI do Google Cloud:

    gcloud components update
    
  2. Altere a política de atualização no cluster:

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    Substitua o seguinte:

    • USER_CLUSTER_NAME: o nome do cluster de utilizadores a atualizar.

    • PROJECT_ID: o ID do projeto anfitrião da frota no qual o cluster de utilizadores é membro. Este é o projeto que especificou quando o cluster foi criado. Se criou o cluster usando gkectl, este é o ID do projeto no campo gkeConnect.projectID do ficheiro de configuração do cluster.

    • REGION: A Google Cloud região na qual a API GKE On-Prem é executada e armazena os respetivos metadados. Se criou o cluster com um cliente da API GKE On-Prem, esta é a região que selecionou quando criou o cluster. Se criou o cluster através do gkectl, esta é a região que especificou quando inscreveu o cluster na API GKE On-Prem.

  3. Atualize o painel de controlo do cluster:

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

    Substitua TARGET_VERSION pela versão para a qual quer atualizar. Selecione o patch recomendado da versão secundária de destino.

    O resultado do comando é semelhante ao seguinte:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    No exemplo de saída, a string operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 é o OPERATION_ID da operação de longa duração. Pode saber o estado da operação executando o seguinte comando noutra janela do terminal:

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

Atualize node pools

Siga estes passos para atualizar os conjuntos de nós depois de o plano de controlo do cluster de utilizadores ter sido atualizado:

  1. Obtenha uma lista de node pools no cluster de utilizador:

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. Para cada conjunto de nós que quer atualizar, execute o seguinte comando:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

Terraform

  1. Atualize os componentes da CLI do Google Cloud:

    gcloud components update
    
  2. Se ainda não o fez, inscreva o cluster de administrador na API GKE On-Prem. Depois de o cluster estar inscrito na API GKE On-Prem, não precisa de fazer este passo novamente.

  3. Transfira a nova versão dos componentes e implemente-os no cluster de administração:

    gcloud vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=TARGET_VERSION
    

    Substitua o seguinte:

    • USER_CLUSTER_NAME: o nome do cluster de utilizadores a atualizar.

    • PROJECT_ID: o ID do projeto anfitrião da frota no qual o cluster de utilizadores é membro. Este é o projeto que especificou quando o cluster foi criado. Se criou o cluster usando gkectl, este é o ID do projeto no campo gkeConnect.projectID do ficheiro de configuração do cluster.

    • REGION: A Google Cloud região na qual a API GKE On-Prem é executada e armazena os respetivos metadados. Se criou o cluster com um cliente da API GKE On-Prem, esta é a região que selecionou quando criou o cluster. Se criou o cluster através do gkectl, esta é a região que especificou quando inscreveu o cluster na API GKE On-Prem.

    • TARGET_VERSION: a versão para a qual atualizar. Selecione o patch recomendado da versão secundária de destino.

    Este comando transfere a versão dos componentes que especificar em --required-platform-version para o cluster de administrador e, em seguida, implementa os componentes. Estes componentes permitem que o cluster de administrador faça a gestão dos clusters de utilizadores nessa versão.

  4. No ficheiro main.tf que usou para criar o cluster de utilizadores, altere on_prem_version no recurso de cluster para a nova versão.

  5. Adicione o seguinte ao recurso do cluster para que apenas o plano de controlo seja atualizado:

    upgrade_policy {
      control_plane_only = true
    }
    
  6. Inicialize e crie o plano do Terraform:

    terraform init
    

    O Terraform instala todas as bibliotecas necessárias, como o Google Cloud fornecedor.

  7. Reveja a configuração e faça alterações, se necessário:

    terraform plan
    
  8. Aplique o plano do Terraform para criar o cluster de utilizadores:

    terraform apply
    

Atualize node pools

Siga estes passos para atualizar os conjuntos de nós depois de o plano de controlo do cluster de utilizador ter sido atualizado:

  1. Em main.tf no recurso para cada conjunto de nós que quer atualizar, adicione o seguinte:

    on_prem_version = "TARGET_VERSION"
    

    Por exemplo:

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = true
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. Inicialize e crie o plano do Terraform:

    terraform init
    
  3. Reveja a configuração e faça alterações, se necessário:

    terraform plan
    
  4. Aplique o plano do Terraform para criar o cluster de utilizadores:

    terraform apply
    

Resolução de problemas

Se tiver um problema após atualizar um conjunto de nós, pode reverter para a versão anterior. Para mais informações, consulte o artigo Reverta um conjunto de nós após uma atualização.