Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo aborda as experiências de atualização para o complemento de malha de serviço baseado em Istio para o AKS (Serviço de Kubernetes do Azure).
Anúncios sobre as versões de novas revisões secundárias ou patches para o complemento de malha de serviço baseado em Istio são publicados nas notas de versão do AKS. Para saber mais sobre o cronograma de lançamento e o suporte para revisões de complementos da malha de serviço, leia a política de suporte.
Atualização de revisão secundária
O complemento do Istio permite atualizar a revisão secundária usando o processo de atualização canário. Quando uma atualização é iniciada, o painel de controle da nova revisão (canário) é implantado junto com o painel de controle da revisão inicial (estável). Em seguida, é possível distribuir manualmente cargas de trabalho do plano de dados ao usar ferramentas de monitoramento para acompanhar a integridade das cargas de trabalho durante esse processo. Se você não tiver problemas com a integridade das cargas de trabalho, será possível concluir a atualização para que apenas a nova revisão permaneça no cluster. Caso contrário, você pode reverter para a revisão anterior do Istio.
As atualizações disponíveis dependem se a revisão atual do Istio e a versão do cluster AKS são suportadas:
- Você pode atualizar para a próxima revisão suportada (
n+1) ou pular uma e atualizar paran+2, desde que ambas sejam suportadas e compatíveis com a versão do cluster. - Se tanto a sua revisão atual (
n) quanto a próxima revisão (n+1) não forem suportadas, você só poderá atualizar para a revisão suportada mais próxima (n+2ou superior), mas não além dela. - Se a versão do cluster e a revisão do Istio não forem suportadas, a versão do cluster deverá ser atualizada antes que uma atualização do Istio possa ser iniciada.
Observação
Depois que uma versão do AKS ou uma revisão de malha ficar fora da janela de suporte, a atualização de qualquer versão se tornará propensa a erros. Embora essas atualizações possam ser recuperadas em uma versão com suporte, o processo de atualização e as próprias versões sem suporte não são compatíveis com a Microsoft. Recomendamos enfaticamente manter a versão do AKS e a revisão da malha atualizadas para evitar cenários não suportados. Consulte o calendário de suporte do complemento Istio para datas estimadas de lançamento e fim de vida útil e as notas de versão do Istio upstream para a nova revisão para alterações notáveis.
O exemplo a seguir explica como fazer upgrade da revisão asm-1-23 para a asm-1-24 com todas as cargas de trabalho no namespace default. As etapas são iguais para todos os upgrades secundários e podem ser seguidas com qualquer número de namespaces.
Use o comando az aks mesh get-upgrades para verificar quais revisões estão disponíveis para o cluster como destinos de atualização:
az aks mesh get-upgrades --resource-group $RESOURCE_GROUP --name $CLUSTERSe você espera ver uma revisão mais recente não retornada por esse comando, é aconselhável atualizar o cluster do AKS primeiro para que ele seja compatível com a revisão mais recente.
Caso tenha configurado a configuração de malha para a revisão de malha existente no seu cluster, precisará criar um ConfigMap separado correspondente à nova revisão no namespace
aks-istio-systemantes de iniciar a atualização do canário, na próxima etapa. Essa configuração é aplicável no momento em que o plano de controle da nova revisão é implantado no cluster. Encontre mais detalhes aqui.Inicie uma atualização canária da revisão
asm-1-23para aasm-1-24usando az aks mesh upgrade start:az aks mesh upgrade start --resource-group $RESOURCE_GROUP --name $CLUSTER --revision asm-1-24Uma atualização canária significa que o painel de controle 1.24 está implantado junto ao painel de controle 1.23. Eles continuarão coexistindo até que você conclua ou reverta a atualização.
Enquanto uma atualização canary estiver em andamento, a revisão mais recente será considerada a revisão padrão usada para validação dos recursos do Istio.
Opcionalmente, é possível usar as tags de revisão para atualizar o plano de dados para a nova revisão sem a necessidade de rotular novamente cada namespace de maneira manual. Rotular novamente namespaces manualmente ao movê-los para uma nova revisão pode ser entediante e levar a erros. As tags de revisão resolvem esse problema porque atuam como identificadores estáveis que apontam para as revisões.
Em vez de rotular cada namespace novamente, é possível usar um operador de cluster que altera a tag para apontar para uma nova revisão. Todos os namespaces rotulados com essa tag são atualizados ao mesmo tempo. No entanto, ainda é necessário reiniciar as cargas de trabalho para garantir que a versão correta dos sidecars
istio-proxyseja injetada.Para usar as tags de revisão durante um upgrade:
Crie uma tag de revisão para a revisão inicial. Neste exemplo, ela é chamada de
prod-stable:istioctl tag set prod-stable --revision asm-1-23 --istioNamespace aks-istio-systemCrie uma tag de revisão para a revisão instalada durante o upgrade. Neste exemplo, ela é chamada de
prod-canary:istioctl tag set prod-canary --revision asm-1-24 --istioNamespace aks-istio-systemRotule os namespaces de aplicativo para fazer o mapeamento para as tags de revisão:
# label default namespace to map to asm-1-23 kubectl label ns default istio.io/rev=prod-stable --overwriteTambém é possível rotular os namespaces com
istio.io/rev=prod-canarypara a revisão mais recente. No entanto, as cargas de trabalho nesses namespaces não são atualizadas para um novo sidecar até que sejam reiniciadas.Se uma nova aplicação for criada em um namespace após ter sido rotulada, um sidecar correspondente à tag de revisão desse namespace será injetado.
Verifique se os pods do painel de controle correspondem aos dois e tanto
asm-1-23quantoasm-1-24existem:Verificar pods
istiod:kubectl get pods -n aks-istio-systemExemplo de saída:
NAME READY STATUS RESTARTS AGE istiod-asm-1-23-55fccf84c8-dbzlt 1/1 Running 0 58m istiod-asm-1-23-55fccf84c8-fg8zh 1/1 Running 0 58m istiod-asm-1-24-f85f46bf5-7rwg4 1/1 Running 0 51m istiod-asm-1-24-f85f46bf5-8p9qx 1/1 Running 0 51mSe a entrada estiver habilitada, verifique os pods de entrada:
kubectl get pods -n aks-istio-ingressExemplo de saída:
NAME READY STATUS RESTARTS AGE aks-istio-ingressgateway-external-asm-1-23-58f889f99d-qkvq2 1/1 Running 0 59m aks-istio-ingressgateway-external-asm-1-23-58f889f99d-vhtd5 1/1 Running 0 58m aks-istio-ingressgateway-external-asm-1-24-7466f77bb9-ft9c8 1/1 Running 0 51m aks-istio-ingressgateway-external-asm-1-24-7466f77bb9-wcb6s 1/1 Running 0 51m aks-istio-ingressgateway-internal-asm-1-23-579c5d8d4b-4cc2l 1/1 Running 0 58m aks-istio-ingressgateway-internal-asm-1-23-579c5d8d4b-jjc7m 1/1 Running 0 59m aks-istio-ingressgateway-internal-asm-1-24-757d9b5545-g89s4 1/1 Running 0 51m aks-istio-ingressgateway-internal-asm-1-24-757d9b5545-krq9w 1/1 Running 0 51mObserve que os pods de gateway de entrada de ambas as revisões são implantados lado a lado. No entanto, o serviço e seu IP permanecem imutáveis.
Rotule novamente o namespace para que todos os novos pods sejam mapeados para o sidecar do Istio associado à nova revisão e ao painel de controle associado:
Ao usar tags de revisão, substitua a tag
prod-stableem si para alterar o mapeamento dela:istioctl tag set prod-stable --revision asm-1-24 --istioNamespace aks-istio-system --overwriteVerifique os mapeamentos entre tags e revisões:
istioctl tag listAmbas as tags devem apontar para a revisão recém-instalada:
TAG REVISION NAMESPACES prod-canary asm-1-24 default prod-stable asm-1-24 ...Neste caso, não é preciso rotular novamente cada namespace de maneira individual.
Se você não usar tags de revisão, será preciso rotular novamente os namespaces do plano de dados para apontar para a nova revisão:
kubectl label namespace default istio.io/rev=asm-1-24 --overwrite
A nova rotulagem não afeta suas cargas de trabalho até que elas sejam reiniciadas.
Substitua individualmente cada uma das cargas de trabalho do aplicativo reiniciando-as. Por exemplo:
kubectl rollout restart deployment <deployment name> -n <deployment namespace>Verifique as ferramentas e painéis de monitoramento para determinar se suas cargas de trabalho estão todas em execução em um estado íntegro após a reinicialização. Com base nos resultados, você tem duas opções:
Conclua a atualização do canário: Se você estiver satisfeito com o funcionamento de todas as cargas de trabalho, conforme o esperado, poderá concluir a atualização canary. A conclusão da atualização remove o painel de controle da revisão anterior e deixa o painel de controle da nova revisão no cluster para trás. Execute o seguinte comando para concluir a atualização canário:
az aks mesh upgrade complete --resource-group $RESOURCE_GROUP --name $CLUSTERReverter atualização canário: Caso observe algum problema com a integridade de suas cargas de trabalho, você pode reverter para a versão anterior do Istio:
Relabelar o namespace para a revisão anterior: Ao usar tags de revisão:
istioctl tag set prod-stable --revision asm-1-23 --istioNamespace aks-istio-system --overwriteCaso contrário, se você não estiver usando tags de revisão:
kubectl label namespace default istio.io/rev=asm-1-23 --overwriteReverta as cargas de trabalho para usar o sidecar correspondente à revisão anterior do Istio reiniciando essas cargas de trabalho novamente:
kubectl rollout restart deployment <deployment name> -n <deployment namespace>Reverter o painel de controle para a revisão anterior:
az aks mesh upgrade rollback --resource-group $RESOURCE_GROUP --name $CLUSTER
A tag de revisão
prod-canarypode ser removida:istioctl tag remove prod-canary --istioNamespace aks-istio-systemSe a configuração de malha foi configurada anteriormente para as revisões, agora você pode excluir o ConfigMap para a revisão que foi removida do cluster durante a conclusão/reversão.
Atualizações de revisão menores com gateways de entrada e saída
Se você estiver usando gateways de entrada ou gateways de saída do Istio e estiver realizando uma atualização de revisão menor, lembrem-se de que os pods/implantações do gateways de entrada e saída do Istio são implantados por revisão, mas o serviço é compartilhado entre as duas revisões.
Oferecemos um serviço LoadBalancer único para todos os pods do gateway de entrada em várias revisões, de modo que o endereço IP externo/interno dos gateways de entrada permaneça inalterado durante todo o processo de atualização. Assim, durante a atualização canary, quando duas revisões existem simultaneamente no cluster, os pods do gateway de entrada de ambas as revisões atendem o tráfego de entrada.
Da mesma forma, durante uma atualização do canary, todos os pods de um gateway de saída em ambas as revisões serão atendidos por um serviço ClusterIP único.
Pequenas atualizações de revisão com personalizações de dimensionamento automático de pods horizontais
Se você tiver personalizado as configurações de dimensionamento automático horizontal de pods (HPA) para o Istiod ou os gateways de entrada, observe o seguinte comportamento em relação à forma como as configurações de HPA são aplicadas em ambas as revisões para manter a consistência durante uma atualização canary:
- Se você atualizar a especificação HPA antes de iniciar uma atualização, as configurações da revisão existente (estável) serão aplicadas aos HPAs da revisão canary quando o novo plano de controle for instalado.
- Se você atualizar a especificação HPA enquanto uma atualização canary estiver em andamento, a especificação HPA da revisão estável terá precedência e será aplicada à HPA da revisão canary.
- Se você atualizar o HPA da revisão estável durante uma atualização, a especificação do HPA da revisão canary será atualizada para refletir as novas configurações aplicadas à revisão estável.
- Se você atualizar o HPA da revisão do canário durante uma atualização, a especificação do HPA da revisão do canário será revertida para a especificação do HPA da revisão estável.
Atualização de versão do patch
- As informações de disponibilidade da versão do patch de complemento Istio são publicadas nas notas de versão do AKS.
- Os patches são distribuídos automaticamente para pods istiod e de entrada como parte dessas versões do AKS, que respeitam a
defaultjanela de manutenção planejada configurada para o cluster. - O usuário precisa iniciar patches para o proxy Istio em suas cargas de trabalho reiniciando os pods para reinjeção:
Verifique a versão do proxy Istio destinada a pods novos ou reiniciados. Essa versão é a mesma que a versão dos pods de entrada istiod e Istio ingress depois que eles foram corrigidos:
kubectl get cm -n aks-istio-system -o yaml | grep "mcr.microsoft.com\/oss\/istio\/proxyv2"Exemplo de saída:
"image": "mcr.microsoft.com/oss/istio/proxyv2:1.23.0-distroless", "image": "mcr.microsoft.com/oss/istio/proxyv2:1.23.0-distroless"Verifique a versão da imagem de proxy do Istio para todos os pods em um namespace:
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\ sort |\ grep "mcr.microsoft.com\/oss\/istio\/proxyv2"Exemplo de saída:
productpage-v1-979d4d9fc-p4764: docker.io/istio/examples-bookinfo-productpage-v1:1.23.0, mcr.microsoft.com/oss/istio/proxyv2:1.23.0-distrolessPara disparar a reinjeção, reinicie as cargas de trabalho. Por exemplo:
kubectl rollout restart deployments/productpage-v1 -n defaultPara verificar se eles estão agora nas versões mais recentes, marque a versão da imagem de proxy do Istio novamente para todos os pods no namespace:
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\ sort |\ grep "mcr.microsoft.com\/oss\/istio\/proxyv2"Exemplo de saída:
productpage-v1-979d4d9fc-p4764: docker.io/istio/examples-bookinfo-productpage-v1:1.2.0, mcr.microsoft.com/oss/istio/proxyv2:1.24.0-distroless
Observação
Em caso de problemas encontrados durante as atualizações, consulte o artigo sobre solução de problemas de atualizações de revisão de malha