Cuando hablamos de DevOps, nos referimos a una metodología de desarrollo software que busca la optimización en el proceso de entrega, reduciendo así el tiempo y esfuerzo en cada una de las fases. Esto permite la entrega de código
en producción con mayor rapidez y calidad, reduciendo errores y limitando tareas manuales que no aportan valor añadido al proceso.
Por su parte, una arquitectura de microservicios es una práctica de desarrollo de software orientada al desarrollo de las aplicaciones como conglomerados de pequeños servicios, cada uno con sus propios procesos, y que proporcionan mecanismos
de comunicación con otros servicios e incluso con otras aplicaciones.
El principal objetivo de los microservicios es mejorar la calidad de las entregas y despliegues continuos del software, al mismo tiempo que se aumenta la agilidad y se reduce time to market.
Así, no resulta extraña la relación de los microservicios con la implementación de una metodología DevOps.
En este artículo exploraremos cómo sería un despliegue de microservicios en Kubernetes aplicando dicha filosofía.
Fases del despliegue
Los desarrolladores generan el código que se guarda y versiona a través de un sistema de control de versiones, como Git. Este código es evaluado con Sonarqube para encontrar vulnerabilidades y bugs.
El despliegue del código se realiza mediante un pipeline de Jenkins. Éste descargará el código de Git y lo compilará junto con sus dependencias y el software en el que corre en una imagen de docker. De esta forma, el
código y sus dependencias están encapsulados, lo que evita el clásico problema de “en mi local funciona”.
Entre las grandes ventajas que nos ofrece DevOps, destaca que garantiza que el código se ejecutará siempre del mismo modo, sea cual sea el entorno de trabajo (desarrollo, integración, preproducción, producción, etc.).
Una vez generada esta imagen dockerizada, se sube a un repositorio desde el cual es descargada para su ejecución en Kubernetes.
Por su parte, el despliegue de la aplicación se realiza desde Jenkins. Es, de hecho, en este punto
donde se extraen fácilmente las mayores ventajas del uso de microservicios:
- Escalabilidad: los contenedores son fáciles de crear y destruir y es sencillo cambiar su número como respuesta a una carga.
- Continuidad: la actualización de los contenedores se realiza sin pérdida de servicio para el cliente final.
- Alta disponibilidad: Kubernetes genera un servicio balanceado y autogestionado para acceso haciendo así transparente la administración de los contenedores.
Es por ello que aplicando esta metodología y tecnología, el time to market para infraestructuras complejas con una alta tolerancia a fallos se reduce en tiempo y coste además de tener un posterior mantenimiento mucho mas
sencillo.
