Migra una VM monolítica: Descripción general y configuración

En este instructivo, puedes ver una aplicación de ejemplo que aún no se modernizó por completo y seguir los pasos necesarios para migrar todos sus servicios a GKE. En esta aplicación se ejecutan algunos de sus servicios en un clúster de GKE y el resto de sus servicios como una aplicación monolítica en una VM.

Este instructivo se divide en cuatro secciones:

  1. Descripción general y configuración

    En esta sección, analizarás el contexto detrás de este instructivo, y configurarás la infraestructura y las herramientas necesarias para continuar con el resto.

  2. Descubrimiento y evaluación (día 0)

    A continuación, usa herramientas de descubrimiento para evaluar tu VM a fin de verificar su idoneidad para la migración y, luego, crea un clúster de procesamiento a fin de prepararte para la migración.

  3. Implementación y migración (día 1)

    Después de evaluarla, aprenderás a crear un plan de migración para tu VM monolítica, proceder con una migración completa de imágenes y datos, e implementar tus artefactos recién creados en Kubernetes.

  4. Optimización (día 2).

    Por último, aprenderás a implementar cambios de código fuente en el entorno en contenedores con rapidez y a conocer los microservicios, la observabilidad y las prácticas recomendadas de modernización.

Context

Sin embargo, en la actualidad, una gran parte de las aplicaciones heredadas en empresas grandes son monolíticas y se ejecutan en technology stacks propietarias o máquinas virtuales (VM) de gran procesamiento. Estos servicios suelen ser fundamentales para trabajar con una aplicación más grande, pero acumula muchos costos operativos, como tarifas operativas y de licencia. Sin embargo, debido a su naturaleza, puede ser difícil migrar las VM a una solución más liviana, como los contenedores en un clúster de GKE.

En este instructivo, aprenderás a aprovechar Migrate to Containers para transferir con facilidad y sin cambios de código un servicio monolítico y su base de datos de una VM a un entorno de GKE, lo que reduce las tarifas operativas y las dificultades de desarrollo. Luego, aprenderás a aprovechar la carga de trabajo recién migrada mediante la implementación de cambios en el código fuente y las prácticas recomendadas de modernización.

La aplicación de ejemplo que se usa es Bank of Anthos, una simulación de un servicio bancario minorista, con sus propias bases de datos y red de procesamiento de transacciones.

Los servicios de contacto, usuario y frontend web de Bank for Anthos, junto con la base de datos de cuentas, ya son microservicios alojados en contenedores que se ejecutan en contenedores en GKE. Sin embargo, su registro de transacciones monolíticas y la base de datos de transacciones aún se ejecutan en una sola máquina virtual. Para reducir los costos operativos sin interrumpir ningún flujo de trabajo actual, debes poder migrar esta VM a GKE con facilidad.

Diagrama de arquitectura de Bank for Anthos

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Herramientas requeridas

Puedes seguir este instructivo mediante Cloud Shell, que viene preinstalado con las herramientas de línea de comandos de gcloud, kubectl, git y migctl que se usan en este instructivo. Con Cloud Shell, no necesitas instalar estas herramientas de línea de comandos en tu estación de trabajo.

Para usar Cloud Shell, sigue estos pasos:

  1. Ve a la consola de Google Cloud.
  2. Haz clic en el botón Activar Cloud Shell en la parte superior de la consola de Google Cloud.Botón de activar Shell

    Se abrirá una sesión de Cloud Shell en un marco nuevo en la parte inferior de la consola de Google Cloud, que mostrará una ventana de la línea de comandos.

    Sesión de Cloud Shell

API requeridas

Habilita la compatibilidad con Compute Engine

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita la API de Compute Engine.

    Habilitación de la API

Habilita y configura GKE

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Implementa Bank of Anthos

En esta sección, implementarás la VM monolítica de registro en Compute Engine y crearás el clúster de GKE en el que residirán el resto de los servicios de Bank for Anthos.

  1. Configura las variables de entorno necesarias para la implementación de la aplicación monolítica de Bank for Anthos.

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. Clona el repositorio de Bank for Anthos en tu directorio principal.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. Implementa la aplicación monolítica de registro de Bank of Anthos en Compute Engine.

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    Este comando crea una VM en Compute Engine con la imagen de registro monolítico de Bank for Anthos.

  4. Crea una regla de firewall que permita solicitudes a la instancia de VM en el puerto 8080, que el servicio de frontend usará para comunicarse con la aplicación monolítica de registro.

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. Crea un clúster de GKE que aloje el resto de los servicios de Bank for Anthos.

    gcloud container clusters create boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --subnetwork=default
    
  6. Una vez que se haya creado el clúster, recupera sus credenciales y configura el contexto de Kubernetes para que apunte a él.

    gcloud container clusters get-credentials boa-cluster \
      --zone COMPUTE_ZONE --project=PROJECT_ID
    
  7. Sustituya el ID del proyecto en el ConfigMap que se usa para describir cómo los servicios de GKE pueden comunicarse con la VM monolítica de registro.

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    Consulta este archivo para asegurarte de que los cambios se hayan aplicado correctamente.

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    Deberías ver que el ID del proyecto se interpola con los hosts del servicio de registro.

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. Aplica los diversos servicios de Bank of Anthos en tu clúster.

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    Puedes verificar los estados del Pod con el siguiente comando:

    kubectl get pods
    

    Es posible que todos los Pods tarden unos minutos en estar en funcionamiento.

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. Una vez que todos los Pods estén configurados como Running, puedes encontrar la dirección IP externa del servicio LoadBalancer de frontend.

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. Por último, puedes abrir un navegador y visitar la página web en la dirección IP externa que se encontró antes (asegúrate de usar HTTP, en lugar de HTTPS).

    http://EXTERNAL_IP
    

    Deberías poder acceder con las credenciales predeterminadas y ver las transacciones en el panel. Las transacciones enumeradas provienen de la aplicación monolítica de registro que se aloja actualmente en una VM.

    Captura de pantalla de Bank of Anthos

Limpia

Para evitar cargos innecesarios de Google Cloud, debes borrar los recursos que se usaron en este instructivo en cuanto termines. Estos recursos son los siguientes:

  • El clúster de GKE boa-cluster
  • La VM de Compute Engine ledgermonolith-service

Puedes borrar estos recursos de forma manual o seguir los pasos que se indican a continuación para borrar tu proyecto, lo que también eliminará todos los recursos.

  • En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  • En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  • En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
  • ¿Qué sigue?

    Ahora que habilitaste las API necesarias y, además, implementaste la configuración de Bank for Anthos, puedes pasar a la siguiente sección del instructivo, Descubrimiento y evaluación, en la que aprenderás a usar las herramientas de descubrimiento de migración a fin de evaluar si tu VM es adecuada para la migración con las herramientas de Migrate to Containers.

    Si terminas el instructivo aquí, no olvides limpiar tu proyecto y tus recursos de Google Cloud.