Migrar aplicativos Tomcat para contêineres com o Migrate to Containers

Last reviewed 2022-06-17 UTC

Este documento é destinado a proprietários de aplicativos e arquitetos de nuvem. Neste documento, descrevemos como migrar aplicativos Java executados no Tomcat para contêineres em execução no Google Kubernetes Engine (GKE), GKE Autopilot, Cloud Run, ou GKE Enterprise. É possível usar esse processo para migrar aplicativos Tomcat de ambientes locais, ambientes de hospedagem particulares ou outros provedores de nuvem. Ele também destaca os benefícios de usar a opção Migrate to Containers para automatizar a migração.

Ele pressupõe que você esteja familiarizado com os seguintes produtos:

Este documento faz parte de uma série sobre migração para o Google Cloud. Para uma visão geral da série, consulte Migração para o Google Cloud: como escolher o caminho de migração.

Leia este documento para migrar aplicativos Tomcat compatíveis de um ambiente de origem compatível para um ambiente do GKE, GKE Enterprise ou Cloud Run. usando o recurso Migrate to Containers. Esses ambientes de origem podem incluir o seguinte:

A ferramenta Migrate to Containers usa a ferramenta de avaliação de adequação para descobrir, inspecionar e migrar todos os aplicativos Tomcat nas VMs do Linux. A ferramenta divide os aplicativos Tomcat em contêineres de aplicativos Tomcat individuais. Após a migração, você pode agrupar alguns ou todos os aplicativos em uma imagem de contêiner compartilhada. O diagrama a seguir mostra como a Migrate to Containers divide e migra os aplicativos:

Migrate to Containers e divide os aplicativos Tomcat.

Migrate to Containers oferece os seguintes benefícios:

  • Modernização de cargas de trabalho: oferece os seguintes recursos:
  • Ambiente em contêiner: coloca em contêiner os aplicativos atuais baseados em VM. Veja os benefícios de migrar para contêineres.
  • Imagem oficial do Tomcat: use a imagem oficial do Tomcat por padrão. É possível atualizar a migração ou o Dockerfile para usar a sua. As imagens oficiais do Docker trazem práticas recomendadas do Docker para suas imagens de base.
  • Divisão automática de aplicativos: sugere automaticamente a divisão de cada aplicativo descoberto em um contêiner individual, mantendo a configuração original do Tomcat.
  • Gerenciamento de secrets: descobre os keystores, truststores e certificados usados pelo servidor do Tomcat e gera automaticamente primitivos do Kubernetes para externalizar e montá-los como Secrets do Kubernetes.
  • Mudanças recomendadas na geração de registros: descobre automaticamente arquivos de configuração de framework de geração de registros comuns do Java (como log4j2, log4j e logback) e sugere alterações para se alinhar à geração de registros no Kubernetes.

Migrar aplicativos Tomcat para contêineres com o Migrate to Containers é uma etapa possível na sua jornada de modernização da carga de trabalho. A migração ajuda a transformar os aplicativos Tomcat para que eles sejam executados em um ambiente de nuvem. Isso também ajuda a evitar substituições caras.

Os candidatos ideais para migração são aplicativos executados em versões compatíveis do Tomcat e Java para as quais a modernização por meio de uma substituição completa é muito cara ou muito difícil.

Projetar a migração para o Google Cloud

Para migrar os aplicativos Tomcat do ambiente de origem para contêineres em execução no Google Cloud, siga o framework descrito na Série de migração para o Google Cloud.

No diagrama a seguir, veja o caminho da sua jornada de migração.

Caminho de migração com quatro fases.

O framework ilustrado no diagrama anterior tem quatro fases:

  1. Avaliar: avalia o ambiente de origem, avalia os aplicativos que você quer migrar para o Google Cloud e avalia quais aplicativos Tomcat são adequados para migração.
  2. Planejar: você cria a infraestrutura básica para Migrate to Containers, como provisionar a hierarquia de recursos e configurar o acesso à rede.
  3. Implantar: você migra os aplicativos Tomcat do ambiente de origem para o GKE, o Autopilot do GKE, o Cloud Run ou o GKE Enterprise com o Migrate to Containers.
  4. Otimização: você começa a aproveitar as tecnologias e os recursos da nuvem.

