DeployConfig y Rolling Updates
Resumen
DeployConfig (recurso nativo de OpenShift vs Deployment de K8s): características, rolling updates, rollbacks, y ciclo de vida de despliegues.
Conceptos Clave
DeployConfig vs Deployment
| Aspecto | Deployment (K8s) | DeployConfig (OpenShift) |
|---|---|---|
| Origen | Kubernetes nativo | OpenShift específico |
| Integración | Genérica | Profunda con OpenShift |
| ImageStream | Simple ref | Triggers automáticos |
| Rolling updates | Manual | Automático |
| Hooks | No | Sí (pre/post deploy) |
| Uso actual | Recomendado en 4.x | Legacy, aún funciona |
DeployConfig Básico
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: myapp
spec:
replicas: 3
selector:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: myapp:latest
name: app
triggers:
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- app
from:
kind: ImageStreamTag
name: myapp:latestRolling Updates
Automático
Versión anterior (3 Pods v1.0)
↓ (crea 1 Pod v2.0, termina 1 v1.0)
2x v1.0 + 1x v2.0
↓ (crea 1 Pod v2.0, termina 1 v1.0)
1x v1.0 + 2x v2.0
↓ (crea 1 Pod v2.0, termina último v1.0)
3x v2.0 ✓ (sin downtime)
Configuración
spec:
strategy:
type: Rolling
rollingParams:
updatePeriodSeconds: 1
intervalSeconds: 1
timeoutSeconds: 600
maxSurge: 1
maxUnavailable: 1- maxSurge: Pods excesoivos permitidos durante actualización
- maxUnavailable: Pods no disponibles permitidos
Rollback (Deshacer actualización)
Ver historia
oc rollout history dc/myapp
oc rollout history dc/myapp --revision=2Rollback a anterior
oc rollout undo dc/myappRollback a versión específica
oc rollout undo dc/myapp --to-revision=3Lifecycle Hooks
Pre-deployment
spec:
strategy:
type: Rolling
rollingParams:
pre:
failurePolicy: Abort
execNewPod:
containerName: app
command: ['/bin/sh', '-c', 'npm run migrate']Uso: Migraciones de BD antes de desplegar
Post-deployment
post:
failurePolicy: Ignore
execNewPod:
containerName: app
command: ['/bin/sh', '-c', 'npm run seed']Uso: Seed data después de desplegar
ImageChange Trigger
triggers:
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- app
from:
kind: ImageStreamTag
name: myapp:latestResultado: Si ImageStream myapp:latest cambia → redeploy automático
Otros Triggers
- ConfigChange: Cambio en DC
- Manual:
oc rollout latest
Relaciones
Conecta con
- OpenShift específico: Alternativa a Deployment
- Integración: ImageStream triggers
- Patrón: Reemplazado por Deployment en versiones recientes