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.

  1. 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

  1. Configura un despliegue azul/verde en tu entorno utilizando Kubernetes.
  2. Verifica que puedes cambiar el tráfico entre las versiones azul y verde sin tiempo de inactividad.

  1. 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

  1. Configura un despliegue canario en tu entorno utilizando Kubernetes.
  2. Monitorea el comportamiento de la nueva versión y ajusta el tráfico según sea necesario.

  1. 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

  1. Configura un despliegue rolling en tu entorno utilizando Kubernetes.
  2. Asegúrate de que la aplicación sigue siendo accesible durante el despliegue.

  1. 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

  1. Configura un despliegue de sombra en tu entorno utilizando Kubernetes.
  2. 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.

© Copyright 2024. Todos los derechos reservados