Como avaliar o ambiente e os aplicativos de origem

Na fase de avaliação, você reúne informações sobre o ambiente de origem e os aplicativos que você quer migrar. Isso ajuda a dimensionar os recursos necessários, tanto para a migração como para o ambiente de destino.

Na fase de avaliação, faça o seguinte:

  1. Crie um inventário abrangente dos seus aplicativos.
  2. Catalogue seus apps de acordo com as propriedades e dependências deles.
  3. Treine e instrua suas equipes no Google Cloud.
  4. Crie um experimento e uma prova de conceito no Google Cloud.
  5. Calcule o custo total de propriedade (TCO) do ambiente de destino.
  6. Escolha os aplicativos que você quer migrar primeiro.

As seções a seguir são baseadas na Migração para o Google Cloud: como avaliar e descobrir suas cargas de trabalho. No entanto, eles fornecem informações específicas para avaliar os aplicativos Tomcat que você quer migrar para contêineres com o Migrate to Containers.

Criar seus inventários

Para definir o escopo da migração, é necessário entender o ambiente do Tomcat. Para entender seu ambiente, colete informações sobre seus aplicativos e as respectivas dependências.

O guia Como criar um inventário dos seus apps descreve como criar um inventário das cargas de trabalho e as dependências delas no ambiente do Tomcat. Siga essas orientações e crie seus inventários. Quando terminar esse trabalho, continue lendo este documento.

Depois de criar um inventário das cargas de trabalho e das respectivas dependências, refine-o. Avalie os aspectos e recursos que interessam à sua organização ao migrar os aplicativos Tomcat com o Migrate to Containers.

Antes de avaliar o ambiente do Tomcat para a migração, conclua o trabalho de avaliação em Como migrar VMs para contêineres com o Migrate to Containers e Migração para o Google Cloud: como avaliar e descobrir suas cargas de trabalho. Quando terminar esse trabalho, conclua o inventário das suas cargas de trabalho.

Para concluir o inventário das suas cargas de trabalho, considere o seguinte:

  • Sistemas operacionais em execução nas instâncias do Tomcat: colete informações sobre os sistemas operacionais e as licenças deles em execução nas instâncias do Tomcat e verifique se os sistemas operacionais estão listados em Sistemas operacionais e versões do Kubernetes compatíveis.
  • Versões do Tomcat que executam seus aplicativos: colete informações sobre as versões do Tomcat que executam seus aplicativos e garanta a compatibilidade com o Migrate to Containers.
  • Aplicativos implantados nas instâncias do Tomcat: avalie quais aplicativos serão implantados em cada instância do Tomcat. Em seguida, mapeie as dependências entre seus aplicativos e entre seus aplicativos e os serviços externos. Em seguida, reúna informações sobre as origens de configuração dos seus aplicativos, que podem incluir as seguintes configurações:
    • Variáveis de ambiente
    • Caminhos de instalação do Tomcat não padrão
    • Registros de usuário LDAP
    • Conexões Java Database Connectivity (JDBC)
    • Proxy Tomcat
    • Proxy Java
  • Pontuação de adequação do Migrate to Containers: avalie se os aplicativos Tomcat estão prontos para migração com o Migrate to Containers. O Migrate to Containers oferece uma ferramenta de avaliação de adequação que você precisa executar nas VMs que hospedam as instâncias do Tomcat para calcular uma pontuação de ajuste e recomendar uma jornada de migração. O Migrate to Containers usa um conjunto de regras de avaliação para migrar aplicativos Tomcat com sucesso.
  • Cluster do Tomcat: o cluster do Tomcat permite a replicação de sessões em todos os nós do Tomcat no cluster. Algumas implementações de clustering, incluindo o provedor de assinatura McastService integrado, não funcionam corretamente no Kubernetes devido à falta de compatibilidade com multicast no nível da rede. Isso significa que a configuração do cluster do Tomcat requer algumas configurações manuais durante a migração. Para saber mais, consulte ClusteringCloud (em inglês) no wiki do Apache Tomcat.
  • Proxy Tomcat: em muitos cenários reais, o Tomcat pode ser configurado para ser executado com um proxy reverso. Os principais usos de um proxy reverso incluem o seguinte:
  • Proxy Java:se você usa um servidor proxy para controlar a saída de aplicativos Tomcat e Java, desative as configurações de proxy Java. Remova as configurações de proxy das opções de linha de comando da máquina virtual Java (JVM). Em seguida, configure um gateway de saída do Anthos Service Mesh (ASM) para controlar a rede de saída do contêiner do Tomcat.

