Neste tutorial, você vai conhecer um caso de uso comum de implantação de 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.
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 deste tutorial, 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 está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.
Instale o Cloud Service Mesh gerenciado* em um cluster do GKE.
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
kubectl
no cluster em que você implantou o Online Boutique:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Crie o namespace para o aplicativo de amostra e o gateway de entrada:
kubectl create namespace onlineboutique
Rotule o namespace
onlineboutique
para 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.yaml
Adicione um rótulo
version=v1
à implantação doproductcatalog
executando o seguinte comando:kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutique
Veja os serviços que você implantou:
kubectl get pods -n onlineboutique
Resposta 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 2m7s
Todos os pods do aplicativo devem estar em execução, com um
2/2
na colunaREADY
. Isso indica que os pods têm um proxy sidecar do Envoy injetado com sucesso.Implante
VirtualService
eDestinationRule
para a v1 deproductcatalog
:kubectl apply -f destination-vs-v1.yaml -n onlineboutique
Observe que apenas
v1
está 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, vamos fazer um tour pela interface do Cloud Service Mesh e mostrar como visualizar as 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
productcatalogservice
vai 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-v2
introduzirá 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 onlineboutique
Verifique os pods do aplicativo.
kubectl get pods -n onlineboutique
Resposta 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 25h
Observe que agora há dois
productcatalogservices
listados.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 doproductcatalogservice
sã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 Google Cloud do GKE Enterprise.
Observar a divisão de tráfego no Console do Google Cloud
Volte ao console do 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çõesproductcatalogservice
eproductcatalogservice-v2
.Volte para Visualização de tabela. Clique em
productcatalogservice
na 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 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
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Para evitar cobranças recorrentes na conta do Google Cloud pelos recursos usados neste tutorial, é possível excluir o projeto ou excluir os recursos individuais.
Exclua 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 quiser manter o cluster e remover o aplicativo de amostra do Online Boutique:
Exclua os namespaces do aplicativo:
kubectl delete -f namespace onlineboutique
Saída esperada:
namespace "onlineboutique" deleted
Exclua 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 onlineboutique
Resposta 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.