Atualize um cluster

Este documento explica como atualizar a versão do Kubernetes de um cluster do Kubernetes isolado do Google Distributed Cloud (GDC). Tem de planear atualizações de rotina para os seus clusters para garantir que incorporam as funcionalidades e as correções mais recentes do Kubernetes.

Este documento destina-se a públicos-alvo como administradores de TI, engenheiros de segurança e administradores de rede no grupo de administradores da plataforma, que são responsáveis pela gestão de recursos do Kubernetes na respetiva organização. Para mais informações, consulte o artigo Públicos-alvo da documentação do GDC isolado.

Antes de começar

Para concluir as tarefas neste documento, tem de pedir as autorizações necessárias e preparar o seu ambiente.

Peça funções de IAM

Tem de ter funções específicas para receber as autorizações de que precisa para atualizar o seu cluster do Kubernetes. Tem de pedir funções com âmbito no seu projeto e organização.

Funções na organização

Para listar as versões de atualização disponíveis para um cluster do Kubernetes, peça ao administrador de IAM da organização para lhe conceder a função Administrador do cluster do utilizador (user-cluster-admin). Esta função não está associada a um espaço de nomes.

Se gerir um cluster padrão e não conseguir receber a função Administrador do cluster do utilizador do seu grupo de administradores da plataforma, tem de pedir que lhe forneçam a lista de versões de atualização do Kubernetes disponíveis.

Funções do projeto

Para criar, eliminar, editar ou ver atualizações de clusters, peça ao administrador de IAM do projeto para lhe conceder a função Administrador do cluster padrão (standard-cluster-admin). Esta função está associada ao espaço de nomes do projeto.

Prepare o seu ambiente

Para executar comandos num cluster do Kubernetes através da API, certifique-se de que tem os seguintes recursos:

  • Transfira e instale a CLI gdcloud.

  • Instale a CLI kubectl.

  • Localize o nome do cluster do Kubernetes ou pergunte a um membro do grupo de administradores da plataforma qual é o nome do cluster.

  • Use o nome do cluster do Kubernetes para substituir CLUSTER_NAME nestas instruções.

  • Inicie sessão e gere o ficheiro kubeconfig para o servidor da API de gestão.

  • Use o caminho kubeconfig do servidor da API de gestão para substituir MANAGEMENT_API_SERVER nestas instruções.

Atualize um cluster do Kubernetes

Use a API UserClusterUpgradeRequest para atualizar um cluster do Kubernetes existente.

Para atualizar um cluster do Kubernetes através da API, siga estes passos:

  1. Liste as versões de atualização do Kubernetes disponíveis imprimindo o valor kubernetesVersion dos objetos UserClusterMetadata:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'
    

    Substitua MANAGEMENT_API_SERVER pelo caminho para o ficheiro kubeconfig do servidor da API de gestão.

    O comando devolve uma lista das versões do Kubernetes disponíveis:

    TARGET_VERSION
    1.30.1000-gke.85
    
  2. Anote a versão do Kubernetes da saída anterior para a qual quer atualizar o cluster. A targetVersion que especificar no pedido de atualização no passo seguinte tem de ser uma destas versões disponíveis.

  3. Peça a atualização do cluster criando um recurso UserClusterUpgradeRequest:

      kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
      apiVersion: cluster.gdc.goog/v1
      kind: UserClusterUpgradeRequest
      metadata:
        name: CLUSTER_NAME
        namespace: CLUSTER_NAMESPACE
      spec:
        clusterRef:
          name: CLUSTER_NAME
        targetVersion: TARGET_VERSION
      EOF
    

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho para o ficheiro kubeconfig do servidor da API de gestão.
    • CLUSTER_NAME: o nome do cluster do Kubernetes a atualizar, como user-vm-2.
    • CLUSTER_NAMESPACE: o espaço de nomes do cluster do Kubernetes. Para clusters partilhados, use o espaço de nomes platform. Para clusters padrão, use o espaço de nomes do projeto do cluster.
    • TARGET_VERSION: a versão de destino da atualização identificada no passo anterior, como 1.30.1000-gke.85.

    O tempo médio de atualização de um cluster do Kubernetes é de, aproximadamente, 20 minutos.

  4. Valide a atualização do cluster monitorizando o recurso UserClusterUpgradeRequest:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        describe userclusterupgraderequest CLUSTER_NAME \
        -n CLUSTER_NAMESPACE
    

    Substitua o seguinte:

    • MANAGEMENT_API_SERVER: o caminho para o ficheiro kubeconfig do servidor da API de gestão.
    • CLUSTER_NAME: o nome do cluster do Kubernetes a atualizar, como user-vm-2.
    • CLUSTER_NAMESPACE: o espaço de nomes do cluster do Kubernetes. Para clusters partilhados, use o espaço de nomes platform. Para clusters padrão, use o espaço de nomes do projeto do cluster.

    Analise a secção Spec da saída. Contém Current Version e Target Version. A atualização ainda está em curso se a Current Version e a Target Version forem diferentes.

    Spec:
      ...
      Current Version: 1.29.500-gke.60
      Target Version: 1.30.1000-gke.85
    Status:
      Conditions:
      - Message: Upgrade is in progress
        Reason: UpgradeInProgress
        Status: "False"
        Type: Succeeded
    

    A atualização está concluída e foi bem-sucedida quando a condição Succeeded tem o estado True e a Current Version corresponde à Target Version.

    Se a condição Succeeded tiver o estado False, a atualização falhou. Se encontrar erros relacionados com a atualização do cluster do Kubernetes, contacte o grupo de operadores de infraestrutura para receber mais assistência.

Valide os subcomponentes do cluster após a atualização

Depois de o cluster do Kubernetes ser atualizado com êxito, recomendamos que confirme que todos os subcomponentes do cluster estão em bom estado.

Verifique se existem falhas de subcomponentes no cluster:

  1. Valide se não existem subcomponentes que apresentem uma mensagem ReconciliationError:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "ReconciliationError") |
        select(.status.featureDisabled != true) |  "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    Se a saída devolver subcomponentes, contacte o grupo de operadores de infraestrutura para receber mais assistência.

  2. Valide se não existem subcomponentes que apresentem uma mensagem Reconciling:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "Reconciling") |
        select(.status.featureDisabled != true) | select( "\(.status)" |
        contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    Para clusters do Kubernetes com três nós do plano de controlo e três nós de trabalho, o tempo de atualização é de, aproximadamente, 20 minutos. Se continuar a ver subcomponentes no estado Reconciling após 20 minutos, contacte o grupo de operadores de infraestrutura para receber mais assistência.

O que se segue?