Acerca de los contenedores del sistema Linux

La CLI de Migrate to Containers te permite migrar aplicaciones basadas en Linux a entornos alojados en contenedores. Usa un contenedor de sistema precompilado de Linux que funciona como bootloader para los servicios que requiere la aplicación modernizada. Con el uso de Migrate to Containers para aplicaciones de Linux, puedes modernizar una amplia gama de aplicaciones sin estado con el objetivo de que se ejecuten en los clústeres de Google Kubernetes Engine (GKE), Cloud Run y GKE.

Para obtener más información, consulta Arquitectura de la CLI de Migrate to Containers.

En este documento, se proporcionan detalles sobre los contenedores del sistema Linux de Migrate to Containers que se usan como parte de la solución para ejecutar aplicaciones migradas con Migrate to Containers.

Migración con un contenedor del sistema Linux

Migrate to Containers descubre los archivos y los procesos de la aplicación de origen. Luego, genera artefactos que incluyen un Dockerfile, un manifiesto de Kubernetes y la configuración de Skaffold.

La función principal de un contenedor de sistema Linux es iniciar los servicios que se ejecutaban originalmente en la instancia de máquina virtual (VM) de origen, incluidos el sistema operativo y los servicios de aplicación relevantes.

El Dockerfile se usa con el objetivo de compilar la imagen para la VM migrada. Por lo general, un Dockerfile de contenedores del sistema Linux es similar al siguiente:

# 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/"]

Cuando ejecutas una migración, las siguientes instrucciones de Dockerfile copian o agregan los datos de VM de la fuente original a la imagen de Docker:

  • Con la siguiente declaración, se agrega el archivo tar que contiene los datos capturados de la VM de origen a la imagen de Docker:

    ADD vmFiles.tar.gz /
    

    Este tar es creado por Migrate to Containers. Contiene el sistema de archivos raíz de la VM de origen con todo lo que se proporciona en los filtros del plan de migración y cualquier carpeta proporcionada en el plan de migración de datos filtrado.

  • La siguiente declaración importa el entorno de ejecución de Migrate to Containers del repositorio de Docker a la imagen de Docker:

    FROM us-docker.pkg.dev/migrate-modernize-public/modernize-plugins-prod/service-manager-runtime:1.0.0 as service-manager-runtime
    
  • Luego, la siguiente declaración copia el entorno de ejecución de Migrate to Containers en la imagen de Docker:

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

Haz clic para ver los detalles del archivo del entorno de ejecución de Migrate to Containers.

/ko-app/service-manager-runtime es el archivo principal del entorno de ejecución de Migrate to Containers. Este es un sistema de inicialización creado para contenedores. Hace lo siguiente:

  • Lee el archivo /.m4a/services-config.yaml y ejecuta los objetos binarios especificados en orden según el método de ejecución especificado, como daemon , no daemonize, espera hasta el final.
  • Recopila los registros especificados en el archivo /code/config/logs/logsArtifact.yaml y los imprime en stdout del contenedor. Para los clústeres de GKE y GKE, también garantiza que los registros se envíen a Cloud Logging.

Mantenimiento de las cargas de trabajo migradas

Puedes crear una nueva canalización para tu aplicación a partir de los artefactos migrados. Es posible que tengas una canalización diferente para diferentes aplicaciones. Puedes conservar tu canalización de integración y de implementación continuas existente que generó la aplicación original basada en VM y agregar los pasos relevantes que transforman los ejecutables generados en contenedores de sistemas Linux.

En el siguiente diagrama, se ilustra una canalización de muestra con Migrate to Containers:

Flujo automatizado de CI/CD para rediseñar la plataforma de una aplicación mediante Migrate to Containers

Este diagrama muestra el proceso de cambio de una aplicación existente.

Un cambio en el código fuente o en la ruta de acceso del SO nueva se envía al repositorio de Git existente. La fuente se compila en función de la configuración existente y se compila una imagen nueva. La imagen nueva incluye la capa del entorno de ejecución de Migrate to Containers.

En el entorno de pruebas, un desarrollador ejecuta pruebas preliminares para confirmar si la imagen nueva funciona como se espera. Después de la fase de prueba, se crea una imagen de contenedor del sistema nueva y se envía al entorno de desarrollo o prueba, que luego se lanza a producción.