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.
No console do Google Cloud, acesse a página Instâncias de VMs.
Marque a caixa de seleção no lado esquerdo da linha da VM
ledgermonolith-service
.Na parte superior da página, clique no botão Parar para interromper a VM.
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
Abra a página "Migrate to Containers" no Console do Google Cloud.
Na guia Fontes e candidatos, clique em Adicionar origem.
Em Selecionar cluster de processamento, escolha o cluster de processamento de migração na lista suspensa e clique em Próxima.
Especifique o nome da origem, como
ledgermonolith-source
.Defina o Tipo de origem como Compute Engine e clique em Próximo.
Verifique se o projeto certo está selecionado como o projeto de origem.
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.
Clique em Continuar e em Adicionar origem.
Crie uma migração
Abra a página "Migrate to Containers" no Console do Google Cloud.
Na guia Migrações, clique em Criar migração.
Defina o Nome da migração como
ledgermonolith-migration
.Selecione a origem da migração que você criou na etapa anterior:
ledgermonolith-source
.Defina o Tipo de carga de trabalho como
Linux system container
.Defina o Nome da instância de origem como
ledgermonolith-service
.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.
Na tabela, clique no Nome da sua migração,
ledgermonolith-migration
, para abrir a página de detalhes.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.
Ainda no Plano de migração, em
deployment
, verifique se o serviço tem o nomeledgermonolith-service
, a porta8080
e o protocoloTCP
. O objeto será parecido com:... endpoints: - name: ledgermonolith-service port: 8080 protocol: TCP ...
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.
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
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
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
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
Depois que todos os pods forem definidos como
Running
, é possível encontrar o endereço IP externo do LoadBalancerfrontend
.kubectl get service frontend
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 10.79.248.161 ##.##.##.##. 80:31304/TCP 46m
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.
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.
A seguir
- Saiba mais sobre a otimização (dia 2).