Como migrar uma VM monolítica: visão geral e configuração

Neste tutorial, mostramos como analisar um aplicativo de amostra ainda não totalmente modernizado e as etapas necessárias para migrar todos os serviços dele para o GKE. Este aplicativo executa alguns dos serviços dele em um cluster do GKE e o restante dos serviços como um monolítico em uma VM.

Este tutorial está dividido em quatro seções:

  1. Visão geral e configuração.

    Nesta seção, você verá o contexto por trás deste tutorial, além de configurar a infraestrutura e as ferramentas necessárias para continuar com o restante do tutorial.

  2. Descoberta e avaliação (dia zero).

    Em seguida, verá como usar as ferramentas de descoberta para avaliar se a VM é adequada para a migração, bem como criar um cluster de processamento na preparação para a migração.

  3. Migração e implantação (primeiro dia).

    Após ser avaliado, você aprenderá a criar um plano de migração para sua VM monolítica, com uma migração completa de imagens e dados, e implantar seus artefatos recém-criados no Kubernetes.

  4. Otimização (dia 2).

    Por fim, você aprenderá como implantar rapidamente alterações de código-fonte no ambiente em contêiner, além de aprender sobre microsserviços, observabilidade e práticas recomendadas de modernização.

Context

Atualmente, uma grande parcela de aplicativos legados em grandes empresas é monolítica e está em execução em pilhas de tecnologia proprietárias ou máquinas virtuais (VMs) com uso intenso de computação. Esses serviços geralmente são cruciais para o funcionamento de um aplicativo maior, mas acumulam muitos custos operacionais, como taxas operacionais e de licenciamento. No entanto, devido a natureza deles, pode ser difícil migrar as VMs para uma solução mais leve, como contêineres em um cluster do GKE.

Neste tutorial, você aprende como aproveitar o Migrate to Containers para mover um serviço monolítico e o banco de dados dele, facilmente e sem alterações de código, de uma VM para um ambiente do GKE, reduzindo assim as taxas operacionais e o atrito de desenvolvimento. Em seguida, você aprenderá a aproveitar a nova carga de trabalho migrada implantando alterações no código-fonte e práticas recomendadas de modernização.

O aplicativo de amostra usado é o Bank of Anthos (em inglês), uma simulação de um serviço de banco de varejo, completo com a própria rede de processamento de transações e bancos de dados.

Os serviços de front-end da Web, usuários e contatos do Bank of Anthos, além do banco de dados da conta, já são microsserviços em contêineres executados em contêineres no GKE. No entanto, o livro-razão e o banco de dados de transações monolíticos ainda estão em execução em uma única máquina virtual. Para reduzir os custos operacionais sem interromper os fluxos de trabalho atuais, é necessário migrar facilmente essa VM para o GKE.

Diagrama da arquitetura do Bank of Anthos

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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Ferramentas necessárias

Siga este tutorial usando o Cloud Shell, que vem pré-instalado com as ferramentas de linha de comando gcloud, kubectl, git e migctl usadas neste tutorial. Ao usar o Cloud Shell, você não precisa instalar essas ferramentas de linha de comando na sua estação de trabalho.

Para usar o Cloud Shell:

  1. Acesse o console do Google Cloud.
  2. Clique no botão Ativar Cloud Shell na parte superior da janela do Console do Google Cloud. Botão "Ativar shell"

    Uma sessão do Cloud Shell é aberta dentro de um novo frame na parte inferior do Console do Google Cloud, e exibe um prompt de linha de comando.

    Sessão do Cloud Shell

APIs necessárias

Ativar o suporte para o Compute Engine

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

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

  6. Ative a API Compute Engine.

    Ativar a API

Ativar e configurar o GKE

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Implantar o Bank of Anthos

Nesta seção, você implantará a VM monolítica do livro-razão no Compute Engine, além de criar o cluster do GKE em que o restante dos serviços do Bank of Anthos residirá.

  1. Defina as variáveis de ambiente necessárias para a implantação monolítica do Bank of Anthos.

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. Clone o repositório do Bank of Anthos no diretório principal.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. Implante o monolítico do Bank of Anthos no Compute Engine.

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    Este comando cria uma VM no Compute Engine usando a imagem do banco de dados do Bank of Anthos.

  4. Crie uma regra de firewall que permita solicitações à instância de VM na porta 8080, que é usada pelo serviço de front-end para se comunicar com o monolítico.

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. Crie um cluster do GKE que hospede o restante dos serviços do Bank of Anthos.

    gcloud container clusters create boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --subnetwork=default
    
  6. Depois que o cluster for criado, busque as credenciais e configure o contexto do Kubernetes para apontar para ele.

    gcloud container clusters get-credentials boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID
    
  7. Substitua o ID do projeto no ConfigMap usado para descrever como os serviços do GKE podem se comunicar com a VM monolítica do livro razão.

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    Veja este arquivo para confirmar que as alterações foram aplicadas.

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    Você verá que o ID do projeto foi interpolado nos hosts de serviço do livro razão.

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. Aplique os vários serviços do Bank of Anthos no cluster.

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    É possível verificar os estados do pod com o seguinte comando:

    kubectl get pods
    

    Pode levar alguns minutos para que todos os pods estejam em execução.

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. Depois que todos os pods forem definidos como Running, é possível encontrar o endereço IP externo do serviço frontend do LoadBalancer.

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. Por fim, é possível abrir um navegador e acessar a página da Web no endereço IP externo encontrado acima (use HTTP, em vez de HTTPS).

    http://EXTERNAL_IP
    

    Faça o login com as credenciais padrão e veja as transações no painel. As transações listadas vêm do monolítico do livro razão atualmente hospedado em uma VM.

    Captura de tela do Bank of Anthos

Limpeza

Para evitar cobranças desnecessárias do Google Cloud, exclua os recursos usados para este tutorial assim que terminar. Esses recursos são:

  • O cluster do GKE boa-cluster
  • A VM do Compute Engine ledgermonolith-service

Exclua esses recursos manualmente ou siga as etapas abaixo para excluir seu projeto, o que também removerá todos os recursos.

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

    Acessar "Gerenciar recursos"

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

    Agora que você ativou as APIs necessárias e implantou a configuração do Bank of Anthos, vá para a próxima seção do tutorial, Descoberta e avaliação, em que você aprenderá como usar as ferramentas de descoberta de migração para avaliar se a VM é adequada para migração usando as ferramentas Migrate to Containers.

    Ao terminar este tutorial, não se esqueça de limpar o projeto e os recursos do Google Cloud.