En este tema, exploraremos diversas estrategias de despliegue que se utilizan en el Despliegue Continuo (CD). Estas estrategias son esenciales para minimizar el tiempo de inactividad, reducir riesgos y asegurar una transición suave de una versión a otra. A continuación, desglosaremos cada estrategia, proporcionando ejemplos y ejercicios prácticos para reforzar los conceptos.
- Despliegue en Azul/Verde (Blue/Green Deployment)
Concepto
El despliegue en azul/verde implica tener dos entornos de producción idénticos: uno activo (verde) y otro inactivo (azul). La nueva versión del software se despliega en el entorno inactivo. Una vez que se verifica que la nueva versión funciona correctamente, el tráfico se redirige al entorno inactivo, que ahora se convierte en el activo.
Ventajas
- Minimiza el tiempo de inactividad: El cambio entre versiones es casi instantáneo.
- Facilita la reversión: Si algo sale mal, es fácil volver a la versión anterior.
Desventajas
- Costos: Requiere el doble de recursos, ya que se mantienen dos entornos de producción.
Ejemplo
# Ejemplo de configuración de un despliegue azul/verde en Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: my-app-blue spec: replicas: 3 template: metadata: labels: app: my-app version: blue spec: containers: - name: my-app image: my-app:blue --- apiVersion: apps/v1 kind: Deployment metadata: name: my-app-green spec: replicas: 3 template: metadata: labels: app: my-app version: green spec: containers: - name: my-app image: my-app:green
Ejercicio
- Configura un despliegue azul/verde en tu entorno utilizando Kubernetes.
- Verifica que puedes cambiar el tráfico entre las versiones azul y verde sin tiempo de inactividad.
- Despliegue Canario (Canary Deployment)
Concepto
El despliegue canario implica liberar la nueva versión del software a un pequeño subconjunto de usuarios antes de hacerla disponible para todos. Esto permite probar la nueva versión en un entorno de producción real con un riesgo mínimo.
Ventajas
- Reducción de riesgos: Solo un pequeño porcentaje de usuarios se ve afectado si hay problemas.
- Feedback temprano: Permite obtener retroalimentación temprana sobre la nueva versión.
Desventajas
- Complejidad: Requiere una gestión cuidadosa del tráfico y monitoreo.
Ejemplo
# Ejemplo de configuración de un despliegue canario en Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: my-app-canary spec: replicas: 1 template: metadata: labels: app: my-app version: canary spec: containers: - name: my-app image: my-app:canary --- apiVersion: apps/v1 kind: Deployment metadata: name: my-app-stable spec: replicas: 9 template: metadata: labels: app: my-app version: stable spec: containers: - name: my-app image: my-app:stable
Ejercicio
- Configura un despliegue canario en tu entorno utilizando Kubernetes.
- Monitorea el comportamiento de la nueva versión y ajusta el tráfico según sea necesario.
- Despliegue Rolling (Rolling Deployment)
Concepto
El despliegue rolling actualiza gradualmente las instancias de la aplicación con la nueva versión, una a la vez, sin tiempo de inactividad. Esto asegura que siempre haya instancias disponibles para manejar el tráfico.
Ventajas
- Sin tiempo de inactividad: La aplicación sigue siendo accesible durante el despliegue.
- Despliegue gradual: Permite detectar problemas antes de que afecten a todos los usuarios.
Desventajas
- Complejidad en la gestión: Requiere un monitoreo cuidadoso para asegurar que las nuevas instancias funcionen correctamente.
Ejemplo
# Ejemplo de configuración de un despliegue rolling en Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-app:latest
Ejercicio
- Configura un despliegue rolling en tu entorno utilizando Kubernetes.
- Asegúrate de que la aplicación sigue siendo accesible durante el despliegue.
- Despliegue de Sombra (Shadow Deployment)
Concepto
El despliegue de sombra implica desplegar la nueva versión en paralelo con la versión actual, pero sin dirigir el tráfico de usuarios reales a la nueva versión. En su lugar, se envía una copia del tráfico a la nueva versión para probar su comportamiento.
Ventajas
- Pruebas en producción: Permite probar la nueva versión en un entorno de producción real sin afectar a los usuarios.
- Detección temprana de problemas: Identifica problemas antes de que la nueva versión se haga pública.
Desventajas
- Complejidad: Requiere duplicar el tráfico y gestionar dos versiones en paralelo.
- Costos: Puede ser costoso en términos de recursos.
Ejemplo
# Ejemplo de configuración de un despliegue de sombra en Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: my-app-shadow spec: replicas: 1 template: metadata: labels: app: my-app version: shadow spec: containers: - name: my-app image: my-app:shadow
Ejercicio
- Configura un despliegue de sombra en tu entorno utilizando Kubernetes.
- Envía una copia del tráfico a la nueva versión y monitorea su comportamiento.
Conclusión
En esta sección, hemos explorado varias estrategias de despliegue, cada una con sus propias ventajas y desventajas. La elección de la estrategia adecuada depende de las necesidades específicas de tu proyecto y de los recursos disponibles. Asegúrate de practicar cada una de estas estrategias en un entorno controlado para comprender mejor sus implicaciones y beneficios.
En el siguiente módulo, profundizaremos en la automatización del despliegue, donde aprenderás a implementar estas estrategias de manera eficiente utilizando herramientas de CI/CD.
Curso de CI/CD: Integración y Despliegue Continuo
Módulo 1: Introducción a CI/CD
Módulo 2: Integración Continua (CI)
- Introducción a la Integración Continua
- Configuración de un Entorno de CI
- Automatización de la Construcción
- Pruebas Automatizadas
- Integración con Control de Versiones
Módulo 3: Despliegue Continuo (CD)
- Introducción al Despliegue Continuo
- Automatización del Despliegue
- Estrategias de Despliegue
- Monitoreo y Retroalimentación
Módulo 4: Prácticas Avanzadas de CI/CD
Módulo 5: Implementación de CI/CD en Proyectos Reales
Módulo 6: Herramientas y Tecnologías
Módulo 7: Ejercicios Prácticos
- Ejercicio 1: Configuración de un Pipeline Básico
- Ejercicio 2: Integración de Pruebas Automatizadas
- Ejercicio 3: Despliegue en un Entorno de Producción
- Ejercicio 4: Monitoreo y Retroalimentación