Sobre os contêineres do sistema Linux

A CLI do Migrate to Containers permite migrar aplicativos baseados em Linux para ambientes conteinerizados. Ele usa um contêiner pré-criado do sistema Linux que funciona como um carregador de inicialização para os serviços exigidos pelo aplicativo modernizado. Ao usar o Migrate to Containers para aplicativos Linux, é possível modernizar uma ampla variedade de aplicativos sem estado para serem executados nos clusters do Google Kubernetes Engine (GKE), Cloud Run e GKE.

Para mais informações, consulte Arquitetura da CLI do Migrate to Containers.

Neste documento, você encontra detalhes sobre os contêineres do sistema Linux Migrate to Containers usados como parte da solução para executar aplicativos migrados usando o Migrate to Containers.

Migração usando um contêiner do sistema Linux

O Migrate to Containers descobre os arquivos e processos do aplicativo de origem. Em seguida, ele gera artefatos que incluem um Dockerfile, um manifesto do Kubernetes e uma configuração do Skaffold.

A principal função de um contêiner do sistema Linux é iniciar os serviços que eram originalmente executados na instância de máquina virtual (VM) de origem, incluindo os serviços relevantes do sistema operacional e do aplicativo.

O Dockerfile é usado para criar a imagem da VM migrada. Um Dockerfile de um contêiner do sistema Linux geralmente tem esta aparência:

# Please refer to the documentation:
# https://cloud.google.com/migrate/anthos/docs/dockerfile-reference

FROM us-docker.pkg.dev/migrate-modernize-public/modernize-plugins-prod/service-manager-runtime:1.0.0 as service-manager-runtime

FROM scratch

# Tar containing data captured from the source VM
ADD vmFiles.tar.gz /

COPY --from=service-manager-runtime / /

ADD blocklist.yaml /.m4a/blocklist.yaml

ADD logs.yaml /code/config/logs/logsArtifact.yaml

ADD services-config.yaml /.m4a/

ADD tempfiles.yaml  /.m4a/

# If you want to update parts of the image, add your commands here.
# For example:
# RUN apt-get update
# RUN apt-get install -y \
#       package1=version \
#       package2=version \
#       package3=version
# RUN yum update
# RUN wget http://github.com

ENTRYPOINT ["/ko-app/service-manager-runtime", "start", "-c", "/.m4a/"]

Quando você executa uma migração, as instruções do Dockerfile a seguir copiam ou adicionam os dados da VM da origem original para a imagem do Docker:

  • A instrução a seguir adiciona o arquivo tar que contém os dados capturados da VM de origem à imagem do Docker:

    ADD vmFiles.tar.gz /
    

    Esse arquivo é criado pelo Migrate to Containers. Ele contém o sistema de arquivos raiz da VM de origem com todos os filtros do plano de migração e qualquer pasta filtrada no plano de migração de dados.

  • A instrução a seguir importa o ambiente de execução do Migrate to Containers do repositório do Docker para a imagem do Docker:

    FROM us-docker.pkg.dev/migrate-modernize-public/modernize-plugins-prod/service-manager-runtime:1.0.0 as service-manager-runtime
    
  • A instrução a seguir copia o ambiente de execução do Migrate to Containers para a imagem do Docker:

    COPY --from=service-manager-runtime / /
    

Clique para conferir detalhes sobre o arquivo de ambiente de execução do Migrate to Containers

/ko-app/service-manager-runtime é o principal arquivo de ambiente de execução do Migrate to Containers. Esse é um sistema de inicialização feito para contêineres. Ele faz o seguinte:

  • Lê o arquivo /.m4a/services-config.yaml e executa os binários especificados em ordem de acordo com o método de execução especificado, como daemonize, não daemonize, aguarde a conclusão.
  • Coleta registros especificados no arquivo /code/config/logs/logsArtifact.yaml e os imprime em stdout do contêiner. Para clusters do GKE e do GKE, isso também garante que os registros sejam enviados para o Cloud Logging.

Manutenção de cargas de trabalho migradas

É possível criar um novo pipeline para o aplicativo com base nos artefatos migrados. Você pode ter um pipeline diferente para cada aplicativo. É possível manter o pipeline de integração e implantação contínuas que gerou o aplicativo original baseado em VM e adicionar as etapas relevantes que transformam os executáveis gerados em contêineres do sistema Linux.

O diagrama a seguir ilustra um pipeline de exemplo usando o Migrate to Containers:

Fluxo automatizado de CI/CD para mudança de plataforma de aplicativos usando o Migrate to Containers

Este diagrama mostra o processo de alteração de um aplicativo atual.

Uma alteração no código-fonte ou um novo caminho do SO é enviada ao repositório Git existente. A origem é compilada com base na configuração atual, e uma nova imagem é criada. A nova imagem inclui a camada de ambiente de execução do Migrate to Containers.

No ambiente de teste, um desenvolvedor executa testes preliminares para confirmar se a nova imagem está funcionando conforme o esperado. Após a fase de teste, uma nova imagem de contêiner do sistema é criada e enviada ao ambiente de desenvolvimento ou teste, que é posteriormente lançada para produção.