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:
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.
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.
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.
-
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.
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.
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:
- Ve a la consola de Google Cloud.
Haz clic en el botón Activar Cloud Shell en la parte superior de la consola de Google Cloud.
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.
API requeridas
Habilita la compatibilidad con Compute Engine
- 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.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
- Habilita la API de Compute Engine.
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.
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
Clona el repositorio de Bank for Anthos en tu directorio principal.
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
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.
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
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
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
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
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
Una vez que todos los Pods estén configurados como
Running
, puedes encontrar la dirección IP externa del servicio LoadBalancer defrontend
.kubectl get service frontend
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 10.79.248.161 ##.##.##.##. 80:31304/TCP 4m
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.
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.
¿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.