Neste tutorial, você vai conferir um caso de uso comum: a implantação canário com o Cloud Service Mesh usando 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, eliminando e desativando a versão antiga. Se ocorrer algum erro durante esse processo, será possível retornar o tráfego à 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.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso,
use a calculadora de preços.
Ao concluir este tutorial, exclua os recursos criados para evitar custos contínuos. Para mais informações, consulte Limpeza.
Antes de começar
Verifique se o faturamento foi ativado para o Google Cloud projeto. Saiba como confirmar se o faturamento está ativado para o projeto.
Provisione o Cloud Service Mesh em um cluster do GKE ou em outro cluster do Kubernetes compatível.
Clone o repositório:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples cd anthos-service-mesh-samples/docs/canary-service
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 em um cluster 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 exemplo. 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çãoproductcatalogexecutando 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 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 2m7sUm
2/2na colunaREADYindica que um pod está em execução com um proxy do Envoy injetado.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 do seu gateway de entrada:
kubectl get services -n GATEWAY_NAMESPACE
Na próxima seção, você vai conhecer a interface do Cloud Service Mesh e aprender a visualizar suas métricas.
Conferir seus serviços no Google Cloud console do
No Google Cloud console do, acesse a página Serviços do Google Kubernetes Engine (GKE) Enterprise Edition.
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 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ê 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 explica 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. 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 a ser direcionado para a 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 vão para a v1 do catálogo de produtos, e 25% vão 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 conferir a divisão de tráfego no Google Cloud console do.
Observar a divisão de tráfego no Google Cloud console do
Volte ao Google Cloud console do 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
productcatalogservicee observe as implantaçõesproductcatalogserviceeproductcatalogservice-v2.Volte para a Visualização em tabela.
Clique em
productcatalogservicena tabela de serviços.Volte para Tráfego na barra de navegação à esquerda.
Observe que o tráfego de entrada é dividido entre v1 e v2 pela porcentagem especificada no arquivo
VirtualService, e que há duas cargas de trabalho do serviço productcatalog.No lado direito da página, você verá 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, você pode concluir o
lançamento da nova versão do serviço ou reverter para a versão original do serviço
usando o VirtualService recurso.
Lançar
Depois de ficar satisfeito com o comportamento de um serviço da v2, você pode aumentar gradualmente a porcentagem de tráfego direcionado ao serviço da v2. Em algum momento, o tráfego poderá ser direcionado 100% para o novo serviço no recurso VirtualService criado acima, removendo 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
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Para evitar cobranças recorrentes na sua Google Cloud conta pelos recursos usados neste tutorial, é possível excluir o projeto ou excluir os recursos individuais.
Excluir o projeto
No Cloud Shell, exclua o projeto:
gcloud projects delete PROJECT_ID
Excluir os recursos
Se quiser evitar cobranças adicionais, exclua o cluster:
gcloud container clusters delete CLUSTER_NAME \
--project=PROJECT_ID \
--zone=CLUSTER_LOCATION
Se você registrou o cluster na frota usando gcloud container fleet memberships (em vez de --enable-fleet ou --fleet-project durante a criação do cluster), remova a assinatura desatualizada:
gcloud container fleet memberships delete MEMBERSHIP \
--project=PROJECT_ID
Se quiser manter o cluster configurado para o Cloud Service Mesh, mas remover o exemplo do Online Boutique:
Exclua os namespaces do aplicativo:
kubectl delete -f namespace onlineboutiqueSaída esperada:
namespace "onlineboutique" deletedExclua as entradas de serviço:
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend.yaml -n onlineboutique kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend-gateway.yaml -n onlineboutiqueResposta esperada:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
A seguir
- Para obter um guia geral sobre como configurar políticas
PeerAuthentication, consulte Como configurar a segurança de transporte.