Skip to content

Despliegues y workloads ​

Los workloads son los recursos que administran las aplicaciones y otros procesos ejecutados por el clúster. Para una aplicación web sin estado, lo habitual es crear un Deployment que gestione sus Pods.

Deployment ​

Este manifiesto despliega dos réplicas de una aplicación de ejemplo:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
        - name: app
          image: mi-usuario/mi-app:1.0.0
          ports:
            - name: http
              containerPort: 3000
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 256Mi

Guarda el manifiesto como deployment.yaml y aplícalo:

bash
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods -l app=mi-app

El selector del Deployment debe coincidir con las etiquetas de la plantilla del Pod. Los requests participan en la planificación del Pod; los limits acotan el consumo permitido. Ajusta estos valores con métricas y pruebas de carga.

Actualizaciones ​

Al cambiar la etiqueta de imagen en el Deployment, Kubernetes crea una nueva revisión y sustituye los Pods gradualmente:

bash
kubectl set image deployment/mi-app app=mi-usuario/mi-app:1.1.0
kubectl rollout status deployment/mi-app
kubectl rollout history deployment/mi-app

Si una actualización causa problemas, se puede revertir a la revisión anterior:

bash
kubectl rollout undo deployment/mi-app

En equipos y entornos reales, es preferible mantener la imagen declarada en los manifiestos o en la herramienta de despliegue utilizada, para que el estado deseado y el historial de cambios sigan siendo reproducibles.

Otros tipos de workload ​

  • StatefulSet: aplicaciones con identidad de red estable y almacenamiento persistente asociado a cada réplica, como algunas bases de datos.
  • DaemonSet: ejecuta una réplica de un Pod en cada nodo seleccionado, por ejemplo, un agente de monitorización.
  • Job: ejecuta una tarea hasta completarla.
  • CronJob: crea Jobs según una programación.

Elige el recurso según el ciclo de vida de la aplicación. Un Deployment no proporciona por sí solo replicación ni alta disponibilidad a nivel de datos para una base de datos.