Como migrar uma VM monolítica: migração e implantação

Com uma configuração de cluster de processamento e o Migrate to Containers instalados, está tudo pronto para executar a migração. Primeiro, você precisa adicionar uma origem de migração relevante para o cluster de processamento e gerar um plano de migração para a VM. Depois de analisar e personalizar o plano de acordo com suas necessidades, é possível gerar e implantar artefatos do Kubernetes no cluster do GKE em que o restante do aplicativo está em execução.

Objetivos

Ao concluir este tutorial, você saberá como:

  • adicionar uma origem de migração;
  • criar um plano de migração na carga de trabalho da VM;
  • analisar e personalizar o plano de migração;
  • gerar e implantar artefatos de migração no cluster do GKE.

Antes de começar

Este é um acompanhamento do tutorial de Descoberta e avaliação. Antes de iniciar este tutorial, siga as instruções dessa página para executar as ferramentas de descoberta na VM monolítica e criar o cluster de processamento.

Parar a VM monolítica

Antes de fazer a migração, interrompa a VM monolítica para evitar a interrupção não intencional ou a corrupção de dados que pode ocorrer se os dados estiverem em movimento durante os processos de migração.

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VMs"

  2. Marque a caixa de seleção no lado esquerdo da linha da VM ledgermonolith-service.

  3. Na parte superior da página, clique no botão Parar para interromper a VM.

  4. Espere até que a VM seja totalmente interrompida. Isso leva de 1 a 2 minutos.

Migre a VM

Antes de migrar a VM, crie uma origem de migração que represente a plataforma de origem (Compute Engine ou VMWare).

Adicionar uma origem

  1. Abra a página "Migrate to Containers" no Console do Google Cloud.

    Acessar a página "Migrate to Containers"

  2. Na guia Fontes e candidatos, clique em Adicionar origem.

  3. Em Selecionar cluster de processamento, escolha o cluster de processamento de migração na lista suspensa e clique em Próxima.

  4. Especifique o nome da origem, como ledgermonolith-source.

  5. Defina o Tipo de origem como Compute Engine e clique em Próximo.

  6. Verifique se o projeto certo está selecionado como o projeto de origem.

  7. Crie uma conta de serviço para usar o Compute Engine como uma fonte de migração selecionando Criar uma nova conta de serviço.

  8. Clique em Continuar e em Adicionar origem.

Crie uma migração

  1. Abra a página "Migrate to Containers" no Console do Google Cloud.

    Acessar a página "Migrate to Containers"

  2. Na guia Migrações, clique em Criar migração.

  3. Defina o Nome da migração como ledgermonolith-migration.

  4. Selecione a origem da migração que você criou na etapa anterior: ledgermonolith-source.

  5. Defina o Tipo de carga de trabalho como Linux system container.

  6. Defina o Nome da instância de origem como ledgermonolith-service.

  7. clique em Criar migração; Isso leva de 1 a 2 minutos.

    Quando a migração for concluída, a coluna Status exibirá a mensagem Plano de migração gerado.

  8. Na tabela, clique no Nome da sua migração, ledgermonolith-migration, para abrir a página de detalhes.

  9. Na guia Configuração de dados, crie um novo volume para migrar o banco de dados PostgreSQL da VM, /var/lib/postgresql. A configuração ficará assim:

    volumes:
     - deploymentPvcName: ledgermonolith-db
       folders:
      # Folders to include in the data volume, e.g. "/var/lib/postgresql"
      # Included folders contain data and state, and therefore are automatically excluded from a generated container image
       - /var/lib/postgresql
       newPvc:
         spec:
           accessModes:
           - ReadWriteOnce
           resources:
             requests:
               storage: 10G
    

    Isso garante o banco de dados é mantido durante a migração. Clique em Salvar.

  10. Ainda no Plano de migração, em deployment, verifique se o serviço tem o nome ledgermonolith-service, a porta 8080 e o protocolo TCP. O objeto será parecido com:

    ...
    endpoints:
      - name: ledgermonolith-service
        port: 8080
        protocol: TCP
    ...
    
  11. Clique em Salvar e gerar artefatos para iniciar o processo de migração. Esse processo levará aproximadamente de 7 a 8 minutos.

    Os artefatos gerados pelo Migrate to Containers para essa VM são:

    • uma imagem do Docker do processo da VM;
    • um StatefulSet e um serviço que executam o processo recém-migrado;
    • um namespace e um DaemonSet que mantêm o ambiente de execução do contêiner;
    • um PersistentVolumeClaim e um PersistentVolume que armazenam o banco de dados PostgreSQL.

