Deployment en Kubernetes


Te explico toda la teoría que necesitas saber para entender qué es un Deployment en kubernetes

oscar Escrito por oscar 31 July 2025 560 0

📌 ¿Qué es un Deployment en Kubernetes?

Un Deployment es un objeto de alto nivel de Kubernetes que define y gestiona la creación, actualización y escalado de Pods de manera declarativa. Es la forma más común y recomendada para desplegar aplicaciones en Kubernetes.

El Deployment asegura que siempre haya una cantidad deseada de Pods disponibles y operativos, y permite actualizarlos de forma controlada.

🎯 Objetivos principales de un Deployment

🧱 Componentes de un Deployment

Un archivo de Deployment (.yaml) incluye:

🧠 ¿Cómo funciona internamente?

Kubernetes usa el Deployment Controller que constantemente compara el estado deseado (especificado en el .yaml) con el estado actual del clúster. Si detecta diferencias:

Esto se hace de forma gradual y controlada mediante un rolling update, lo que evita el tiempo de inactividad.

🔁 Actualizaciones controladas

Recreate

Es una estrategia de actualización en la cual Kubernetes primero elimina todos los Pods antiguos antes de crear los nuevos.

  1. Elimina todos los Pods actuales del Deployment.
  2. Espera a que todos los Pods se terminen por completo.
  3. Luego crea los nuevos Pods con la versión actualizada.
spec:
  strategy:
    type: Recreate

Esto es lo opuesto a RollingUpdate, que actualiza los Pods uno por uno sin bajar todo el servicio.

Rolling Updates

La estrategia RollingUpdate permite que los Pods antiguos sean reemplazados gradualmente por Pods nuevos, sin eliminar todos al mismo tiempo. Es decir, la aplicación sigue disponible durante toda la actualización.

En el yaml se coloca:

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  1. Crea un nuevo Pod con la nueva imagen.
  2. Espera a que esté en estado "Listo".
  3. Elimina uno de los Pods antiguos.
  4. Repite el proceso hasta completar el cambio.

🎯 Objetivo: mantener siempre un número mínimo de Pods funcionando. Esto evita que el servicio se caiga.

🔢 Parámetros clave

🔹 maxUnavailable

🔹 maxSurge

♻️ Rollback

Un rollback es la acción de revertir un Deployment a una versión anterior, generalmente porque la nueva actualización falló o tuvo problemas (como errores en la app, fallas de conectividad, caídas, etc.).

Este comando revierte el Deployment a la versión anterior (revisión anterior).

kubectl rollout undo deployment <nombre-del-deployment>

Cada vez que haces una actualización del Deployment (por ejemplo, cambias la imagen), Kubernetes guarda una "revisión" del Deployment. Estas revisiones se numeran automáticamente.

kubectl rollout history deployment <nombre>

📈 Escalado (Scaling)

Puedes aumentar o reducir el número de réplicas fácilmente:

kubectl scale deployment <nombre> --replicas=5

O modificar el campo replicas: en el YAML y aplicar con kubectl apply.

✅ Ventajas de usar Deployments

🧪 Ejemplos

Crear un deploymen manual sin yaml

A continuación, muestro un ejemplo completo de cómo crear un Deployment de forma manual desde la consola con kubectl create deployment, y luego realizar una actualización con rolling update (cambio de versión de NGINX) sin usar archivo YAML.

kubectl create deployment nginx-deployment --image=nginx:1.21

Este comando crea un Deployment con:

Para ver mejor el efecto del rolling update, escálalo a 3 réplicas:

kubectl scale deployment nginx-deployment --replicas=3

Vemos los pods creados:

kubectl get pods

Actualizar la imagen a nginx:1.25 (rolling update)

kubectl set image deployment/nginx-deployment nginx=nginx:1.25 --record

Este comando hace:

kubectl rollout status deployment nginx-deployment

También puedes observar los Pods mientras se actualizan:

kubectl get pods -w

Revisamos los pods y el deployment

kubectl get deploy -o wide

Ver historial de versiones

kubectl rollout history deployment nginx-deployment

Revertir la actualización (opcional)

kubectl rollout undo deployment nginx-deployment

Con estos pasos podemos crear un deployment manual.


Comentario

Debe aceptar antes de enviar