Migrar no cluster para o plano de controle gerenciado em um novo cluster
Neste tutorial, mostramos como migrar um aplicativo de um cluster do Google Kubernetes Engine (GKE) usando o Cloud Service Mesh no cluster para um novo cluster usando o Cloud Service Mesh gerenciado, a malha de serviço totalmente gerenciada e compatível com o Istio do Google.
Neste tutorial, você aprenderá a:
- Crie um novo cluster do Google Kubernetes Engine e instale o Cloud Service Mesh no cluster e o gateway de entrada do Cloud Service Mesh. Ele atuará como o cluster atual a partir do qual você quer migrar.
- Implante o aplicativo de amostra Online Boutique (link em inglês) no cluster com o Cloud Service Mesh no cluster.
- Crie outro cluster do Google Kubernetes Engine no mesmo projeto do Google Cloud.
- Provisione o Cloud Service Mesh gerenciado no segundo cluster e implante o gateway de entrada do Cloud Service Mesh.
- Implante o Online Boutique no cluster com o Cloud Service Mesh gerenciado para replicar a implantação do cluster com o Cloud Service Mesh no cluster.
- Transfira 50% do tráfego de usuários do cluster com o Cloud Service Mesh no cluster para o cluster com o Cloud Service Mesh gerenciado, usando os recursos de divisão de tráfego do Istio no cluster com o Cloud Service Mesh no cluster.
- Conclua a migração do Cloud Service Mesh no cluster para o Cloud Service Mesh gerenciado apontando a entrada do sistema de nomes de domínio (DNS) do cluster com o Cloud Service Mesh no cluster para o cluster com o Cloud Service Mesh gerenciado.
Implantação canário
A "implantação canário" é uma técnica usada no desenvolvimento de softwares para testar uma nova versão de algum software antes de lançar essa nova versão para todos os usuários. Envolvem de modo incremental o aumento da porcentagem de tráfego enviado para a nova versão. Neste tutorial, você vai configurar um novo cluster com o Cloud Service Mesh gerenciado e mudar o tráfego de usuários de forma incremental para ele. Para começar, direcione 0% do tráfego de usuários para o novo cluster, depois 50% e, por fim, 100%. Na produção, use incrementos menores e mais amplos. Se, a qualquer momento, você perceber que o novo cluster é incapaz de processar uma porcentagem de tráfego, será possível fazer a reversão reduzindo a porcentagem para 0%.
Plano de controle canário x cluster canário
Há duas estratégias usadas com frequência para migrações do Cloud Service Mesh no cluster para o Cloud Service Mesh gerenciado:
- Migração do plano de controle canário: nessa estratégia, você provisiona o Cloud Service Mesh gerenciado no mesmo cluster em que o Cloud Service Mesh no cluster está instalado.
- Migração de cluster canário: nessa estratégia, você cria um novo cluster e ativa o Cloud Service Mesh gerenciado nele.
Neste tutorial, você vai aprender sobre a estratégia de migração de clusters canário.
Custos
Neste tutorial, usamos o seguinte componente faturável do Google Cloud:
Ao concluir este tutorial, exclua os recursos criados para evitar custos contínuos. Para mais informações, consulte Limpeza.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Iniciar o Cloud Shell
Neste tutorial, você vai usar o Cloud Shell, que é um ambiente de shell hospedado no Google Cloud que permite gerenciar os recursos da plataforma,
O Cloud Shell vem pré-instalado com a ferramentas de linha de comando Google Cloud CLI, kubectl e istioctl. A CLI gcloud fornece a CLI principal para o Google Cloud.
Abra uma sessão do Cloud Shell no canto superior direito desta página, clique em terminal e em Reconhecer. Uma sessão do Cloud Shell é aberta dentro de um quadro inferior no console. Execute os seguintes comandos nessa sessão do Cloud Shell.
Fazer o download do código de exemplo
Clone os repositórios git que contêm os recursos do Kubernetes e do Istio que você usará:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurar o cluster com o Cloud Service Mesh no cluster
Criar o cluster e instalar o Cloud Service Mesh no cluster
Nesta seção, você vai criar o cluster que usa o Cloud Service Mesh no cluster. Na prática, eles seriam os clusters que você já está usando.
Substitua
PROJECT_ID
pelo ID do projeto e crie um novo cluster:gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
Renomeie o contexto do cluster para facilitar o trabalho dele:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asm
Verifique se o contexto do cluster foi renomeado:
kubectl config get-contexts --output="name"
Faça o download da versão que instala o Cloud Service Mesh 1.23.3 no diretório de trabalho atual:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
Você vai precisar digitar "y" e pressionar Enter.
A resposta é semelhante a:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Torne o script
asmcli
executável:chmod +x asmcli
Instale o Cloud Service Mesh no cluster usando
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
A ferramenta
asmcli
pode levar alguns minutos para ser concluído. A ferramenta gera mensagens informativas para que você possa acompanhar o andamento.Após a conclusão, a saída será semelhante a:
... asmcli: Successfully installed ASM.
Implantar o gateway de entrada do Cloud Service Mesh
Você vai implantar o gateway de entrada do Cloud Service Mesh em um namespace diferente chamado
asm-ingress
. Crie o namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingress
Use o rótulo
istio.io/rev=asm-1233-2
para adicionar o namespaceasm-ingress
à malha de serviço e ative a injeção automática de proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1233-2
A saída é semelhante a:
namespace/asm-ingress labeled
Implante o gateway de entrada do Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
A saída é semelhante a:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Implantar Boutique on-line
Você implantará o Online Boutique em um namespace separado chamado
onlineboutique
. Crie o namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Use o rótulo
istio.io/rev=asm-1233-2
para adicionar o namespaceonlineboutique
à malha de serviço e ative a injeção automática de proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1233-2
A resposta é semelhante a:
namespace/onlineboutique labeled
Implante os 12 serviços da Online Boutique, incluindo o gerador de carga que imita o tráfego do usuário:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Encontre o endereço IP externo do gateway de entrada do Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copie o endereço IP externo do gateway de entrada e acesse-o pelo navegador da Web. Você verá o app de exemplo Online Boutique.
Configurar o novo cluster com o Cloud Service Mesh gerenciado
Criar o cluster e provisionar o Cloud Service Mesh gerenciado
Nesta seção, você vai criar o cluster que será usado para migrar. Você provisionará o Cloud Service Mesh gerenciado e implantará o Online Boutique para replicar as implantações do cluster que usa o Cloud Service Mesh no cluster.
Crie um novo cluster:
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog
Renomeie o contexto do cluster para facilitar o trabalho dele:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Verifique se o contexto do cluster foi renomeado:
kubectl config get-contexts --output="name"
Ative o Cloud Service Mesh na frota do seu projeto. Uma frota é um agrupamento lógico de clusters do Kubernetes e outros recursos que podem ser gerenciados em conjunto.
gcloud container fleet mesh enable --project PROJECT_ID
A saída é semelhante a:
Waiting for Feature Service Mesh to be created...done.
Registre o cluster na frota do projeto:
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
A saída é semelhante a:
Waiting for membership to be created...done. Finished registering to the Fleet.
Ative o Cloud Service Mesh gerenciado no cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
A saída é semelhante a:
Waiting for Feature Service Mesh to be updated...done.
Verifique se o Cloud Service Mesh gerenciado foi provisionado para o cluster e está pronto para uso:
gcloud container fleet mesh describe --project PROJECT_ID
Pode levar cerca de 10 minutos para que o Cloud Service Mesh seja provisionado e esteja pronto para uso no cluster. Se você vir
controlPlaneManagement.state: DISABLED
oucontrolPlaneManagement.state: PROVISIONING
, será necessário executar novamente o comando anterior em intervalos de alguns minutos até vercontrolPlaneManagement.state: ACTIVE
.A saída é semelhante a:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Implantar o gateway de entrada do Cloud Service Mesh
Você vai implantar o gateway de entrada do Cloud Service Mesh em um namespace diferente chamado
asm-ingress
. Crie o namespace:kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Use o rótulo
istio.io/rev=asm-managed
para adicionar o namespaceasm-ingress
à malha de serviço e ative a injeção automática de proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Implante o gateway de entrada do Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
A saída é semelhante a:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Implantar Boutique on-line
Você implantará o Online Boutique em um namespace separado chamado
onlineboutique
. Crie o namespace:kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Use o rótulo
istio.io/rev=asm-managed
para adicionar o namespaceonlineboutique
à malha de serviço e ative a injeção automática de proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Implante os 12 serviços da Online Boutique, incluindo o gerador de carga que imita o tráfego do usuário:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Encontre o endereço IP externo do gateway de entrada do Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copie o endereço IP externo do serviço
asm-ingressgateway
e acesse-o pelo navegador da Web. Você vai encontrar o app de exemplo Online Boutique. Você vai usar o endereço IP externo na próxima seção. Portanto, copie-o para uma variável de ambiente:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Testar o cluster com o Cloud Service Mesh usando uma implantação canário
Nesta seção, você vai configurar o cluster com a Cloud Service Mesh no cluster para que 50% do tráfego de usuários para o Online Boutique seja transferido para a instância do Online Boutique no cluster com a Cloud Service Mesh gerenciada. Para fazer isso, implante dois recursos do Istio no cluster com o Cloud Service Mesh no cluster:
- um ServiceEntry para informar ao Cloud Service Mesh no cluster sobre o endpoint do Online Boutique do cluster do Cloud Service Mesh gerenciado
- um VirtualService para instruir o gateway de entrada do Cloud Service Mesh no cluster a dividir o tráfego de 50 a 50.
Defina o endereço IP do gateway de entrada do cluster gerenciado do Cloud Service Mesh dentro do recurso
ServiceEntry
:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Implante o
ServiceEntry
no cluster com o Cloud Service Mesh no cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Implante o
VirtualService
no cluster com o Cloud Service Mesh no cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Acesse o endereço IP do gateway de entrada do cluster com o Cloud Service Mesh no cluster no navegador da Web:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Atualize a página inicial do Online Boutique várias vezes e verifique o rodapé da página todas as vezes. Observe que 50% das solicitações são processadas por um pod no cluster com o Cloud Service Mesh gerenciado.
Migrar para o cluster com o Cloud Service Mesh gerenciado
Nesta seção, presumimos que você é proprietário de um nome de domínio e tem acesso às configurações de DNS (servidor de nome de domínio).
Adicione um registro A às configurações de DNS para apontar o nome de domínio (como example.com) para o endereço IP do gateway de entrada em execução no cluster com o Cloud Service Mesh no cluster.
Acesse o Online Boutique acessando o nome de domínio no seu navegador da Web.
Minimize time to live (TTL) do registro DNS para garantir que seja possível reverter rapidamente a entrada DNS se você precisar reverter.
Defina o registro A do nome de domínio como o endereço IP externo do gateway de entrada do cluster com o Cloud Service Mesh gerenciado.
Quando a migração for bem-sucedida, exclua o cluster com a Cloud Service Mesh no cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
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.
Excluir projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Excluir os recursos
Exclua o cluster com a Cloud Service Mesh gerenciada:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
A seguir
- Saiba mais sobre o Cloud Service Mesh gerenciado.
- Saiba mais sobre as práticas recomendadas de segurança do Cloud Service Mesh.