Migrar no cluster para gerenciado, em um novo cluster

do tipo

Neste tutorial, mostramos como migrar um aplicativo de um cluster do Google Kubernetes Engine (GKE) usando o Anthos Service Mesh no cluster para um novo cluster usando o Anthos Service Mesh gerenciado: o serviço totalmente gerenciado e compatível com o Istio{101 } 101}malha.

Neste tutorial, você aprenderá a:

  1. Crie um novo cluster do Google Kubernetes Engine e instale no cluster o Anthos Service Mesh e o gateway de entrada do Anthos Service Mesh. Ele atuará como o cluster atual a partir do qual você quer migrar.
  2. Implante o aplicativo de amostra Online Boutique (em inglês) no cluster com o Anthos Service Mesh no cluster.
  3. Crie outro cluster do Google Kubernetes Engine no mesmo projeto do Google Cloud.
  4. Ative o Anthos Service Mesh gerenciado no segundo cluster e implante o gateway de entrada do Anthos Service Mesh.
  5. Implantar o Online Boutique no cluster com o Anthos Service Mesh gerenciado para replicar a implantação do cluster com o Anthos Service Mesh no cluster.
  6. Transfira 50% do tráfego de usuários do cluster com o Anthos Service Mesh no cluster para o cluster com o Anthos Service Mesh gerenciado, usando os recursos de divisão de tráfego do Istio no cluster com o Anthos Service Mesh no cluster.
  7. Conclua a migração do Anthos Service Mesh no cluster para o Anthos Service Mesh gerenciado apontando a entrada do sistema de nomes de domínio (DNS) para o cluster com o Anthos Service Mesh gerenciado.

O tráfego de usuários é dividido de 50 a 50 entre um cluster com o Anthos Service Mesh no cluster e um cluster com o Anthos Service Mesh gerenciado. Cada cluster contém a própria implantação do on-line
Boutique.

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ê configurará um novo cluster com a malha de serviço do Anthos 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 Anthos Service Mesh no cluster para o Anthos Service Mesh gerenciado:

  • Migração do plano de controle canário: nesta estratégia, você provisiona o Anthos Service Mesh gerenciado no mesmo cluster em que o Anthos Service Mesh no cluster está instalado.
  • Migração de cluster canário: nessa estratégia, você cria um novo cluster e ativa o Anthos Service Mesh 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

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs necessárias.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs necessárias.

    Ative as 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 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 Anthos Service Mesh no cluster

Criar o cluster e instalar o Anthos Service Mesh no cluster

Na seção, você vai criar o cluster que usa o Anthos Service Mesh no cluster. Na prática, eles seriam os clusters que você já está usando.

  1. 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
    
  2. 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
    
  3. Verifique se o contexto do cluster foi renomeado:

    kubectl config get-contexts --output="name"
    
  4. Faça o download da versão que instala o Anthos Service Mesh no diretório de trabalho atual:

    curl https://storage.googleapis.com/csm-artifacts/asm/ > 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
    
  5. Torne o script asmcli executável:

    chmod +x asmcli
    
  6. Instale o Anthos 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 Anthos Service Mesh

  1. Você implantará o gateway de entrada do Anthos Service Mesh em um namespace diferente chamado asm-ingress. Crie o namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace asm-ingress
    
  2. Use o rótulo istio.io/rev= para adicionar o namespace asm-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=
    

    A resposta é semelhante a:

    namespace/asm-ingress labeled
    
  3. Implante o gateway de entrada do Anthos 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 resposta é 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

  1. Você implantará o Online Boutique em um namespace separado chamado onlineboutique. Crie o namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace onlineboutique
    
  2. Use o rótulo istio.io/rev= para adicionar o namespace onlineboutique à 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=
    

    A resposta é semelhante a:

    namespace/onlineboutique labeled
    
  3. 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
    
  4. Encontre o endereço IP público do gateway de entrada do Anthos Service Mesh:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copie o endereço IP público 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 Anthos Service Mesh gerenciado

Criar o cluster e provisionar o Anthos Service Mesh gerenciado