Concluir a avaliação

Depois de criar os inventários relacionados ao ambiente e às cargas de trabalho baseadas em Tomcat, conclua o restante das atividades da fase de avaliação documentadas em Migração para o Google Cloud: como avaliar e descobrir suas cargas de trabalho. Quando terminar esse trabalho, continue lendo este documento.

Planeje e crie sua base

Depois de seguir as orientações em Como planejar e criar sua base, conclua sua base do Tomcat:

  1. Confirme se as cargas de trabalho do Tomcat e o ambiente de origem atendem aos pré-requisitos para migrar uma carga de trabalho do Tomcat.
  2. Para concluir a fase de coleta de dados, execute mfit nas VMs que executam as instâncias do Tomcat. Para mais informações, consulte Como usar a ferramenta de avaliação de adequação.

Para provisionar e configurar o Migrate to Containers e as dependências dele, consulte Configurar o Migrate to Containers.

Quando terminar esse trabalho, continue lendo este documento.

Migrar seus aplicativos Tomcat para contêineres

Na fase de implantação, use os marcos a seguir como orientação.

Gerar e analisar o plano de migração

Crie um plano de migração para contêineres para seus aplicativos Tomcat:

  1. Configurar os ambientes de origem como origens de migração do Migrate to Containers: para migrar aplicativos tradicionais do WAS, o Migrate to Containers precisa de informações sobre os ambientes de origem em que as VMs são executadas. Você coletou essas informações executando as tarefas descritas na seção Criar seus inventários neste documento. Para mais informações sobre como configurar ambientes de origem, consulte Como adicionar uma origem de migração.
  2. Crie um plano de migração: para especificar quais aplicativos do Tomcat você quer migrar de um ambiente de origem para um ambiente de destino compatível, crie um plano de migração. Por exemplo, é possível configurar onde você quer armazenar os dados permanentes.

    Para mais informações sobre como criar e monitorar planos de migração, consulte Como criar uma migração. Para criar um plano de migração para aplicativos Tomcat, use a ferramenta de linha de comando migctl, conforme descrito em Como executar uma migração.

  3. Revise e personalize planos de migração: após gerar planos de migração para cada uma das VMs que você quer migrar, revise e personalize cada plano de migração para garantir que ele atenda aos seus requisitos. Para mais informações sobre como personalizar planos de migração, consulte Como personalizar um plano de migração.

Gerar artefatos de migração e descritores de implantação

Para gerar os artefatos Tomcat de destino para seus aplicativos, o Migrate to Containers extrai os aplicativos em execução nas VMs configuradas nos planos de migração. Em seguida, ele cria vários artefatos e os coloca em um bucket do Cloud Storage. O Migrate to Containers também gera os descritores de implantação, que podem ser personalizados e usados para implantar instâncias das imagens de contêiner no ambiente de destino.

Para cada aplicativo migrado, o Migrate to Containers cria uma pasta contendo o seguinte:

  • Dockerfile
  • Binários de aplicativo
  • Arquivos de configuração do Tomcat
  • Script de criação
  • YAML do Skaffold, para criação e implantação
  • (Optional) script do secrets.sh
  • (Opcional) Arquivo de geração de registros

É possível monitorar o progresso dos artefatos de contêiner criados e migrados. Para mais informações sobre como monitorar uma migração, consulte Como monitorar cargas de trabalho migradas.

