En este documento se explica cómo planificar y diseñar una ruta de migración de los despliegues manuales a los automatizados y en contenedores en Google Cloud con herramientas nativas de la nube y Google Cloud servicios gestionados.
Este documento forma parte de la siguiente serie de artículos sobre la migración aGoogle Cloud:
- Migrar a Google Cloud: primeros pasos
- Migración a Google Cloud: evaluar e identificar cargas de trabajo
- Migrar a Google Cloud: planificar y sentar las bases
- Migrar a: Google Cloudtransferir conjuntos de datos grandes
- Migrar a: desplegar tus cargas de trabajo Google Cloud
- Migrar a Google Cloud: migrar de implementaciones manuales a implementaciones automatizadas en contenedores (este documento)
- Migrar a: Google Cloudoptimizar el entorno
- Migrar a: prácticas recomendadas para validar un plan de migración Google Cloud
- Migrar a Google Cloud: minimizar los costes
Este documento es útil si tienes previsto modernizar tus procesos de implementación, si vas a migrar de procesos de implementación manuales y antiguos a implementaciones automatizadas y en contenedores, o si estás evaluando la oportunidad de migrar y quieres saber cómo sería.
Antes de iniciar esta migración, debes evaluar el alcance de la migración y el estado de tus procesos de implementación actuales, así como definir tus expectativas y objetivos. Elige el punto de partida en función de cómo implementes actualmente tus cargas de trabajo:
- Estás desplegando tus cargas de trabajo manualmente.
- Estás desplegando tus cargas de trabajo con herramientas de gestión de la configuración (CM).
Es difícil pasar de los despliegues manuales a los totalmente automatizados y en contenedores. En su lugar, te recomendamos que sigas estos pasos para la migración:
Esta ruta de migración es la ideal, pero puedes detenerte antes en el proceso de migración si las ventajas de pasar al siguiente paso superan los costes en tu caso concreto. Por ejemplo, si no tienes previsto desplegar automáticamente tus cargas de trabajo, puedes detenerte después de desplegarlas mediante herramientas de orquestación de contenedores. Puedes volver a consultar este documento más adelante, cuando quieras continuar con el proceso.
Cuando pasas de una fase de la migración a otra, hay una fase de transición en la que puedes usar diferentes procesos de implementación al mismo tiempo. De hecho, no tienes que elegir una sola opción de implementación para todas tus cargas de trabajo. Por ejemplo, puedes tener un entorno híbrido en el que implementes determinadas cargas de trabajo con herramientas de CM, mientras que otras cargas de trabajo se implementan con herramientas de orquestación de contenedores.
Para llevar a cabo esta migración a Google Cloud, te recomendamos que sigas el framework de migración descrito en el artículo Migrar a Google Cloud: primeros pasos.
En el siguiente diagrama se muestra el recorrido de tu migración.
Puedes migrar de tu entorno de origen a Google Cloud en una serie de iteraciones. Por ejemplo, puedes migrar algunas cargas de trabajo primero y otras más adelante. En cada iteración de migración independiente, debes seguir las fases del marco de migración general:
- Evalúa e identifica tus cargas de trabajo y datos.
- Planifica y construye una base sobre Google Cloud.
- Migra tus cargas de trabajo y datos a Google Cloud.
- Optimiza tu Google Cloud entorno.
Para obtener más información sobre las fases de este marco, consulta el artículo Migrar a Google Cloud: primeros pasos.
Para diseñar un plan de migración eficaz, te recomendamos que valides cada paso del plan y que tengas una estrategia de restauración. Para validar tu plan de migración, consulta el artículo Migrar a Google Cloud: prácticas recomendadas para validar un plan de migración.
Migrar a herramientas de orquestación de contenedores
Uno de los primeros pasos para dejar de hacer implementaciones manuales es implementar tus cargas de trabajo con herramientas de orquestación de contenedores. En este paso, diseñarás e implementarás un proceso de despliegue para gestionar cargas de trabajo en contenedores mediante herramientas de orquestación de contenedores, como Kubernetes.
Si tus cargas de trabajo aún no están contenedorizadas, tendrás que dedicar mucho tiempo a hacerlo. No todas las cargas de trabajo son adecuadas para la contenerización. Si vas a implementar una carga de trabajo que no está preparada para la nube o para la contenerización, puede que no merezca la pena contenerizarla. Algunas cargas de trabajo ni siquiera admiten la contenerización por motivos técnicos o de licencias.
Evaluar e identificar cargas de trabajo
Para definir el alcance de la migración, primero debes hacer un inventario de los artefactos que vas a producir e implementar, así como de sus dependencias de otros sistemas y artefactos. Para crear este inventario, debes recurrir a los conocimientos de los equipos que diseñaron e implementaron tus procesos actuales de producción y despliegue de artefactos. En el documento Migración a: evaluar e identificar cargas de trabajo se explica cómo evaluar tu entorno durante una migración y cómo crear un inventario de aplicaciones. Google Cloud
En cada artefacto, debe evaluar la cobertura de las pruebas. Debes tener una cobertura de pruebas adecuada para todos tus artefactos antes de pasar al siguiente paso. Si tienes que probar y validar manualmente cada artefacto, no te beneficias de la automatización. Adopta una metodología que destaque la importancia de las pruebas, como el desarrollo basado en pruebas.
Cuando evalúes tus procesos, ten en cuenta cuántas versiones diferentes de tus artefactos puedes tener en producción. Por ejemplo, si la versión más reciente de un artefacto tiene varias versiones más que las instancias que debes admitir, tienes que diseñar un modelo que admita ambas versiones.
También debes tener en cuenta la estrategia de ramificación que usas para gestionar tu base de código. Una estrategia de ramificación es solo una parte de un modelo de colaboración que debes evaluar. También debes analizar los procesos de colaboración más amplios dentro y fuera de tus equipos. Por ejemplo, si adoptas una estrategia de ramificación flexible, pero no la adaptas al proceso de comunicación, la eficiencia de esos equipos podría reducirse.
En esta fase de evaluación, también determinarás cómo puedes hacer que los artefactos que produces sean más eficientes y adecuados para la contenerización que tus procesos de implementación actuales. Una forma de mejorar la eficiencia es evaluar lo siguiente:
- Partes comunes: evalúa qué tienen en común tus artefactos. Por ejemplo, si tienes bibliotecas comunes y otras dependencias de tiempo de ejecución, plantéate consolidarlas en un entorno de tiempo 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 tiempo de ejecución para ejecutar todas tus cargas de trabajo, plantéate empezar con una base común para reducir la carga de mantenimiento.
- Componentes innecesarios: evalúa si tus artefactos contienen partes innecesarias. Por ejemplo, puede que tengas herramientas de utilidad, como herramientas de depuración y solución de problemas, que no sean estrictamente necesarias.
- Configuración e inyección de secretos: evalúa cómo configuras tus artefactos según los requisitos de tu entorno de tiempo de ejecución. Por ejemplo, es posible que tu sistema de inyección de configuración actual no admita un entorno contenedorizado.
- Requisitos de seguridad: evalúa si tu modelo de seguridad de contenedores cumple tus requisitos. Por ejemplo, el modelo de seguridad de un entorno contenedorizado puede no ser compatible con el requisito de una carga de trabajo de tener privilegios de superusuario, acceso directo a los recursos del sistema o un único arrendatario.
- Requisitos de la lógica de implementación: evalúa si necesitas implementar procesos de implementación avanzados. Por ejemplo, si necesitas implementar un proceso de lanzamiento canary, puedes determinar si la herramienta de orquestación de contenedores es compatible con él.
Planificar y crear una base
En la fase de planificación y creación, aprovisionas y configuras la infraestructura para hacer lo siguiente:
- Compatibilidad con tus cargas de trabajo en tu Google Cloud entorno.
- Conecta tu entorno de origen y tu entorno de Google Cloud para completar la migración.
La fase de planificación y creación se compone de las siguientes tareas:
- Crea una jerarquía de recursos.
- Configura la gestión de identidades y accesos (IAM) de Google Cloud.
- Configura la facturación
- Configura la conectividad de red.
- Refuerza tu seguridad.
- Configura el almacenamiento de registros, la monitorización y las alertas.
Para obtener más información sobre cada una de estas tareas, consulta el artículo Migrar a Google Cloud: planificar y crear la base.
Para conseguir la flexibilidad necesaria para gestionar tus Google Cloud recursos, te recomendamos que diseñes unaGoogle Cloud jerarquía de recursos que admita varios entornos, como los de desarrollo, pruebas y cargas de trabajo de producción.
Cuando establezcas identidades de usuario y de servicio, para conseguir el mejor aislamiento, necesitas al menos una cuenta de servicio para cada paso del proceso de implementación. Por ejemplo, si tu proceso ejecuta pasos para generar el artefacto y gestionar el almacenamiento de ese artefacto en un repositorio, necesitas al menos dos cuentas de servicio. Si quieres aprovisionar y configurar entornos de desarrollo y pruebas para tus procesos de implementación, es posible que tengas que 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 tu infraestructura y supone una mayor carga para tu equipo de operaciones, te ofrece la flexibilidad de probar y validar de forma independiente cada cambio en los procesos de implementación.
También debes aprovisionar y configurar los servicios y la infraestructura para admitir tus cargas de trabajo en contenedores:
- Configura un registro para almacenar tus imágenes de contenedor, como Artifact Registry, y, para aislar este registro y las tareas de mantenimiento relacionadas, configúralo en un proyecto Google Cloud dedicado.
- Aprovisiona y configura los clústeres de Kubernetes que necesites para admitir tus cargas de trabajo. En función de tu entorno y tus objetivos, puedes usar servicios como Google Kubernetes Engine (GKE).
- Aprovisiona y configura almacenamiento persistente para tus cargas de trabajo con reconocimiento del estado. Para obtener más información, consulta la descripción general del almacenamiento de Google Kubernetes Engine.
Si usas herramientas de orquestación de contenedores, no tendrás que preocuparte por aprovisionar tu infraestructura al implementar nuevas cargas de trabajo. Por ejemplo, puedes usar Autopilot para gestionar automáticamente la configuración de tu clúster de GKE.
Desplegar artefactos con herramientas de orquestación de contenedores
En función de los requisitos que hayas recogido en la fase de evaluación y en la fase de base de este paso, haz lo siguiente:
- Conteneriza tus cargas de trabajo.
- Implementa procesos de implementación para gestionar tus cargas de trabajo en contenedores.
Contenerizar tus cargas de trabajo no es una tarea trivial. A continuación, se muestra una lista general de las actividades que debes adaptar y ampliar para contenerizar tus cargas de trabajo. Tu objetivo es cubrir tus propias necesidades, como la gestión de redes y tráfico, el almacenamiento persistente, la inyección de secretos y configuraciones, y los requisitos de tolerancia a fallos. En este documento se describen dos actividades: crear un conjunto de imágenes de contenedor para usar como base y crear un conjunto de imágenes de contenedor para tus cargas de trabajo.
Primero, automatiza la producción de artefactos para no tener que generar manualmente una imagen nueva para cada nueva implementación. El proceso de compilación de artefactos se debe activar automáticamente cada vez que se modifique el código fuente para que recibas comentarios inmediatos sobre cada cambio.
Para generar cada imagen, sigue estos pasos:
- Crea la imagen.
- Ejecuta la suite de pruebas.
- Almacena la imagen en un registro.
Por ejemplo, puedes usar Cloud Build para compilar tus artefactos, ejecutar los conjuntos de pruebas en ellos y, si las pruebas se completan correctamente, almacenar los resultados en Artifact Registry.
También debes establecer reglas y convenciones para identificar tus artefactos. Cuando produzcas tus imágenes, etiqueta cada una para que cada ejecución de tus procesos sea repetible. Por ejemplo, una práctica habitual es identificar las versiones mediante el control de versiones semántico, que consiste en etiquetar las imágenes de contenedor cuando se lanza una versión. Cuando generas imágenes que aún necesitan trabajo antes de publicarse, puedes usar un identificador que las vincule al punto del código base desde el que tu proceso las ha generado. Por ejemplo, si usas repositorios de Git, puedes usar el hash de confirmación como identificador de la imagen de contenedor correspondiente que has generado al enviar una confirmación a la rama principal de tu repositorio.
Durante la fase de evaluación de este paso, has recogido información sobre tus artefactos, sus partes comunes y sus requisitos de tiempo de ejecución. Con esta información, puedes diseñar y crear un conjunto de imágenes de contenedor base y otro conjunto de imágenes para tus cargas de trabajo. Las imágenes base se usan como punto de partida para crear las imágenes de tus cargas de trabajo. El conjunto de imágenes base debe controlarse y admitirse estrictamente para evitar la proliferación de entornos de tiempo de ejecución no admitidos.
Cuando produzcas imágenes de contenedor a partir de imágenes base, recuerda ampliar tus conjuntos de pruebas para que abarquen las imágenes, no solo las cargas de trabajo de cada imagen. Puedes usar herramientas como InSpec para ejecutar conjuntos de pruebas de cumplimiento en tus entornos de tiempo de ejecución.
Cuando termines de contenerizar tus cargas de trabajo e implementar procesos para producir automáticamente esas imágenes de contenedor, implementa los procesos de implementación para usar herramientas de orquestación de contenedores. En la fase de evaluación, se usa la información sobre los requisitos de la lógica de implementación que se ha recogido para diseñar procesos de implementación complejos. Si usas herramientas de orquestación de contenedores, puedes centrarte en componer la lógica de implementación con los mecanismos proporcionados, en lugar de tener que implementarlos manualmente. Por ejemplo, puedes usar Cloud Deploy para implementar tus procesos de despliegue.
Al diseñar e implementar los procesos de despliegue, ten en cuenta cómo insertar archivos de configuración y secretos en tus cargas de trabajo, así como gestionar los datos de las cargas de trabajo con estado. Los archivos de configuración y la inyección de secretos son fundamentales para generar artefactos inmutables. Si implementas artefactos inmutables, puedes hacer lo siguiente:
- Por ejemplo, puedes implementar tus artefactos en tu entorno de desarrollo. Después de probarlas y validarlas, las trasladas a tu entorno de control de calidad. Por último, los mueve al entorno de producción.
- De esta forma, se reducen las probabilidades de que se produzcan problemas en los entornos de producción, ya que el mismo artefacto ha pasado por varias actividades de prueba y validación.
Si tus cargas de trabajo tienen estado, te recomendamos que aprovisiones y configures el almacenamiento persistente necesario para tus datos. En Google Cloud, tienes diferentes opciones:
- Discos persistentes gestionados con GKE
- Servicios de bases de datos totalmente gestionados, como Cloud SQL, Firestore y Spanner
- Servicios de almacenamiento de archivos, como Filestore
- Servicios de almacenamiento de objetos como Cloud Storage
Optimizar el entorno
Una vez que hayas implementado el proceso de implementación, puedes usar herramientas de orquestación de contenedores para empezar a optimizar los procesos de implementación. Para obtener más información, consulta el artículo Migrar a Google Cloud: optimizar el entorno.
Los requisitos de esta iteración de optimización son los siguientes:
- Amplía tu sistema de monitorización según sea necesario.
- Amplía la cobertura de las pruebas.
- Aumenta la seguridad de tu entorno.
Amplías tu sistema de monitorización para que cubra la producción de tu nuevo artefacto, tus procesos de implementación y todos tus nuevos entornos de tiempo de ejecución.
Si quieres monitorizar, automatizar y codificar tus procesos de la forma más eficaz posible, te recomendamos que aumentes la cobertura de tus pruebas. En la fase de evaluación, te aseguraste de tener al menos la cobertura mínima de pruebas integrales. Durante la fase de optimización, puedes ampliar tus conjuntos de pruebas para cubrir más casos prácticos.
Por último, si quieres aumentar la seguridad de tus entornos, puedes configurar la autorización binaria para permitir que solo se despliegue un conjunto de imágenes firmadas en tus clústeres. También puedes habilitar Artifact Analysis para analizar las vulnerabilidades de las imágenes de contenedor almacenadas en Artifact Registry.
Migrar a la automatización de despliegues
Después de migrar a herramientas de orquestación de contenedores, puedes pasar a la automatización completa de la implementación y ampliar los procesos de producción e implementación de artefactos para implementar automáticamente tus cargas de trabajo.
Evaluar e identificar cargas de trabajo
Partiendo de la evaluación anterior, ahora puedes centrarte en los requisitos de tus procesos de implementación:
- Pasos de aprobación manual: evalúa si necesitas incluir pasos manuales en tus procesos de implementación.
- Unidades de implementación por periodo: evalúa cuántas unidades de implementación por periodo necesitas.
- Factores que provocan una nueva implementación: evalúa qué sistemas externos interactúan con tus procesos de implementación.
Si necesitas admitir pasos de implementación manuales, no significa que tu proceso no se pueda automatizar. En este caso, automatizas cada paso del proceso y colocas las puertas de aprobación manual donde corresponda.
Admitir varios lanzamientos al día o a la hora es más complejo que admitir unos pocos al mes o al año. Sin embargo, si no lo haces a menudo, puede que se reduzcan tu agilidad y tu capacidad para reaccionar ante problemas y lanzar nuevas funciones en tus cargas de trabajo. Por este motivo, antes de diseñar e implementar un proceso de despliegue totalmente automatizado, es recomendable definir tus expectativas y objetivos.
También debes evaluar qué factores activan una nueva implementación en tus entornos de tiempo de ejecución. Por ejemplo, puede implementar cada nueva versión en su entorno de desarrollo, pero solo en su entorno de control de calidad si cumple determinados criterios de calidad.
Planificar y crear una base
Para ampliar la base que has creado en el paso anterior, aprovisiona y configura servicios para admitir tus procesos de implementación automatizados.
En cada uno de tus entornos de tiempo de ejecución, configura la infraestructura necesaria para admitir tus procesos de implementación. Por ejemplo, si aprovisionas y configuras tus procesos de implementación en los entornos de desarrollo, control de calidad, preproducción y producción, tendrás la libertad y la flexibilidad necesarias para probar los cambios en tus procesos. Sin embargo, si usas una sola infraestructura para implementar tus entornos de ejecución, estos serán más fáciles de gestionar, pero menos flexibles cuando necesites cambiar tus procesos.
Cuando aprovisiones las cuentas de servicio y los roles, plantéate aislar tus entornos y tus cargas de trabajo entre sí creando cuentas de servicio específicas que no compartan responsabilidades. Por ejemplo, no reutilices las mismas cuentas de servicio en tus diferentes entornos de tiempo de ejecución.
Despliega tus artefactos con procesos totalmente automatizados
En esta fase, configura los procesos de implementación para implementar los artefactos sin intervenciones manuales, salvo los pasos de aprobación.
Puedes usar herramientas como Cloud Deploy para implementar tus procesos de implementación automatizados, de acuerdo con los requisitos que hayas recogido en la fase de evaluación de este paso de migración.
En el caso de un artefacto concreto, cada proceso de implementación debe ejecutar las siguientes tareas:
- Despliega el artefacto en el entorno de ejecución de destino.
- Inserta los archivos de configuración y los secretos en el artefacto implementado.
- Ejecuta la suite de pruebas de cumplimiento en el artefacto recién implementado.
- Promueve el artefacto al entorno de producción.
Asegúrate de que tus procesos de implementación proporcionen interfaces para activar nuevas implementaciones según tus requisitos.
La revisión del código es un paso necesario al implementar procesos de implementación automatizados debido al breve ciclo de comentarios que forma parte de estos procesos por diseño. Por ejemplo, si implementas cambios en tu entorno de producción sin ninguna revisión, afectará a la estabilidad y la fiabilidad de dicho entorno. Un cambio malicioso, con formato incorrecto o sin revisar puede provocar una interrupción del servicio.
Optimizar el entorno
Una vez que hayas automatizado los procesos de implementación, puedes realizar otra iteración de optimización. Los requisitos de esta iteración son los siguientes:
- Amplía tu sistema de monitorización para que cubra la infraestructura que admite tus procesos de despliegue automatizados.
- Implementa patrones de despliegue más avanzados.
- Implementa un proceso de acceso de emergencia.
Un sistema de monitorización eficaz te permite planificar más optimizaciones para tu entorno. Cuando mides el comportamiento de tu entorno, puedes detectar los cuellos de botella que dificultan el rendimiento u otros problemas, como accesos y vulnerabilidades no autorizados o accidentales. Por ejemplo, puedes configurar tu entorno para recibir alertas cuando el consumo de determinados recursos alcance un umbral.
Si puedes orquestar contenedores de forma eficiente, podrás implementar patrones de implementación avanzados en función de tus necesidades. Por ejemplo, puedes implementar despliegues azul/verde para aumentar la fiabilidad de tu entorno y reducir el impacto de cualquier problema en tus usuarios.
Siguientes pasos
- Optimiza tu entorno.
- Consulta cuándo pedir ayuda para tus migraciones.
- Para ver más arquitecturas de referencia, diagramas y prácticas recomendadas, consulta el centro de arquitectura de Cloud.
Colaboradores
Autor: Marco Ferrari | Arquitecto de soluciones en la nube