Como fazer upgrade do Anthos Service Mesh

Nesta página, descrevemos como fazer upgrade para o Anthos Service Mesh.

Os administradores da plataforma podem fazer upgrade para o Anthos Service Mesh. O upgrade para o Anthos Service Mesh é baseado em revisão ou canário, em que as versões nova e anterior do plano de controle estão sendo executadas enquanto você testa a nova versão com uma pequena porcentagem das cargas de trabalho. Essa abordagem é mais segura do que um upgrade no local, em que a nova versão do plano de controle substitui a versão anterior.

A reimplantação dos componentes do plano de controle do Anthos Service Mesh leva cerca de 5 a 10 minutos para ser concluída. Também é necessário injetar novos proxies sidecar em todas as cargas de trabalho para que eles sejam atualizados com a versão atual do Anthos Service Mesh. O tempo necessário para atualizar os proxies sidecar pode ser de cerca de 100 pods por minuto, mas isso depende de muitos fatores, como o número de pods, o número de nós, as configurações de escalonamento da implantação, os orçamentos de interrupção de pod e de outras definições de configuração.

Pré-requisitos

Antes de fazer upgrade, verifique se você atende às seguintes condições:

  • Você tem um cluster de usuário de destino gerenciado pelo cluster de administrador.
  • O cluster de usuário de destino tem uma instalação atual do Anthos Service Mesh com upgrades disponíveis.

Ver a instalação atual

Confirme se o Anthos Service Mesh está instalado no cluster.

Console

No console do centro de gerenciamento, acesse o menu do Service Mesh para ver a lista de clusters com o Anthos Service Mesh instalado.

API

É possível encontrar os seguintes recursos personalizados em um cluster de administrador que descreve a instalação atual do Anthos Service Mesh:

  • Um objeto ServiceMeshBinding que vincula um objeto ServiceMeshFeatureSpec ao ID do cluster de usuário. Execute o comando a seguir para encontrar o objeto. Como esse comando pode retornar vários objetos, é preciso encontrar o objeto com o ID do cluster de destino na especificação.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
    

    Veja um exemplo do conteúdo do objeto:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: PREVIOUS_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         - TARGET_CLUSTER_ID
    
  • Um objeto ServiceMeshFeatureSpec que define as especificações da instalação do Anthos Service Mesh. O namespace e o nome dela são referenciados no campo config.configRef, no objeto ServiceMeshBinding descrito no exemplo anterior. Execute o seguinte comando para visualizar o objeto.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
    

    Veja um exemplo do conteúdo do objeto:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name:PREVIOUS_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.7.3-asm.6
    

Instalar uma versão mais recente do Anthos Service Mesh

É possível atualizar para uma versão mais recente do Anthos Service Mesh usando o console do centro de gerenciamento ou a API.

Console

  1. No console do centro de gerenciamento, acesse o menu Painel.
  2. Clique na guia Upgrades para ver todos os upgrades disponíveis.
  3. Clique em Ver upgrades no cluster que você quer fazer upgrade.
  4. Na lista "Upgrades disponíveis", encontre a versão de destino do Anthos Service Mesh que você quer fazer upgrade e clique em Fazer upgrade para abrir a página de upgrade do Anthos Service Mesh. Página de upgrades disponíveis
  5. Confirme as informações da versão de destino, como a versão, a descrição e um link para as notas da versão e clique em Continuar.
  6. Na caixa de diálogo pop-up, clique em Fazer upgrade para começar a instalar a versão de destino do Anthos Service Mesh no cluster de destino.
  7. A página Service Mesh é aberta e é possível ver que a versão de destino está sendo instalada.

API

Execute as etapas a seguir usando comandos kubectl no cluster de administrador para instalar uma versão mais recente do Anthos Service Mesh:

  1. Crie um novo objeto ServiceMeshFeatureSpec para a nova versão. Veja uma amostra de objeto para a versão 1.8.3-asm.2:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name: NEW_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.8.3-asm.2
    
  2. Atualize o objeto ServiceMeshBinding atual para inserir uma nova entrada para vincular o novo ServiceMeshFeatureSpec ao cluster:

     apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
     kind: ServiceMeshBinding
     metadata:
      name: service-mesh-binding-sample
      namespace: anthos-management-center
     spec:
      configs:
      - configRef:
          name: PREVIOUS_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
      - configRef:
          name: NEW_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
    
  3. A versão mais recente do Anthos Service Mesh é instalada no cluster de administrador. É possível verificar se a instalação está pronta usando o seguinte comando:

     KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
    

    Substitua TARGET_CLUSTER_ID e NEW_SERVICE_MESH_SPEC pelos valores configurados no objeto ServiceMeshBinding.

    Veja um exemplo da saída:

    target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
    

    O status: true da condição Ready indica que a instalação foi concluída.