Verificar e validar os recursos e descritores gerados

Depois de gerar artefatos de contêiner e descritores de implantação com o Migrate to Containers, revise e atualize esses artefatos e descritores para garantir que eles atendam aos seus requisitos. Por exemplo, considere os aspectos a seguir.

  • Descritores de imagens de contêiner: analise os descritores de imagem de contêiner gerados com o Migrate to Containers e verifique se eles são adequados para a carga de trabalho de contêiner. Se você precisar atualizar a imagem do contêiner base, atualize o valor FROM no Dockerfile gerado. É possível também alterar a variável de ambiente CATALINA_OPTS no Dockerfile para definir ou alterar as variáveis de ambiente da JVM.
  • Geração de registros no nível do aplicativo: o Migrate to Containers gera automaticamente um arquivo de geração de registros modificado, que você pode usar para modificar a configuração de geração de registros para gravar registros no console em vez de arquivos locais de dados.

Para mais informações sobre como analisar artefatos de contêiner e descritores de implantação, consulte Analisar os artefatos.

Implantar e validar as cargas de trabalho conteinerizadas no GKE, GKE Autopilot, Cloud Run ou GKE Enterprise

Quando os descritores de implantação para suas cargas de trabalho estiverem prontos, será possível executar as seguintes tarefas:

  1. Crie uma imagem de contêiner do aplicativo: crie uma imagem de contêiner de aplicativo para a carga de trabalho migrada. Para instruções, consulte Criar a imagem do contêiner.
  2. Implante suas cargas de trabalho migradas no ambiente de destino:
  3. Monitore suas cargas de trabalho migradas: depois de implantar o contêiner de aplicativo Tomcat, é possível coletar dados sobre o desempenho delas no ambiente de destino. Para mais informações, consulte Como monitorar cargas de trabalho migradas.
  4. Integre suas cargas de trabalho migradas: depois que suas cargas de trabalho forem implantadas no ambiente de destino, integre a geração de artefatos e os processos de implantação de cargas de trabalho aos processos de implantação e pipelines. Se você não tiver um processo de implantação automatizado em vigor e implantar suas cargas de trabalho manualmente, recomendamos migrar das implantações manuais para implantações automatizadas.

Desinstalar o Migrate to Containers

Depois de concluir a migração das cargas de trabalho com o Migrate to Containers, recomendamos que você faça o seguinte:

  1. Verifique se você tem todas as referências aos artefatos que o Migrate to Containers gerou durante a migração.
  2. Desinstale o Migrate to Containers.

Otimizar o ambiente após a migração

Para concluir a migração, consulte Como otimizar o ambiente.

É possível executar essas otimizações específicas do Tomcat para seus aplicativos migrados do Tomcat:

  • Ajuste sua geração de registros: diferentemente das VMs em que os arquivos de registro normalmente são gravados no sistema de arquivos local, os registros do Kubernetes normalmente são transmitidos para stdout ou stderr. Em seguida, os registros são armazenados, analisados e consultados por meio de um back-end dedicado, como o Cloud Logging. É possível usar as alterações recomendadas no Migrate to Containers no artefato de arquivo logConfigs ou alterar manualmente a configuração de geração de registros para gravar registros em stdout ou stderr.
  • Como proteger dados confidenciais:coloque senhas e outros dados confidenciais no Secrets do Kubernetes. Use secrets do Kubernetes para substituir os marcadores de configuração na inicialização do contêiner.
  • Ajustar o perfil de recurso: para ajudar o Kubernetes a programar seus pods de maneira eficiente, ajuste as restrições de recursos para solicitações e limites. O ajuste fino dos recursos para se alinhar ao tamanho do heap da JVM também é fundamental para evitar exceções de falta de memória (OOM, na sigla em inglês).
  • Posição do pod de controle:caso seus aplicativos Tomcat migrados se comuniquem com frequência uns com os outros, programe-os para serem executados nos mesmos nós. Se controlar o posicionamento de pods for útil para os aplicativos migrados, consulte Como atribuir pods a nós.

A seguir