Como se preparar para o upgrade
Se você tiver personalizado a instalação anterior, precisará das mesmas personalizações
quando fizer upgrade para uma nova versão do Anthos Service Mesh ou migrar do Istio. Se você
tiver personalizado a instalação adicionando a sinalização --set values
em
istioctl install
, será necessário adicionar essas configurações a um arquivo YAML IstioOperator
,
chamado de
arquivo de sobreposição. Especifique o arquivo de
sobreposição usando a opção --custom_overlay
com o nome de arquivo ao executar o
script. O script transfere o arquivo de sobreposição para istioctl install
.
O script segue o processo de upgrade de
revisão (chamado de upgrades "canário" na documentação do Istio). Com um
upgrade baseado em revisão, o script instala uma nova versão do plano de controle
com o plano de controle atual. Ao instalar a nova versão,
o script inclui um rótulo revision
que identifica o novo plano de controle.
Em seguida, você migra para a nova versão definindo o mesmo rótulo revision
nas
cargas de trabalho e realizando uma reinicialização gradual. Isso injeta os proxies novamente para que eles
usem a nova versão e configuração do Anthos Service Mesh. Com essa abordagem, é possível
monitorar o efeito do upgrade em uma pequena porcentagem das cargas de trabalho. Depois de
testar o aplicativo, será possível migrar todo o tráfego para a nova versão. Essa
abordagem é muito mais segura do que realizar um upgrade no local em que os novos componentes do
plano de controle substituem a versão anterior.
Como configurar o ambiente
Você precisa das seguintes ferramentas na máquina onde quer instalar o Anthos Service Mesh. Observe que só é possível instalar o Anthos Service malha em um cluster de usuários, não em um cluster de administrador.
- Ferramenta de linha de comando
curl
- A Google Cloud CLI.
Depois de instalar a Google Cloud CLI:
Faça a autenticação com a Google Cloud CLI:
gcloud auth login
Atualize os componentes:
gcloud components update
Instale
kubectl
:gcloud components install kubectl
Instale a versão necessária de
kpt
:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Alterne o contexto para seu cluster de usuário:
kubectl config use-context CLUSTER_NAME
Conceda permissões de administrador de cluster à sua conta de usuário (seu endereço de e-mail de login do Google Cloud). 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=USER_ACCOUNT
Como fazer o download do arquivo de instalação
Linux
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.9.8-asm.6-linux-amd64.tar.gz
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.9.8-asm.6-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.9.8-asm.6-linux-amd64.tar.gz
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.9.8-asm.6
, que contém o seguinte:- Exemplos de aplicativos no diretório
samples
. - A ferramenta de linha de comando
istioctl
que você usa para instalar o Anthos Service Mesh está no diretóriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.9.8-asm.6
macOS
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.9.8-asm.6-osx.tar.gz
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.9.8-asm.6-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.9.8-asm.6-osx.tar.gz
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.9.8-asm.6
, que contém o seguinte:- Exemplos de aplicativos no diretório
samples
. - A ferramenta de linha de comando
istioctl
que você usa para instalar o Anthos Service Mesh está no diretóriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.9.8-asm.6
Windows
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.9.8-asm.6-win.zip
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.9.8-asm.6-win.zip.1.sig openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.9.8-asm.6-win.zip
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.9.8-asm.6
, que contém o seguinte:- Exemplos de aplicativos no diretório
samples
. - A ferramenta de linha de comando
istioctl
que você usa para instalar o Anthos Service Mesh está no diretóriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.9.8-asm.6
Como preparar arquivos de configuração de recursos
Ao executar o comando istioctl install
, inclua o arquivo revisioned-custom-ingressgateway.yaml
na linha de comando. Esse arquivo permite que você controle quando alternar para a nova versão do istio-ingressgateway
depois do upgrade. Siga estas etapas para fazer o download e configurar esse arquivo:
Mude para o diretório em que você quer fazer o download do pacote
anthos-service-mesh
.Faça o download do pacote:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
Defina a tag para a versão do Anthos Service Mesh que você está instalando:
kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
Defina o webhook de validação para usar um rótulo de revisão:
kpt cfg set asm anthos.servicemesh.rev asm-198-6
Ao instalar o Anthos Service Mesh, você define um rótulo de revisão em
istiod
. Você precisa definir a mesma revisão no webhook de validação.
Como fazer upgrade do Anthos Service Mesh
Para instalar uma nova versão do Anthos Service Mesh, recomendamos que você siga o
processo de upgrade baseado na revisão (também conhecido como "upgrade canário"). Com um
upgrade baseado em revisão, você instala uma nova versão do plano de controle com
o plano de controle atual. Ao instalar a nova versão, inclua uma
etiqueta revision
que identifique a versão do novo plano de controle. Cada
revisão é uma implementação completa do plano de controle do Anthos Service Mesh com implantação e
serviço próprios.
Em seguida, você migra para a nova versão definindo a mesma etiqueta revision
em suas
cargas de trabalho para apontar para o novo plano de controle e realizando uma reinicialização gradual para
reinjetar os proxies com a nova versão do Anthos Service Mesh. Com essa abordagem,
é possível monitorar o efeito do upgrade em uma pequena porcentagem das
cargas de trabalho. Depois de testar o aplicativo, é possível migrar todo o tráfego para a
nova versão. Essa abordagem é muito mais segura do que fazer um upgrade no local em que um
novo plano de controle substitui a versão anterior do plano de controle.
Como atualizar o plano de controle
Se necessário, mude para o diretório
istio-1.9.8-asm.6
. O clienteistioctl
depende da versão. Certifique-se de usar a versão no diretórioistio-1.9.8-asm.6/bin
.Execute o seguinte comando para implantar o novo plano de controle. Se você quiser ativar um recurso opcional compatível, inclua
-f
e o nome de arquivo YAML na linha de comando a seguir. Para mais informações, consulte Como ativar recursos opcionais.bin/istioctl install \ --set profile=asm-multicloud \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --set revision=asm-198-6
O argumento --set revision
adiciona um rótulo istio.io/rev
a istiod
. Depois de executar o comando, você tem duas implantações e dois serviços de plano de controle sendo executados lado a lado:
kubectl get pods -n istio-system
Como implantar e reimplantar cargas de trabalho
Consiga o rótulo de revisão em
istiod
e oistio-ingressgateway
.kubectl get pod -n istio-system -L istio.io/rev
A saída deste comando é semelhante a:
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-198-6 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-198-6 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-186-8 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-186-8 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-198-6 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-198-6
Observe se você tem as versões antigas e novas de
istio-ingressgateway
.Se você tiver incluído a opção
revisioned-istio-ingressgateway
ao fazer upgrade, um upgrade canário doistio-ingressgateway
será feito. Nesse caso, sua saída mostrará as versões antigas e novas deistio-ingressgateway
.Se você não incluiu
revisioned-istio-ingressgateway
quando fez upgrade, um upgrade no local doistio-ingressgateway
foi feito. Nesse caso, o resultado mostrará apenas a nova versão.
Na saída, na coluna
REV
, anote o valor do rótulo de revisão da nova versão. Neste exemplo, o valor éasm-198-6
.Observe também o valor no rótulo de revisão da versão
istiod
antiga. Você precisará dele para excluir a versão antiga doistiod
ao terminar de mover as cargas de trabalho para a nova versão. No exemplo de saída, o valor do rótulo de revisão da versão antiga éasm-186-8
.
Se você tiver as versões antigas e novas do
istio-ingressgateway
, mude oistio-ingressgateway
para a nova revisão. No comando a seguir, altereREVISION
para o valor que corresponda ao rótulo de revisão da nova versão.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'
Resposta esperada:
service/istio-ingressgateway patched
Adicione o rótulo de revisão a um namespace e remova o rótulo
istio-injection
, se ele existir. No comando a seguir, altereREVISION
para o valor que corresponda à nova revisão deistiod
.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Se vir
"istio-injection not found"
na saída, poderá ignorá-la. Isso significa que o namespace não tinha o rótuloistio-injection
anteriormente. Como a injeção automática falha se um namespace tiver oistio-injection
e o rótulo de revisão, todos os comandoskubectl label
na documentação do Anthos Service Mesh incluem a remoção do rótuloistio-injection
Reinicie os pods para acionar a nova injeção:
kubectl rollout restart deployment -n NAMESPACE
Verifique se os pods estão configurados para apontar para a nova versão de
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
Teste o aplicativo para verificar se as cargas de trabalho estão funcionando corretamente.
Se você tiver cargas de trabalho em outros namespaces, repita as etapas para rotular o namespace e reiniciar os pods.
Se você achar que seu aplicativo está funcionando conforme esperado, continue com as etapas para concluir a transição para a nova versão de
istiod
. Se houver um problema com o aplicativo, siga as etapas para reverter.Execute o seguinte comando novamente para confirmar se você tem as versões antigas e novas do
istio-ingressgateway
ou apenas a nova versão. Isso determina como você processará a transição para a nova versão doistio-ingressgateway
ou a reversão para a versão antiga.kubectl get pod -n istio-system -L istio.io/rev
Concluir a transição
Se o aplicativo estiver funcionando corretamente, remova o plano de controle antigo para concluir a transição para a nova versão.
Altere para o diretório em que os arquivos do repositório
anthos-service-mesh
do GitHub estão localizados.Configure o webhook de validação para usar o novo plano de controle.
kubectl apply -f asm/istio/istiod-service.yaml
Se você tiver as versões antigas e novas do
istio-ingressgateway
, exclua a implantaçãoistio-ingressgateway
antiga. O comando executado depende se você está migrando do Istio ou fazendo upgrade de uma versão anterior do Anthos Service Mesh:Migrar
Se você tiver migrado do Istio, o
istio-ingressgateway
antigo não terá um rótulo de revisão.kubectl delete deploy/istio-ingressgateway -n istio-system
Fazer upgrade
Se você tiver feito upgrade de uma versão anterior do Anthos Service Mesh, no comando a seguir, substitua
OLD_REVISION
pelo rótulo de revisão da versão anterior doistio-ingressgateway
.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
Exclua a versão antiga de
istiod
. O comando usado depende de se você está migrando do Istio ou fazendo upgrade de uma versão anterior do Anthos Service Mesh.Migrar
Se você tiver migrado do Istio, o
istiod
antigo não terá um rótulo de revisão.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Fazer upgrade
Se você fez upgrade de uma versão anterior do Anthos Service Mesh, no comando a seguir, verifique se
OLD_REVISION
corresponde ao rótulo de revisão da versão anterior deistiod
.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
Remova a versão antiga da configuração de
IstioOperator
.kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
A saída esperada terá esta aparência:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
Reversão
Se você encontrar um problema ao testar seu aplicativo com a nova versão de
istiod
, siga estas etapas para reverter para a versão anterior:Volte para a versão antiga de
istio-ingressgateway
. O comando usado depende de você ter as versões antigas e novas doistio-ingressgateway
ou apenas a nova versão.Se você tiver as versões antigas e novas do
istio-ingressgateway
, execute o comandokubectl patch service
e substituaOLD_REVISION
pela revisão antiga.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
Se você tiver apenas a nova versão do
istio-ingressgateway
, execute o comandokubectl rollout undo
.kubectl -n istio-system rollout undo deploy istio-ingressgateway
Altere o nome do seu namespace para ativar a injeção automática com a versão anterior do
istiod
. O comando usado depende de você ter usado um rótulo de revisão ouistio-injection=enabled
com a versão anterior.Se você usou um rótulo de revisão para a injeção automática, faça o seguinte:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
Se você usou
istio-injection=enabled
:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Saída esperada:
namespace/NAMESPACE labeled
Confirme se o rótulo de revisão no namespace corresponde ao rótulo de revisão na versão anterior de
istiod
:kubectl get ns NAMESPACE --show-labels
Reinicie os pods para acionar a nova injeção de modo que os proxies tenham a versão do Istio:
kubectl rollout restart deployment -n NAMESPACE
Se você tiver as versões antigas e novas do
istio-ingressgateway
, remova a nova implantaçãoistio-ingressgateway
. Verifique se o valor deREVISION
no comando a seguir está correto.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
Remova a nova versão de
istiod
. Verifique se o valor deREVISION
no comando a seguir está correto.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
Remova a nova versão da configuração
IstioOperator
.kubectl delete IstioOperator installed-state-REVISION -n istio-system
A saída esperada será assim:
istiooperator.install.istio.io "installed-state-REVISION" deleted
Se você não incluiu a sinalização
--disable_canonical_service
, o script ativou o controlador de serviço canônico. É recomendável deixá-la ativada, mas, se você precisar desativá-la, consulte Como ativar e desativar o controlador de serviço canônico.