Este documento te ayuda a planificar y diseñar una ruta de migración de implementaciones manuales a implementaciones automatizadas en contenedores en Google Cloud mediante herramientas nativas de la nube y servicios administrados de Google Cloud.
Este documento es parte de la siguiente serie de varias partes sobre la migración a Google Cloud:
- Migra a Google Cloud: comienza ahora
- Migra a Google Cloud: evalúa y descubre tus cargas de trabajo
- Migra a Google Cloud: construye tu base
- Migra a Google Cloud: transfiere los conjuntos de datos grandes
- Migra a Google Cloud: implementa las cargas de trabajo
- Migra a Google Cloud: Migra de implementaciones manuales a implementaciones automatizadas alojadas en contenedores (este documento)
- Migra a Google Cloud: optimiza tu entorno
- Migra a Google Cloud: prácticas recomendadas para validar un plan de migración
- Migra a Google Cloud: Minimiza los costos
Este documento es útil si planeas modernizar los procesos de implementación, si migras de procesos de implementación manuales y heredados a implementaciones automatizadas y en contenedores, o si evalúas la oportunidad de migrar y quieres explorar cómo se vería.
Antes de comenzar esta migración, debes evaluar su alcance y el estado de los procesos de implementación actuales, además de establecer las expectativas y los objetivos. Debes elegir el punto de partida según la forma en la que implementas las cargas de trabajo en la actualidad:
- Implementas las cargas de trabajo de forma manual.
- Implementas las cargas de trabajo con herramientas de administración de configuración (CM).
Es difícil pasar de las implementaciones manuales directamente a las implementaciones automatizadas en su totalidad en contenedores. En su lugar, recomendamos los siguientes pasos de migración:
Durante cada paso de migración, debes seguir las fases definidas en Migra a Google Cloud: comienza ahora:
- Evalúa y descubre las cargas de trabajo.
- Planifica y compila una base.
- Implementar tus cargas de trabajo
- Optimiza el entorno y las cargas de trabajo.
En el siguiente diagrama, se ilustran las fases de migración de cada paso.
Esta ruta de migración es ideal, pero puedes detenerte antes en el proceso de migración si los beneficios de avanzar al paso siguiente superan los costos para tu caso particular. Por ejemplo, si no planeas implementar las cargas de trabajo de forma automática, puedes detenerte después de la implementación mediante las herramientas de organización de contenedores. Puedes revisar este documento en el futuro, cuando estés listo para continuar con el proceso.
Cuando avanzas de un paso de la migración a otro, hay una fase de transición en la que puedes usar diferentes procesos de implementación al mismo tiempo. De hecho, no necesitas elegir solo una opción de implementación para todas las cargas de trabajo. Por ejemplo, es posible que tengas un entorno híbrido en el que administras la infraestructura mediante la aplicación del patrón IaC, a la vez que implementas las cargas de trabajo mediante herramientas de organización de contenedores.
Migra a herramientas de organización de contenedores
Uno de los primeros pasos para dejar atrás las implementaciones manuales es implementar las cargas de trabajo con las herramientas de organización de contenedores. En este paso, diseñarás e implementarás un proceso de implementación para manejar las cargas de trabajo en contenedores con las herramientas de organización de contenedores, como Kubernetes.
Si las cargas de trabajo aún no están en contenedores, deberás hacer un gran esfuerzo para ponerlas en contenedores. No todas las cargas de trabajo son adecuadas para la creación de contenedores. Si implementas una carga de trabajo que no está lista para la nube ni para la creación de contenedores, es posible que no valga la pena crear contenedores para las cargas de trabajo. Algunas cargas de trabajo ni siquiera admiten la creación de contenedores por razones técnicas o de licencias.
Evalúa y descubre las cargas de trabajo
Para definir el alcance de la migración, primero necesitas un inventario de los artefactos que produces e implementas junto con sus dependencias en otros sistemas y artefactos. Para compilar este inventario, debes usar la experiencia de los equipos que diseñaron e implementaron los procesos actuales de producción y de implementación de artefactos. En el documento Migra a Google Cloud: Evalúa y descubre tus cargas de trabajo, se analiza cómo evaluar el entorno durante una migración y cómo compilar un inventario de Apps.
Para cada artefacto, debes evaluar la cobertura de prueba actual. Debes tener una cobertura de prueba adecuada para todos los artefactos antes de continuar con el siguiente paso. Si tienes que probar y validar de forma manual cada artefacto, no te beneficiarás de la automatización. Adopta una metodología que destaque la importancia de las pruebas, como el desarrollo basado en pruebas.
Cuando evalúes los procedimientos, considera cuántas versiones diferentes de los artefactos podrías tener en producción. Por ejemplo, si la última versión de un artefacto es posterior a las instancias que debes admitir, tienes que diseñar un modelo que admita ambas versiones.
También considera la estrategia de ramificación que usas para administrar la base de código. Una estrategia de ramificación es solo parte de un modelo de colaboración que debes analizar; debes evaluar los procesos de colaboración más amplios dentro y fuera de los equipos. Por ejemplo, si adoptas una estrategia de ramificación flexible, pero no la adaptas al proceso de comunicación, es posible que se reduzca la eficiencia de esos equipos.
En esta fase de evaluación, también determinas cómo hacer que los artefactos que produces sean más eficientes y adecuados para la creación de contenedores que los procesos de implementación actuales. Una forma de mejorar la eficiencia es evaluar la siguiente información:
- Partes comunes: Evalúa qué tienen en común los artefactos. Por ejemplo, si tienes bibliotecas comunes y otras dependencias del entorno de ejecución, considera consolidarlas en un entorno de ejecución.
- Requisitos del entorno de ejecución: Evalúa si puedes optimizar los entornos de ejecución para reducir su varianza. Por ejemplo, si usas diferentes entornos de ejecución para ejecutar todas las cargas de trabajo, considera comenzar desde una base común a fin de reducir la carga de mantenimiento.
- Componentes innecesarios: Evalúa si los artefactos contienen partes innecesarias. Por ejemplo, puedes tener herramientas de uso, como herramientas de depuración y solución de problemas, que no sean estrictamente necesarias.
- Inyección de secretos y configuración: Evalúa cómo estás configurando los artefactos según los requisitos del entorno de ejecución. Por ejemplo, es posible que el sistema de inyección de configuración actual no admita un entorno en contenedores.
- Requisitos de seguridad: Evalúa si el modelo de seguridad de contenedores cumple con tus requisitos. Por ejemplo, el modelo de seguridad de un entorno en contenedores podría entrar en conflicto con el requisito de una carga de trabajo para tener privilegios de superusuario, acceso directo a recursos del sistema o usuario único.
- Requisitos de lógica de implementación: Evalúa si necesitas implementar procesos de implementación avanzados. Por ejemplo, si necesitas implementar un proceso de implementación Canary, podrías determinar si la herramienta de organización de contenedores lo admite.
Planifica y compila una base
A continuación, aprovisiona y configura la infraestructura y los servicios de Google Cloud para admitir los procesos de implementación en Google Cloud. El documento Migra a Google Cloud: Compila tu base contiene orientación sobre cómo compilar tu base.
Para lograr la flexibilidad necesaria para administrar tus recursos de Google Cloud, te recomendamos que diseñes una jerarquía de recursos de Google Cloud que admita varios entornos, como el desarrollo, las pruebas y cargas de trabajo de producción.
Cuando estableces identidades de usuario y servicio, a fin de obtener el mejor aislamiento, necesitas al menos una cuenta de servicio para cada paso del proceso de implementación. Por ejemplo, si el proceso ejecuta pasos para producir el artefacto y administrar el almacenamiento de ese artefacto en un repositorio, necesitas al menos dos cuentas de servicio. Si deseas aprovisionar y configurar entornos de desarrollo y prueba para los procesos de implementación, es posible que debas crear más cuentas de servicio. Si tienes un conjunto distinto de cuentas de servicio por entorno, los entornos serán independientes entre sí. Aunque esta configuración aumenta la complejidad de la infraestructura y pone más carga al equipo de operaciones, te da la flexibilidad de probar y validar cada cambio de forma independiente en los procesos de implementación.
También debes aprovisionar y configurar los servicios y la infraestructura para admitir las cargas de trabajo en contenedores:
- Configura un registro destinado a almacenar las imágenes de contenedor, como Artifact Registry. Para aislar este registro y las tareas de mantenimiento relacionadas, configúralo en un proyecto exclusivo de Google Cloud.
- Aprovisiona y configura los clústeres de Kubernetes que necesitas para admitir las cargas de trabajo. Según el entorno actual y los objetivos, puedes usar servicios como Google Kubernetes Engine (GKE) y GKE Enterprise.
- Aprovisiona y configura el almacenamiento persistente para las cargas de trabajo con estado. Para obtener más información, consulta la Descripción general del almacenamiento de Google Kubernetes Engine.
Si usas las herramientas de organización de contenedores, no tendrás que preocuparte por aprovisionar tu infraestructura cuando implementes cargas de trabajo nuevas. Por ejemplo, puedes usar Autopilot para administrar la configuración de tu clúster de GKE de forma automática.
Implementa los artefactos mediante herramientas de organización de contenedores
En función de los requisitos que recopilaste en la fase de evaluación y la fase de fundamentación de este paso, debes hacer lo siguiente:
- Crea contenedores para las cargas de trabajo.
- Implementa procedimientos de implementación para manejar las cargas de trabajo en contenedores.
Crear contenedores para las cargas de trabajo es una tarea no trivial. Lo que sigue es una lista generalizada de actividades que debes adaptar y extender para crear contenedores para las cargas de trabajo. Tu objetivo es cubrir tus propias necesidades, como la administración de redes y tráfico, el almacenamiento persistente, la inyección de secretos y configuración y los requisitos de tolerancia a errores. En este documento, se abarcan dos actividades: la compilación de un conjunto de imágenes de contenedor a fin de usar como base y la compilación de un conjunto de imágenes de contenedor para las cargas de trabajo.
Primero, automatizas la producción de artefactos, por lo que no tienes que producir de forma manual una imagen nueva para cada implementación nueva. El proceso de compilación de artefactos debe activarse de forma automática cada vez que se modifica el código fuente para que tengas comentarios inmediatos sobre cada cambio.
Ejecuta los siguientes pasos para producir cada imagen:
- Compila la imagen.
- Ejecuta el conjunto de pruebas.
- Almacena la imagen en un registro.
Por ejemplo, puedes usar Cloud Build para compilar los artefactos, ejecutar los conjuntos de prueba en función de ellos y, si las pruebas son exitosas, almacenar los resultados en Container Registry. Si deseas obtener más información sobre la compilación de imágenes de contenedor, consulta Prácticas recomendadas para compilar contenedores.
También debes establecer reglas y convenciones para identificar los artefactos. Cuando generes las imágenes, etiqueta cada una para que se pueda repetir cada ejecución de los procesos. Por ejemplo, una convención popular es identificar versiones mediante control de versiones semánticas, que consiste en etiquetar las imágenes de contenedor cuando produzcas una versión. Cuando generas imágenes que aún necesitan trabajo antes de lanzar la versión, puedes usar un identificador que las vincule al punto en la base de código desde el que las produjo el proceso. Por ejemplo, si usas repositorios de Git, puedes usar el hash de confirmación como un identificador para la imagen del contenedor correspondiente que generaste cuando enviaste una confirmación a la rama principal de tu repositorio.
Durante la fase de evaluación de este paso, recopilaste información sobre los artefactos, las partes comunes y los requisitos del tiempo de ejecución. Con esta información, puedes diseñar y compilar un conjunto de imágenes base de contenedores y otro conjunto de imágenes para las cargas de trabajo. Usa las imágenes base como punto de partida a fin de compilar las imágenes para las cargas de trabajo. El conjunto de imágenes base debe ser compatible y controlarse de forma estricta para evitar la proliferación de entornos de tiempo de ejecución no compatibles.
Cuando produzcas imágenes de contenedor a partir de imágenes base, recuerda extender los conjuntos de pruebas para cubrir las imágenes, no solo las cargas de trabajo dentro de cada imagen. Puedes usar herramientas como InSpec, ServerSpec y RSpec para ejecutar conjuntos de prueba de cumplimiento en los entornos de ejecución.
Cuando termines de crear contenedores para las cargas de trabajo e implementar procedimientos a fin de generar de manera automática esas imágenes de contenedor, debes implementar los procedimientos de implementación con el objetivo de usar herramientas de organización de contenedores. En la fase de evaluación, debes usar la información sobre los requisitos de la lógica de implementación que recopilaste para diseñar procedimientos de implementación enriquecidos. Mediante el uso de herramientas de organización de contenedores, puedes enfocarte en redactar la lógica de implementación con los mecanismos proporcionados, en lugar de tener que implementarlos de forma manual.
Cuando diseñes e implementes los procedimientos de implementación, considera cómo inyectar archivos de configuración y secretos en las cargas de trabajo, además de cómo administrar datos para cargas de trabajo con estado. La inyección de secretos y los archivos de configuración son fundamentales para producir artefactos inmutables. Si implementas artefactos inmutables, puedes hacer lo siguiente:
- Por ejemplo, puedes implementar los artefactos en el entorno de desarrollo. Luego, después de probarlos y validarlos, los trasladas al entorno de control de calidad. Por último, los trasladas al entorno de producción.
- Así disminuyen las posibilidades de que ocurran problemas en los entornos de producción porque el mismo artefacto pasó por varias actividades de prueba y validación.
Si las cargas de trabajo tienen estado, te sugerimos aprovisionar y configurar el almacenamiento persistente necesario para los datos. En Google Cloud, tienes diferentes opciones:
- Discos persistentes administrados con GKE
- Servicios de bases de datos completamente administradas, como Cloud SQL, Firestore y Spanner
- Servicios de almacenamiento de archivos, como Filestore
- Servicios de depósito de objetos, como Cloud Storage
Cuando puedas producir de forma automática los artefactos para implementar, podrás configurar los entornos de ejecución de las herramientas que usas a fin de implementar las cargas de trabajo. Para controlar el entorno de ejecución de las herramientas de implementación, puedes configurar el entorno como una compilación en Cloud Build y usar esa compilación como el único medio para implementar los artefactos en los entornos. Con Cloud Build, no necesitas que cada operador configure un entorno de ejecución en las máquinas. Puedes auditar de inmediato el procedimiento que crea el entorno de ejecución y los contenidos si inspeccionas el código fuente de la configuración de compilación.
Optimiza el entorno
Después de implementar el proceso de implementación, puedes usar las herramientas de organización de contenedores para comenzar a optimizar los procesos de implementación. Para obtener más información, consulta Migra a Google Cloud: Optimiza tu entorno.
Los requisitos de esta iteración de optimización son los siguientes:
- Extiende el sistema de supervisión según sea necesario.
- Extiende la cobertura de la prueba.
- Aumenta la seguridad del entorno.
Extiende el sistema de supervisión para que cubra la nueva producción de artefactos, los procedimientos de implementación y todos los entornos de ejecución nuevos.
Si deseas supervisar, automatizar y codificar de manera eficaz los procesos tanto como sea posible, recomendamos que aumentes la cobertura de las pruebas. En la fase de evaluación, te aseguraste de tener al menos una cobertura de prueba de extremo a extremo. Durante la fase de optimización, puedes expandir los conjuntos de pruebas para cubrir más casos de uso.
Por último, si deseas aumentar la seguridad de los entornos, puedes configurar la autorización binaria para permitir que solo se implemente un conjunto de imágenes firmadas en los clústeres. También puedes habilitar Artifact Analysis para analizar las imágenes de contenedores almacenadas en Artifact Registry en busca de vulnerabilidades.
Migra a la automatización de implementaciones
Después de migrar a las herramientas de organización de contenedores, puedes pasar a la automatización de implementación completa y extender los procedimientos de implementación y de producción de artefactos para implementar de forma automática las cargas de trabajo.
Evalúa y descubre las cargas de trabajo
A partir de la evaluación anterior, ahora puedes enfocarte en los requisitos de los procesos de implementación:
- Pasos de aprobación manual: Evalúa si necesitas admitir pasos manuales en los procedimientos de implementación.
- Unidades de implementación por tiempo: Evalúa cuántas unidades de implementación por tiempo necesitas admitir.
- Factores que causan una implementación nueva: Evalúa qué sistemas externos interactúan con los procedimientos de implementación.
Si necesitas admitir pasos de implementación manuales, esto no significa que el procedimiento no se pueda automatizar. En este caso, debes automatizar cada paso del procedimiento y colocar las puertas de aprobación manual donde corresponda.
Admitir varias implementaciones por día o por hora es más complejo que admitir algunas implementaciones por mes o por año. Sin embargo, si no implementas con frecuencia, es posible que se reduzcan la agilidad y la capacidad para reaccionar ante los problemas y enviar funciones nuevas a las cargas de trabajo. Por esta razón, antes de diseñar y de implementar un procedimiento de implementación automatizado por completo, es una buena idea establecer tus expectativas y objetivos.
También evalúa qué factores activan una implementación nueva en los entornos de ejecución. Por ejemplo, puedes implementar cada versión nueva en el entorno de desarrollo, pero puedes implementarla en el entorno de control de calidad solo si cumple con ciertos criterios de calidad.
Planifica y compila una base
Para extender la base que compilaste en el paso anterior, aprovisiona y configura servicios para que sean compatibles con los procedimientos de implementación automatizados.
Para cada uno de los entornos de ejecución, configura la infraestructura necesaria a fin de que sea compatible con los procedimientos de implementación. Por ejemplo, si aprovisionas y configuras los procedimientos de implementación en los entornos de desarrollo, control de calidad, preproducción y producción, tienes la libertad y la flexibilidad para probar los cambios en los procedimientos. Sin embargo, si usas una sola infraestructura para implementar los entornos de ejecución, los entornos son más fáciles de administrar, pero menos flexibles cuando necesitas cambiar los procedimientos.
Cuando aprovisionas las cuentas de servicio y las funciones, considera aislar los entornos y las cargas de trabajo entre sí mediante la creación de cuentas de servicio dedicadas que no compartan responsabilidades. Por ejemplo, no vuelvas a usar las mismas cuentas de servicio para los diferentes entornos de ejecución.
Implementa los artefactos con procedimientos completamente automatizados
En esta fase, debes configurar los procedimientos de implementación para implementar los artefactos sin ninguna intervención manual, excepto los pasos de aprobación.
Puedes usar herramientas como Cloud Deploy para implementar los procedimientos de implementación automatizados, de acuerdo con los requisitos que recopilaste en la fase de evaluación de este paso de migración.
Para cualquier artefacto determinado, cada procedimiento de implementación debe ejecutar las siguientes tareas:
- Implementa el artefacto en el entorno de ejecución de destino.
- Inyecta los archivos de configuración y los secretos al artefacto implementado.
- Ejecuta el conjunto de pruebas de cumplimiento en el artefacto recién implementado.
- Cambia el artefacto al entorno de producción.
Asegúrate de que los procedimientos de implementación proporcionen interfaces para activar implementaciones nuevas de acuerdo con los requisitos.
La revisión del código es un paso necesario cuando se implementan procedimientos de implementación automatizados, debido al corto ciclo de comentarios que forma parte de estos procedimientos por diseño. Por ejemplo, si implementas cambios en el entorno de producción sin ninguna revisión, afectarás la estabilidad y la confiabilidad del entorno de producción. Un cambio no revisado, con formato incorrecto o malicioso puede causar una interrupción del servicio.
Optimiza el entorno
Después de automatizar los procedimientos de implementación, puedes ejecutar otra iteración de optimización. Los requisitos de esta iteración son los siguientes:
- Extiende el sistema de supervisión para cubrir la infraestructura que respalda los procedimientos de implementación automatizada.
- Implementa patrones de implementación más avanzados.
- Implementa un procedimiento de emergencia.
Un sistema de supervisión eficaz permite planificar optimizaciones adicionales para el entorno. Cuando mides el comportamiento del entorno, puedes encontrar cuellos de botella que dificultan el rendimiento y otros problemas, como vulnerabilidades y accesos no autorizados o accidentales. Por ejemplo, puedes configurar el entorno de modo que recibas alertas cuando el consumo de ciertos recursos alcance un límite.
Cuando puedas organizar contenedores de manera eficiente, podrás implementar patrones de implementación avanzados según tus necesidades. Por ejemplo, puedes realizar implementaciones azul-verde para aumentar la confiabilidad del entorno y reducir el impacto de cualquier problema para los usuarios.
¿Qué sigue?
- Optimiza el entorno.
- Obtén información sobre cómo encontrar ayuda para tus migraciones.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.