Neste tutorial, você vai conhecer um caso de uso comum para implantar uma implantação canário com o Cloud Service Mesh.
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 amplia gradualmente toda a base de usuários, eliminando e desativando a versão antiga. Se ocorrer algum erro durante esse processo, será possível retornar o tráfego à versão antiga. 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ê implantou o Online Boutique:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATIONCrie 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ê implantará o Online Boutique, um app de demonstração de microsserviço.
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 onlineboutiqueVeja os serviços que você implantou:
kubectl get pods -n onlineboutiqueResposta 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 2m7sTodos os pods do aplicativo devem estar em execução, com um
2/2na colunaREADY. Isso indica que os pods têm um proxy sidecar do Envoy injetado com sucesso.Implante
VirtualServiceeDestinationRulepara a v1 deproductcatalog:kubectl apply -f destination-vs-v1.yaml -n onlineboutiqueObserve que apenas
v1está presente nos recursos.Acesse o aplicativo no navegador usando o endereço IP externo da entrada:
kubectl get services -n GATEWAY_NAMESPACE
Na próxima seção, você conhecerá a interface do Cloud Service Mesh e verá como visualizar suas métricas.
Implante e veja seus serviços no console do Google Cloud
No console do Google Cloud , acesse a página Serviços do GKE Enterprise.
Por padrão, os serviços são exibidos na visualização da Tabela.
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 os 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ê 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-v2introduzirá uma latência de três segundos nas solicitações com o campoEXTRA_LATENCY.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.O
DestinationRuleé como especificar os subconjuntos de um serviço. Neste cenário, há um subconjunto da v1 e 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
Tráfego dividido entre v1 e v2
VirtualServiceé a forma como você apresenta 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 irá para a v1 do catálogo de produtos, e 25% irá 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 analisar a divisão de tráfego no console do GKE Enterprise Google Cloud .
Observar a divisão de tráfego no console do Google Cloud
Volte ao console Google Cloud e acesse a página de serviços do GKE Enterprise Acessar serviços do GKE Enterprise
No canto superior direito, clique em Topologia.
Expanda a carga de trabalho
productcatalogservice. Você verá 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 tela, você verá métricas "Solicitações", "Taxa de erros" e "Latência". Com o Cloud Service Mesh, cada serviço terá essas métricas descritas para fornecer a você observabilidade.

Lançar ou reverter para uma versão
Após observar as métricas durante uma implantação canário, faça o lançamento no novo serviço ou reverta o serviço antigo com o recurso VirtualService.
Lançamento
Quando estiver satisfeito com o comportamento de um serviço da v2, aumente gradualmente o comportamento do tráfego para o serviço da v2. Em algum momento, o tráfego poderá ser direcionado 100% para o novo serviço.
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 direcionará 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