Neste tutorial, você vai conhecer um caso de uso comum: a implantação de um canário com o Cloud Service Mesh usando as APIs do Istio.
O que é uma implantação canário?
Uma implantação canário encaminha uma pequena porcentagem do tráfego para uma nova versão de um microsserviço e depois aumenta gradualmente essa porcentagem enquanto elimina e desativa a versão antiga. Se algo der errado durante esse processo, o tráfego poderá ser retornado à versão anterior. Com o Cloud Service Mesh, é possível rotear o tráfego para garantir que novos serviços sejam introduzidos com segurança.
Implantar Boutique on-line
Defina o contexto atual de
kubectlno cluster em que você planeja implantar o Online Boutique. O comando depende se você provisionou o Cloud Service Mesh em um cluster do GKE ou do Kubernetes fora do GKE:GKE no Google Cloud
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATIONGKE fora do Google Cloud
kubectl config use-context CLUSTER_NAMECrie o namespace para o aplicativo de amostra e o gateway de entrada:
kubectl create namespace onlineboutiqueRotule o namespace
onlineboutiquepara injetar automaticamente proxies do Envoy. Siga as etapas para ativar a injeção automática de arquivo secundário.Implante o app de amostra. Neste tutorial, você vai implantar o Online Boutique, um app de demonstração de microsserviços.
kubectl apply \ -n onlineboutique \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/shared/online-boutique/kubernetes-manifests.yamlAdicione um rótulo
version=v1à implantação doproductcatalogexecutando o seguinte comando:kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutiqueConfira os serviços que você implantou:
kubectl get pods -n onlineboutiqueSaída esperada:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-m84m6 2/2 Running 0 2m7s cartservice-c77f6b866-m67vd 2/2 Running 0 2m8s checkoutservice-654c47f4b6-hqtqr 2/2 Running 0 2m10s currencyservice-59bc889674-jhk8z 2/2 Running 0 2m8s emailservice-5b9fff7cb8-8nqwz 2/2 Running 0 2m10s frontend-77b88cc7cb-mr4rp 2/2 Running 0 2m9s loadgenerator-6958f5bc8b-55q7w 2/2 Running 0 2m8s paymentservice-68dd9755bb-2jmb7 2/2 Running 0 2m9s productcatalogservice-84f95c95ff-c5kl6 2/2 Running 0 114s recommendationservice-64dc9dfbc8-xfs2t 2/2 Running 0 2m9s redis-cart-5b569cd47-cc2qd 2/2 Running 0 2m7s shippingservice-5488d5b6cb-lfhtt 2/2 Running 0 2m7sUm
2/2na colunaREADYindica que um pod está em execução com um proxy Envoy injetado.Implante
VirtualServiceeDestinationRulepara a v1 deproductcatalog:kubectl apply -f destination-vs-v1.yaml -n onlineboutiqueObserve que apenas
v1está presente nos recursos.Confira o
Destination Rulecriado.kubectl get destinationrules -n onlineboutiqueSaída esperada:
NAME HOST AGE productcatalogservice productcatalogservice 2mConfira o
VirtualServicecriado.kubectl get virtualservices -n onlineboutiqueResultado esperado:
NAME GATEWAYS HOSTS AGE productcatalogservice ["productcatalogservice"] 2mAcesse o aplicativo no navegador usando o endereço IP externo do gateway de entrada:
kubectl get services -n GATEWAY_NAMESPACE
Na próxima seção, você vai conhecer a interface do Cloud Service Mesh e saber como visualizar suas métricas.
Conferir seus serviços no console do Google Cloud
No Google Cloud console, acesse a página Serviços da edição Enterprise do Google Kubernetes Engine (GKE).
Acessar os serviços do Google Kubernetes Engine (GKE) Enterprise Edition
Por padrão, os serviços são exibidos na visualização de Lista.
A Visão geral da tabela permite que você observe todos seus serviços, bem como métricas importantes rapidamente.
No canto superior direito, clique em Topologia. Aqui você pode ver seus serviços e a interação entre eles.
É possível expandir Serviços e ver as Solicitações por segundo de cada um deles. Para isso, passe o cursor sobre eles.
Volte para a Visualização em tabela.
Na Tabela de serviços, selecione
productcatalogservice. Você vai acessar uma visão geral do serviço.No lado esquerdo da tela, clique em Tráfego.
Verifique se 100% do tráfego de entrada para
productcatalogservicevai para o serviço de carga de trabalho.
A próxima seção mostra como criar uma v2 do serviço productcatalog.
Implantar a v2 de um serviço
Para este tutorial,
productcatalogservice-v2introduz uma latência de três segundos nas solicitações com o campoEXTRA_LATENCY. Isso simula uma regressão na nova versão do serviço.Aplique este recurso ao namespace
onlineboutique.kubectl apply -f productcatalog-v2.yaml -n onlineboutiqueVerifique os pods do aplicativo.
kubectl get pods -n onlineboutiqueResposta esperada:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-8wqfd 2/2 Running 0 25h cartservice-c77f6b866-7jwcr 2/2 Running 0 25h checkoutservice-654c47f4b6-n8c6x 2/2 Running 0 25h currencyservice-59bc889674-l5xw2 2/2 Running 0 25h emailservice-5b9fff7cb8-jjr89 2/2 Running 0 25h frontend-77b88cc7cb-bwtk4 2/2 Running 0 25h loadgenerator-6958f5bc8b-lqmnw 2/2 Running 0 25h paymentservice-68dd9755bb-dckrj 2/2 Running 0 25h productcatalogservice-84f95c95ff-ddhjv 2/2 Running 0 25h productcatalogservice-v2-6df4cf5475-9lwjb 2/2 Running 0 8s recommendationservice-64dc9dfbc8-7s7cx 2/2 Running 0 25h redis-cart-5b569cd47-vw7lw 2/2 Running 0 25h shippingservice-5488d5b6cb-dj5gd 2/2 Running 0 25hObserve que agora há dois
productcatalogserviceslistados.Use
DestinationRulepara especificar os subconjuntos de um serviço. Neste cenário, há um subconjunto da v1 e um subconjunto separado da v2 doproductcatalogservice.Observe o campo
labels. As versões doproductcatalogservicesão diferenciadas depois que o tráfego é roteado peloVirtualService.Aplique o
DestinationRule:kubectl apply -f destination-v1-v2.yaml -n onlineboutique
Dividir o tráfego entre v1 e v2
Use
VirtualServicepara definir uma pequena porcentagem do tráfego para direcionar à v2 doproductcatalogservice.O campo de subconjunto indica a versão e o campo de peso indica a divisão percentual do tráfego. 75% do tráfego vai para a v1 do catálogo de produtos, e 25% vai para a v2.
Aplique o
VirtualService:kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Se você acessar o EXTERNAL_IP da entrada do cluster, observe que, periodicamente, o carregamento do front-end está mais lento.
Na próxima seção, você vai conhecer a divisão de tráfego no console do Google Cloud .
Observar a divisão de tráfego no console do Google Cloud
Volte ao Google Cloud console e acesse a página "Serviços do GKE Enterprise". Acessar o GKE Enterprise Services
No canto superior direito, clique em Topologia.
Expanda a carga de trabalho
productcatalogservicee observe as implantaçõesproductcatalogserviceeproductcatalogservice-v2.Volte para Visualização de tabela.
Clique em
productcatalogservicena tabela de serviços.Volte para Tráfego na barra de navegação à esquerda.
O tráfego de entrada é dividido entre v1 e v2 pela porcentagem especificada no arquivo
VirtualService. Além disso, há duas cargas de trabalho do serviço productcatalog.No lado direito da página, você encontra Solicitações, Taxa de erros e Métricas de latência. Com o Cloud Service Mesh, cada serviço tem essas métricas descritas para fornecer métricas de observabilidade.
Lançar ou reverter para uma versão
Depois de observar as métricas durante uma implantação canário, conclua o
lançamento da nova versão do serviço ou reverter para a versão original
usando o recurso VirtualService.
Lançar
Quando estiver satisfeito com o comportamento de um serviço da v2, aumente gradualmente a porcentagem de tráfego direcionado a ele. Em algum momento, o tráfego poderá ser direcionado 100% para o novo serviço no recurso VirtualService criado acima. Para isso, remova a divisão de tráfego desse recurso.
Para direcionar todo o tráfego para a v2 de productcatalogservice:
kubectl apply -f vs-v2.yaml -n onlineboutique
Reverter
Se você precisar reverter para o serviço v1, aplique o destination-vs-v1.yaml anteriormente. Isso direciona o tráfego apenas para a v1 de productcatalogservice.
Para direcionar todo o tráfego para a v1 de productcatalogservice:
kubectl apply -f vs-v1.yaml -n onlineboutique