A versão anterior do Anthos Service Mesh não é removida automaticamente. É necessário migrar manualmente as cargas de trabalho para a nova versão do Anthos Service Mesh e desinstalar a versão anterior.

Migre suas cargas de trabalho

Execute as etapas a seguir no cluster de usuário para migrar suas cargas de trabalho:

  1. Receba o rótulo de revisão da versão anterior e da nova versão do Anthos Service Mesh. Para encontrar esses valores:

    Console

    1. No console do centro de gerenciamento, acesse o menu da Malha de serviço.
    2. Na lista de clusters, localize o rótulo de revisão na coluna "Revisão" do cluster.

    API

    Execute este comando:

     KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
    

    Veja um exemplo da saída:

    NAME                                READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-173-6-756d989c58-p84b9   1/1     Running   0          13h   asm-173-6
    istiod-asm-173-6-756d989c58-t6vh8   1/1     Running   0          13h   asm-173-6
    istiod-asm-183-2-76f64c6bc7-2qnxq   1/1     Running   0          17h   asm-183-2
    istiod-asm-183-2-76f64c6bc7-8nrpz   1/1     Running   0          17h   asm-183-2
    

    Na saída, o rótulo de revisão está na coluna REV. Neste exemplo, o valor é asm-183-2. Esse rótulo é usado posteriormente para acionar a injeção de sidecar na nova versão do Anthos Service Mesh.

  2. Adicionar o rótulo de revisão a um namespace: No comando a seguir, altere REVISION para o valor que corresponda ao rótulo de revisão da nova versão do Anthos Service Mesh.

    KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
    
  3. Reinicie as cargas de trabalho para acionar a nova injeção, por exemplo, para reiniciar todas as implantações em um namespace:

    KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
    
  4. Verifique se os pods estão configurados para apontar para a nova versão de istiod.

    KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    
  5. Teste o aplicativo para verificar se as cargas de trabalho estão funcionando corretamente.

  6. Se você tiver cargas de trabalho em outros namespaces, repita as etapas de 2 a 5 para rotular o namespace e reiniciar as cargas de trabalho.

Excluir a versão anterior do Anthos Service Mesh

Se o aplicativo estiver funcionando conforme o esperado, desinstale a versão anterior do Anthos Service Mesh usando o centro de gerenciamento ou a API.

Console

  1. No console do centro de gerenciamento, acesse o menu da Malha de serviço.
  2. Na coluna Versões, clique no link da versão anterior do Anthos Service Mesh.
  3. Na página Editar malha de serviço, clique em Remover malha de serviço.
  4. Antes da exclusão, uma caixa de diálogo pop-up mostra o resultado de uma verificação de confiança. A caixa de diálogo lista todos os namespaces e pods que ainda dependem da versão anterior do Anthos Service Mesh verificando o rótulo istio.io/rev em namespaces e pods. Se a verificação encontrar alguma dessas dependências, não será possível continuar até migrar esses pods ou namespaces.
  5. Se a verificação de confiança for aprovada, clique em Remover para começar a desinstalar o Anthos Service Mesh no cluster de destino.

Depois de enviar a solicitação de exclusão, a página do Service Mesh é aberta e a versão anterior do Anthos Service Mesh não fica mais visível. A desinstalação dos recursos anteriores do Anthos Service Mesh pode levar vários minutos para ser concluída.

API

  1. Antes de excluir a versão anterior do Anthos Service Mesh, verifique se não há pods ou namespaces que dependam dessa versão do Anthos Service Mesh.

    1. Execute o seguinte comando para verificar as dependências de namespace.

      KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION  
      

      Substitua PREVIOUS_REVISION pelo rótulo de revisão da versão anterior do Anthos Service Mesh.

    2. Execute o comando a seguir para verificar as dependências do pod.

      KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
      

    Caso as consultas retornem resultados vazios, avance para a próxima etapa. Caso contrário, migre a carga de trabalho primeiro antes de continuar.

  2. Atualize o objeto ServiceMeshBinding no cluster de administrador para desvincular a especificação de atributos anterior do cluster de destino. Veja um exemplo do objeto ServiceMeshBinding após remover a entrada PREVIOUS_SERVICE_MESH_SPEC:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: NEW_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         -  TARGET_CLUSTER_ID
    
  3. A remoção da versão anterior do Anthos Service Mesh será iniciada assim que o ServiceMeshBinding for atualizado. A implantação pode levar alguns minutos para ser concluída. Execute o comando a seguir para verificar se a versão anterior foi removida.

    KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
    

    Esse comando retornará um resultado vazio se a desinstalação estiver concluída.