Migre do cluster para o plano de controlo gerido num novo cluster
Este tutorial mostra como migrar uma aplicação de um cluster do Google Kubernetes Engine (GKE) que usa a malha de serviços do Google Cloud no cluster para um novo cluster que usa a malha de serviços do Google Cloud gerida, a malha de serviços totalmente gerida e compatível com o Istio da Google.
Neste tutorial:
- Crie um novo cluster do Google Kubernetes Engine e instale a Cloud Service Mesh no cluster e o gateway de entrada da Cloud Service Mesh no cluster. Este cluster vai funcionar como o cluster existente do qual quer migrar.
- Implemente a aplicação de exemplo Online Boutique no cluster com a malha de serviços na nuvem no cluster.
- Crie outro cluster do Google Kubernetes Engine no mesmo Google Cloud projeto.
- Aprovisione o Cloud Service Mesh gerido no segundo cluster e implemente o gateway de entrada do Cloud Service Mesh.
- Implemente a Online Boutique no cluster com o Cloud Service Mesh gerido para replicar a implementação do cluster com o Cloud Service Mesh no cluster.
- Desvie 50% do tráfego de utilizadores do cluster com a Cloud Service Mesh no cluster para o cluster com a Cloud Service Mesh gerida, usando as capacidades de divisão de tráfego do Istio no cluster com a Cloud Service Mesh no cluster.
- Conclua a migração do Cloud Service Mesh no cluster para o Cloud Service Mesh gerido 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 gerido.
Implementação de teste
A "implementação canária" é uma técnica usada no desenvolvimento de software para testar uma nova versão de algum software antes de lançar essa nova versão para todos os utilizadores. Envolve o aumento incremental da percentagem de tráfego enviado para a nova versão. Neste tutorial, vai configurar um novo cluster com a malha de serviços na nuvem gerida e transferir gradualmente o tráfego de utilizadores para este. Começa por direcionar 0% do tráfego de utilizadores para o novo cluster, depois 50% e, finalmente, 100%. Na produção, deve usar incrementos mais pequenos e mais frequentes. Se, em qualquer altura, notar que o novo cluster não consegue processar uma percentagem de tráfego, pode reverter a alteração reduzindo a percentagem para 0%.
Painel de controlo Canary versus cluster Canary
Existem duas estratégias usadas frequentemente para migrações da malha de serviços na nuvem no cluster para a malha de serviços na nuvem gerida:
- Migração do plano de controlo canário: nesta estratégia, aprovisiona o Cloud Service Mesh gerido no mesmo cluster em que o Cloud Service Mesh no cluster está instalado.
- Migração de cluster canário: nesta estratégia, cria um novo cluster e, em seguida, aprovisiona o Cloud Service Mesh gerido no mesmo.
Neste tutorial, vai percorrer a estratégia de migração de cluster canário.
Custos
Este tutorial usa os seguintes componentes faturáveis do Google Cloud:
Quando terminar este tutorial, pode evitar custos contínuos eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. Substitua
PROJECT_IDpelo seu 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.googMude o nome do contexto do cluster para que seja mais fácil trabalhar com o cluster:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asmVerifique se o contexto do cluster foi mudado de nome:
kubectl config get-contexts --output="name"Transfira a versão que instala o Cloud Service Mesh 1.26.7 para o diretório de trabalho atual:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.26 > asmcliÉ-lhe pedido que escreva "y" e, em seguida, prima Enter.
O resultado é semelhante ao seguinte:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701kTorne o script
asmcliexecutável:chmod +x asmcliInstale o Cloud Service Mesh no cluster com o comando
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_caA ferramenta
asmclipode demorar alguns minutos a concluir o processo. A ferramenta gera mensagens informativas para que possa acompanhar o respetivo progresso.Se for bem-sucedido, o resultado é semelhante ao seguinte:
... asmcli: Successfully installed ASM.Vai implementar o gateway de entrada do Cloud Service Mesh num espaço de nomes separado denominado
asm-ingress. Crie o espaço de nomes:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingressUse a etiqueta
istio.io/rev=asm-1267-1para adicionar o espaço de nomesasm-ingressao serviço de malha e ativar a injeção automática de proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1267-1O resultado é semelhante ao seguinte:
namespace/asm-ingress labeledImplemente 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.yamlO resultado é semelhante ao seguinte:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway createdVai implementar a Online Boutique num namespace separado denominado
onlineboutique. Crie o espaço de nomes:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutiqueUse a etiqueta
istio.io/rev=asm-1267-1para adicionar o espaço de nomesonlineboutiqueao serviço de malha e ativar a injeção automática de proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1267-1O resultado é semelhante ao seguinte:
namespace/onlineboutique labeledImplemente os 12 serviços da Online Boutique, incluindo o gerador de carga que imita o tráfego de utilizadores:
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.yamlObtenha 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 aceda ao mesmo através do seu navegador de Internet. É apresentada a app de exemplo Online Boutique.
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.googMude o nome do contexto do cluster para que seja mais fácil trabalhar com o cluster:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csmVerifique se o contexto do cluster foi mudado de nome:
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 geridos em conjunto.
gcloud container fleet mesh enable --project PROJECT_IDO resultado é semelhante ao seguinte:
Waiting for Feature Service Mesh to be created...done.Registe 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_IDO resultado é semelhante ao seguinte:
Waiting for membership to be created...done. Finished registering to the Fleet.Ative o Cloud Service Mesh gerido no cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_IDO resultado é semelhante ao seguinte:
Waiting for Feature Service Mesh to be updated...done.Verifique se o Cloud Service Mesh gerido foi aprovisionado para o cluster e se está pronto a ser usado:
gcloud container fleet mesh describe --project PROJECT_IDO Cloud Service Mesh pode demorar cerca de 10 minutos a ser aprovisionado e a ficar pronto a usar no cluster. Se vir
controlPlaneManagement.state: DISABLEDoucontrolPlaneManagement.state: PROVISIONING, tem de executar novamente o comando anterior a cada poucos minutos até vercontrolPlaneManagement.state: ACTIVE.O resultado é semelhante ao seguinte:
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'Vai implementar o gateway de entrada do Cloud Service Mesh num espaço de nomes separado denominado
asm-ingress. Crie o espaço de nomes:kubectl \ --context cluster-with-csm \ create namespace asm-ingressUse a etiqueta
istio.io/rev=asm-managedpara adicionar o espaço de nomesasm-ingressà malha de serviços e ativar a injeção automática de proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'Implemente 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.yamlO resultado é semelhante ao seguinte:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configuredVai implementar a Online Boutique num namespace separado denominado
onlineboutique. Crie o espaço de nomes:kubectl \ --context cluster-with-csm \ create namespace onlineboutiqueUse a etiqueta
istio.io/rev=asm-managedpara adicionar o espaço de nomesonlineboutiqueao serviço de malha e ativar a injeção automática de proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'Implemente os 12 serviços da Online Boutique, incluindo o gerador de carga que imita o tráfego de utilizadores:
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.yamlObtenha 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-ingressgatewaye aceda ao mesmo através do navegador de Internet. É apresentada a app de exemplo Online Boutique. Vai usar o endereço IP externo na secção seguinte, por isso, 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}' \ )- Uma ServiceEntry para informar o Cloud Service Mesh no cluster sobre o ponto final da Online Boutique do cluster do Cloud Service Mesh gerido
- Um VirtualService para indicar ao gateway de entrada do Cloud Service Mesh no cluster que divida o tráfego 50/50.
Defina o endereço IP do gateway de entrada do cluster do Cloud Service Mesh gerido no 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.yamlImplemente o
ServiceEntryno cluster com a malha de serviços na nuvem no cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlImplemente o
VirtualServiceno cluster com a malha de serviços na nuvem 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.yamlVisite o endereço IP do gateway de entrada do cluster com o Cloud Service Mesh no cluster no seu navegador de Internet:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get serviceAtualize a página inicial da loja online várias vezes e verifique o rodapé da página de cada vez. Repare que 50% dos pedidos são processados por um Pod no cluster com o Cloud Service Mesh gerido.
Adicione um registo A às definiçõ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 a malha de serviços na nuvem no cluster.
Aceda à Online Boutique visitando o nome do domínio no seu navegador de Internet.
Minimize o tempo de vida (TTL) do registo de DNS para garantir que pode reverter rapidamente a entrada de DNS se precisar de reverter.
Defina o registo A do seu nome de domínio para o endereço IP externo do gateway de entrada do cluster com o Cloud Service Mesh gerido.
Quando a migração for bem-sucedida, elimine o cluster com o Cloud Service Mesh no cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID- 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.
- Saiba mais sobre a Managed Cloud Service Mesh.
- Saiba mais sobre as práticas recomendadas de segurança da Cloud Service Mesh.
Inicie o Cloud Shell
Neste tutorial, vai usar o Cloud Shell, que é um ambiente de shell alojado no Google Cloud que lhe permite gerir os seus recursos doGoogle Cloud .
O Cloud Shell vem pré-instalado com as ferramentas de linha de comandos CLI do Google Cloud, 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, de seguida, clique em Confirmar. É aberta uma sessão do Cloud Shell num frame na parte inferior da página. Conclua os seguintes comandos nessa sessão do Cloud Shell.
Transfira o exemplo de código
Clone os repositórios git que contêm os recursos do Kubernetes e do Istio que vai usar:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configure o cluster com o Cloud Service Mesh no cluster
Crie o cluster e instale a malha de serviço na nuvem no cluster
Na secção, cria o cluster que usa a malha de serviços do Google Cloud no cluster. Na prática, estes seriam os clusters que já está a usar.
Implemente o gateway de entrada do Cloud Service Mesh
Implemente a loja online
Configure o novo cluster com o Cloud Service Mesh gerido
Crie o cluster e aprovisione a malha de serviço na nuvem gerida
Nesta secção, cria o cluster para o qual vai migrar. Vai aprovisionar o Cloud Service Mesh gerido e implementar a Online Boutique para replicar as implementações do cluster que usa o Cloud Service Mesh no cluster.
Implemente o gateway de entrada do Cloud Service Mesh
Implemente a loja online
Teste o cluster com a malha de serviços na nuvem através de uma implementação
Nesta secção, configura o cluster com a Cloud Service Mesh no cluster de modo que 50% do tráfego de utilizadores para a Online Boutique seja transferido para a instância da Online Boutique no cluster com a Cloud Service Mesh gerida. Para o conseguir, implementa dois recursos do Istio no cluster com a malha de serviços do Google Cloud no cluster:
Migre para o cluster com o Cloud Service Mesh gerido
Esta secção pressupõe que é proprietário de um nome de domínio e tem acesso às respetivas definições de DNS (servidor de nomes do domínio).
Limpar
Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Eliminar projeto
Elimine os recursos
Elimine o cluster com a malha de serviços na nuvem gerida:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID