Como fazer downgrade do Anthos Service Mesh no GKE

Neste guia, explicamos como fazer downgrade do Anthos Service Mesh de 1.6.14 para 1.5.10 nos clusters do GKE no Google Cloud.

A reimplantação dos componentes do plano de controle do Anthos Service Mesh leva cerca de 5 a 10 minutos para ser concluída. Além disso, é 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 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 dos pods e outras definições de configuração. Uma estimativa aproximada do tempo necessário para atualizar os proxies sidecar é de 100 pods por minuto.

Visão geral do downgrade

Nesta seção, descrevemos as etapas necessárias para fazer downgrade do Anthos Service Mesh.

Preparação

  1. Veja os Recursos compatíveis e este guia para conhecer os recursos e o processo de downgrade.

  2. Se você ativou recursos opcionais ao instalar a versão anterior do Anthos Service Mesh, precisa ativar os mesmos recursos quando fizer o downgrade. Para ativar recursos opcionais, adicione sinalizações --set values ou especifique a sinalização -f com um arquivo YAML ao executar o comando istioctl install.

  3. Se você estiver fazendo downgrade do Anthos Service Mesh em um cluster particular, adicione uma regra de firewall para abrir a porta 15017, caso queira usar a injeção automática de sidecar. Se você não adicionar a regra de firewall e a injeção automática de sidecar estiver ativada, receberá um erro ao implantar as cargas de trabalho. Saiba mais sobre como adicionar uma regra de firewall em Como adicionar regras de firewall para casos de uso específicos.

Fazer downgrade

  1. Siga as etapas deste guia para se preparar para o downgrade do Anthos Service Mesh.

  2. Faça downgrade do Anthos Service Mesh.

  3. Atualize proxies sidecar.

  4. Teste o aplicativo para verificar se as cargas de trabalho estão funcionando corretamente.

Como configurar o ambiente

Para instalações no Google Kubernetes Engine, siga os guias de instalação usando o Cloud Shell, uma interface de linha de comando no navegador para os recursos do Google Cloud ou no computador com Linux ou macOS:

Opção A: usar o Cloud Shell

O Cloud Shell provisiona uma máquina virtual (VM) g1-small do Compute Engine que executa um sistema operacional Linux baseado em Debian. Veja abaixo as vantagens de usar o Cloud Shell:

  • O Cloud Shell inclui as ferramentas de linha de comando gcloud, kubectl e helm necessárias.

  • O diretório $HOME do Cloud Shell tem 5 GB de espaço de armazenamento permanente.

  • É possível escolher os editores de texto:

    • Editor de código, que você acessa clicando em na parte superior da janela do Cloud Shell.

    • Emacs, Vim ou Nano, que você acessa na linha de comando do Cloud Shell.

Para usar o Cloud Shell:

  1. Acesse o Console do Google Cloud.
  2. Selecione seu projeto do Google Cloud.
  3. Clique no botão Ativar Cloud Shell na parte superior da janela do console do Google Cloud.

    Console do Google Cloud Platform

    Uma sessão do Cloud Shell é aberta dentro de um novo frame na parte inferior do console do Google Cloud, e exibe um prompt de linha de comando.

    Sessão do Cloud Shell

  4. Atualize os componentes:

    gcloud components update
    

    O comando responde com uma saída semelhante a esta:

    ERROR: (gcloud.components.update)
    You cannot perform this action because the gcloud CLI component manager
    is disabled for this installation. You can run the following command
    to achieve the same result for this installation:
    
    sudo apt-get update && sudo apt-get --only-upgrade install ...
  5. Copie o comando longo e cole-o para atualizar os componentes.

  6. Verifique se o Git está no seu caminho para que kpt possa encontrá-lo.

Opção B: usar ferramentas de linha de comando localmente

Na máquina local, instale e inicialize a gcloud CLI.

Se a gcloud CLI já estiver instalada:

  1. Faça a autenticação com a gcloud CLI:

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    
  3. Instale kubectl:

    gcloud components install kubectl
    
  4. Instale kpt:

    gcloud components install kpt
    
  5. Verifique se o Git está no seu caminho para que kpt possa encontrá-lo.

Como definir variáveis de ambiente

  1. Consiga o ID do projeto em que o cluster foi criado e o número do projeto host da frota.

    gcloud

    Execute este comando:

    gcloud projects list
    

    Console

    1. Acesse a página Painel no console do Google Cloud:

      Ir para a página "Painel"

    2. Clique na lista suspensa Selecionar de na parte superior da página. Na janela Selecionar de exibida, selecione seu projeto.

      O ID do projeto é exibido no card Informações do projeto do Painel.

  2. Crie uma variável de ambiente para o ID do projeto em que o cluster foi criado:

    export PROJECT_ID=YOUR_PROJECT_ID

  3. Crie uma variável de ambiente para o número do projeto host da frota:

    export FLEET_PROJECT_NUMBER=YOUR_FLEET_PROJECT_NUMBER

  4. Crie as variáveis de ambiente a seguir:

    • Defina o nome do cluster:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Defina CLUSTER_LOCATION como a zona ou a região do cluster:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