Implantar a carga de trabalho migrada

Na seção anterior, você migrou a VM monolítica para um conjunto de recursos do Kubernetes que podem ser implantados em um cluster. Agora é possível implantar esses recursos no cluster do Bank of Anthos, reconfigurar o aplicativo para que ele se comunique com o endpoint correto do serviço de livro razão recém-migrado e verificar se tudo funciona.

  1. Agora que os artefatos de migração foram gerados, conecte-se ao cluster de processamento e faça o download dos artefatos no ambiente do Cloud Shell.

    gcloud container clusters get-credentials migration-processing --zone COMPUTE_ZONE --project PROJECT_ID
    cd ${HOME}/bank-of-anthos/src/ledgermonolith/
    migctl migration get-artifacts ledgermonolith-migration
    
  2. Conecte-se ao cluster do Bank of Anthos e implante os recursos gerados do Kubernetes. Além disso, instale um ambiente de execução do contêiner usando migctl para que o cluster possa executar o pod recém-migrado.

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE --project=PROJECT_ID
    migctl setup install --runtime
    kubectl apply -f ${HOME}/bank-of-anthos/src/ledgermonolith/deployment_spec.yaml
    
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for boa-cluster.
    
    applying resources to the cluster
    namespace/v2k-system created
    daemonset.apps/runtime-deploy-node created
    
    statefulset.apps/ledgermonolith-service created
    service/ledgermonolith-service-java created
    persistentvolumeclaim/data-pvc-0-4e1b2e0e-021f-422a-8319-6da201a960e5 created
    persistentvolume/pvc-4d41e0f2-569e-415d-87d9-019490f18b1c created
    
  3. Edite o ConfigMap que contém os hosts do livro razão para apontar para o novo pod do Kubernetes, em vez da VM monolítica do livro razão que não está mais em serviço.

    sed -i 's/'.c.PROJECT_ID.internal'//g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    kubectl apply -f ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    
  4. Exclua todos os pods para recriá-los com a nova configuração.

    kubectl delete pods --all
    

    Use o comando a seguir para visualizar o estado dos pods:

    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          5m43s
    contacts-d5dcdc87c-jbrhf       1/1     Running   0          5m44s
    frontend-5768bd978-xdvpl       1/1     Running   0          5m44s
    ledgermonolith-service-0       1/1     Running   0          5m44s
    loadgenerator-8485dfd-582xv    1/1     Running   0          5m44s
    userservice-8477dfcb46-rzw7z   1/1     Running   0          5m43s
    
  5. Depois que todos os pods forem definidos como Running, é possível encontrar o endereço IP externo do LoadBalancer frontend.

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   46m
    
  6. Abra um navegador e visite a página da Web no endereço IP externo encontrado acima. Use HTTP, em vez de HTTPS.

    http://EXTERNAL_IP
    

    É possível fazer login com as credenciais padrão e ver as transações. As transações que você vê vêm do monolítico do livro razão que agora foi migrado para um contêiner do Kubernetes.

    Captura de tela do Bank of Anthos

A seguir

Agora que você aprendeu a criar e personalizar um plano de migração a partir da carga de trabalho da VM, além de executar a migração da VM para artefatos em contêineres, acesse a próxima seção do tutorial: Otimização.

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

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
  • O cluster do GKE migration-processing
  • 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