Appearance
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: 256MiGuarda el manifiesto como deployment.yaml y aplícalo:
bash
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods -l app=mi-appEl 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-appSi una actualización causa problemas, se puede revertir a la revisión anterior:
bash
kubectl rollout undo deployment/mi-appEn 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.