Como configurar credenciais e permissões

  1. Consiga as credenciais de autenticação para interagir com o cluster:

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  2. Conceda permissões de administrador de cluster ao usuário atual. Você precisa dessas permissões para criar as regras necessárias de controle de acesso baseado em papéis (RBAC, na sigla em inglês) para o Anthos Service Mesh:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

Se você observar o erro "cluster-admin-binding" already exists, poderá ignorá-lo com segurança e continuar com o cluster-admin-binding atual.

Como fazer o download do arquivo de instalação

    Linux

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  3. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.5.10-asm.2-linux.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual chamado istio-1.5.10-asm.2, que contém:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl usada para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.

  4. macOS

  5. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz
  6. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  7. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.5.10-asm.2-osx.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual chamado istio-1.5.10-asm.2, que contém:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl usada para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.

  8. Windows

  9. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip
  10. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  11. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.5.10-asm.2-win.zip

    O comando cria um diretório de instalação no seu diretório de trabalho atual chamado istio-1.5.10-asm.2, que contém:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl usada para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.

  12. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
    cd istio-1.5.10-asm.2
  13. Para facilitar, adicione as ferramentas ao diretório /bin/bin do seu PATH.
    export PATH=$PWD/bin:$PATH

Como preparar arquivos de configuração de recursos

Ao executar o comando istioctl install, especifique -f istio-operator.yaml na linha de comando. Esse arquivo contém informações sobre o projeto e o cluster exigidos pelo Anthos Service Mesh. Faça o download de um pacote que contenha istio-operator.yaml e outros arquivos de configuração de recursos para que seja possível definir as informações do projeto e do cluster.

Para começar, escolha um pacote para fazer o download com base na autoridade de certificação (CA, na sigla em inglês) que você quer usar:

  • asm: Este pacote ativa o Mesh CA, que recomendamos para novas instalações.

  • asm-citadel: você tem a opção de ativar o Citadel como o CA. Antes de escolher esse pacote, consulte Como escolher uma autoridade de certificação para mais informações.

Para preparar os arquivos de configuração de recursos, siga estas etapas:

  1. Crie um novo diretório para os arquivos de configuração do recurso do pacote Anthos Service Mesh. Recomendamos que você use o nome do cluster como o nome do diretório.

  2. Altere para o diretório em que você quer fazer o download do pacote do Anthos Service Mesh.

  3. Faça o download do pacote asm:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm asm
    
  4. Defina o ID do projeto em que o cluster foi criado:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Defina o nome do cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  6. Defina a zona ou a região padrão:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    

Como fazer downgrade do Anthos Service Mesh

Para fazer downgrade do Anthos Service Mesh:

istioctl install \
  -f asm/cluster/istio-operator.yaml \
  --set profile=asm-gcp

Verificar os componentes do plano de controle

O downgrade requer a reinstalação dos componentes do plano de controle, o que leva cerca de 5 a 10 minutos para ser concluído. Os antigos componentes do plano de controle são encerrados e, em seguida, excluídos, à medida que os novos componentes são instalados. É possível verificar o progresso observando o valor na coluna AGE das cargas de trabalho.

kubectl get pod -n istio-system

Exemplo de saída:

NAME                                     READY   STATUS        RESTARTS   AGE
istio-ingressgateway-5bfdf7c586-v6wxx    2/2     Terminating   0          25m
istio-ingressgateway-7b598c5557-b88md    2/2     Running       0          5m44s
istiod-78cdbbbdb-d7tps                   1/1     Running       0          5m16s
promsd-576b8db4d6-lqf64                  2/2     Running       1          5m26s

Neste exemplo, há duas instâncias de istio-ingressgateway. A instância com 25m na coluna AGE está sendo encerrada. Os demais componentes foram instalados recentemente.

Como atualizar proxies sidecar

Todas as cargas de trabalho que estavam em execução no cluster antes do downgrade precisam ter o proxy sidecar reinjetado para que tenham a versão atual do Anthos Service Mesh.

Com a injeção automática de sidecar, é possível reiniciar os pods atuais para atualizar os sidecars deles. A maneira como você reinicia os pods depende se eles foram criados como parte de uma implantação.

  1. Se você usou uma implantação, reinicie-a. Isso reinicia todos os pods com sidecars:

    kubectl rollout restart deployment -n YOUR_NAMESPACE

    Se você não usou uma implantação, exclua os pods. Eles serão recriados automaticamente com os sidecars:

    kubectl delete pod -n YOUR_NAMESPACE --all
  2. Confira se todos os pods no namespace têm sidecars injetados:

    kubectl get pod -n YOUR_NAMESPACE

    Neste exemplo de saída do comando anterior, observe que a coluna READY indica que há dois contêineres para cada uma das cargas de trabalho: o principal e o contêiner do proxy sidecar.

    NAME                    READY   STATUS    RESTARTS   AGE
    YOUR_WORKLOAD           2/2     Running   0          20s
    ...