Nesta seção, você vai criar o cluster que será usado para migrar. Você provisionará o Anthos Service Mesh gerenciado e implantará o Online Boutique para replicar as implantações do cluster que usa o Anthos Service Mesh no cluster.

  1. Armazene o número do projeto em uma variável de ambiente:

    export PROJECT_NUMBER=$(gcloud projects \
      describe PROJECT_ID --format='get(projectNumber)')
    
  2. Crie um novo cluster:

    gcloud container clusters create cluster-with-managed-asm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool PROJECT_ID.svc.id.goog \
      --labels mesh_id=proj-${PROJECT_NUMBER}
    
  3. Renomeie o contexto do cluster para facilitar o trabalho dele:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \
      cluster-with-managed-asm
    
  4. Verifique se o contexto do cluster foi renomeado:

    kubectl config get-contexts --output="name"
    
  5. Ativar o Anthos 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 resposta é semelhante a:

    Waiting for Feature Service Mesh to be created...done.
    
  6. Registre o cluster na frota do projeto:

    gcloud container fleet memberships register cluster-with-managed-asm-membership \
      --gke-cluster=us-central1-a/cluster-with-managed-asm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    A resposta é semelhante a:

    Waiting for membership to be created...done.
    Created a new membership [projects/your-project-id/locations/global/memberships/cluster-with-gke-membership] for the cluster [cluster-with-gke-membership]
    Generating the Connect Agent manifest...
    Deploying the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]...
    Deployed the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect].
    Finished registering the cluster [cluster-with-gke-membership] with the Fleet.
    
  7. Ative o Anthos Service Mesh gerenciado no cluster:

    gcloud container fleet mesh update \
      --management automatic \
      --memberships cluster-with-managed-asm-membership \
      --project PROJECT_ID
    

    A resposta é semelhante a:

    Waiting for Feature Service Mesh to be updated...done.
    
  8. Verifique se o Anthos Service Mesh foi ativado para o cluster e se ele está pronto para ser usado:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Pode levar cerca de 10 minutos para que o Anthos Service Mesh seja provisionado e esteja pronto para uso no cluster. Se você vir controlPlaneManagement.state: DISABLED ou controlPlaneManagement.state: PROVISIONING, será necessário executar novamente o comando anterior em intervalos de alguns minutos até ver controlPlaneManagement.state: ACTIVE.

    A resposta é semelhante a:

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-managed-asm-membership:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-managed-asm-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 Anthos Service Mesh

  1. Você implantará o gateway de entrada do Anthos Service Mesh em um namespace diferente chamado asm-ingress. Crie o namespace:

    kubectl \
      --context cluster-with-managed-asm \
      create namespace asm-ingress
    
  2. Use o rótulo istio.io/rev=asm-managed para adicionar o namespace asm-ingress à malha de serviço e ative a injeção automática de proxy sidecar.

    kubectl \
      --context cluster-with-managed-asm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Implante o gateway de entrada do Anthos Service Mesh:

    kubectl \
      --context cluster-with-managed-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-managed-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    A resposta é 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

  1. Você implantará o Online Boutique em um namespace separado chamado onlineboutique. Crie o namespace:

    kubectl \
      --context cluster-with-managed-asm \
      create namespace onlineboutique
    
  2. Use o rótulo istio.io/rev=asm-managed para adicionar o namespace onlineboutique à malha de serviço e ative a injeção automática de proxy sidecar.

    kubectl \
      --context cluster-with-managed-asm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. 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-managed-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-managed-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Encontre o endereço IP público do gateway de entrada do Anthos Service Mesh:

    kubectl \
      --context cluster-with-managed-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copie o endereço IP público do serviço asm-ingressgateway e acesse-o pelo seu navegador da Web. Você verá o app de amostra Online Boutique. Você usará o endereço IP público 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-managed-asm \
        --namespace asm-ingress \
        get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \
      )
    

Testar o cluster com o Anthos Service Mesh usando uma implantação canário

Nesta seção, você vai configurar o cluster com o Anthos 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 o Anthos Service Mesh gerenciado. Para fazer isso, implante dois recursos do Istio no cluster com o Anthos Service Mesh no cluster:

  • um ServiceEntry para informar ao Anthos Service Mesh no cluster sobre o endpoint do Online Boutique do cluster do Anthos Service Mesh gerenciado
  • um VirtualService para instruir o gateway de entrada do Anthos Service Mesh no cluster a dividir o tráfego de 50 a 50.
  1. Defina o endereço IP do gateway de entrada do cluster do Anthos Service Mesh gerenciado 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
    
  2. Implante o ServiceEntry no cluster com o Anthos 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
    
  3. Implante o VirtualService no cluster com o Anthos 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
    
  4. Acesse o endereço IP do gateway de entrada do cluster com o Anthos 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 Anthos Service Mesh.

Migrar para o cluster com o Anthos Service Mesh

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).

  1. 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 Anthos Service Mesh no cluster.

  2. Acesse o Online Boutique acessando o nome de domínio no seu navegador da Web.

  3. Minimize o tempo de vida útil (TTL) do registro DNS para garantir que seja possível reverter rapidamente a entrada DNS se você precisar reverter.

  4. Defina o registro A do nome de domínio como o endereço IP público do gateway de entrada do cluster com o Anthos Service Mesh gerenciado.

  5. Quando a migração for bem-sucedida, exclua o cluster com o Anthos 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

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir os recursos

Exclua o cluster com o Anthos Service Mesh:

  gcloud container clusters delete cluster-with-managed-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

A seguir