DeploymentConfig vs Deployment en Kubernetes: ¿cuál deberías usar?
En el mundo de Kubernetes y OpenShift, los conceptos de Deployment y DeploymentConfig suelen generar confusión, especialmente cuando se está migrando de un entorno a otro o cuando se evalúan herramientas compatibles con ambos. Aunque tienen objetivos similares —desplegar y gestionar aplicaciones—, su origen, comportamiento y capacidades presentan diferencias importantes.
¿Qué es un Deployment?
Deployment es un recurso nativo de Kubernetes. Permite describir la manera en que se debe desplegar una aplicación, gestionar su ciclo de vida y garantizar la disponibilidad deseada.
Características de un Deployment:
- Escalado automático: se puede combinar con
HorizontalPodAutoscaler. - Actualizaciones declarativas: admite estrategias de rolling update y recreación.
- Rollback automático: si algo falla en el despliegue, puede revertirse.
- Compatibilidad amplia: es el estándar para herramientas basadas directamente en Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: contenedor
image: miimagen:1.0
¿Qué es un DeploymentConfig?
DeploymentConfig es una extensión de OpenShift (no forma parte del core de Kubernetes) que proporciona una funcionalidad similar pero con algunas diferencias clave. Fue diseñado antes de que Deployment se convirtiera en estándar en Kubernetes.
Características de un DeploymentConfig:
- Control más fino sobre los triggers de despliegue: por cambios de imagen, configuración o manual.
- Integración con BuildConfig: ideal para pipelines de CI/CD dentro de OpenShift.
- Gestión más explícita del proceso de despliegue.
- Requiere el controlador de OpenShift: no está disponible fuera de OpenShift.
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: mi-app
spec:
replicas: 3
selector:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: contenedor
image: miimagen:1.0
triggers:
- type: ConfigChange
- type: ImageChange
¿Cuál deberías usar?
| Característica | Deployment (K8s) | DeploymentConfig (OpenShift) |
|---|---|---|
| Nativo en Kubernetes | ✅ | ❌ |
| Soporte en OpenShift | ✅ | ✅ |
| Integración con BuildConfig | ❌ | ✅ |
| Actualizaciones declarativas | ✅ | ✅ |
| Triggers por imagen/config | ❌ | ✅ |
| Portabilidad en Kubernetes y Openshift | ✅ | ❌ |
Recomendación
– Si estás trabajando fuera de OpenShift, la elección es clara: usa Deployment.
– Si estás en OpenShift y necesitas integración con BuildConfig, triggers automáticos o tienes pipelines que dependen de estas características, DeploymentConfig aún tiene valor.
– Sin embargo, Red Hat está promoviendo el uso de recursos estándar de Kubernetes, por lo que Deployment es el camino a seguir en nuevas arquitecturas o cuando se busca portabilidad y compatibilidad con GitOps y herramientas como ArgoCD o Flux.
Entender la diferencia entre Deployment y DeploymentConfig te permitirá tomar decisiones técnicas más informadas al diseñar tus flujos de trabajo en Kubernetes u OpenShift. Siempre que sea posible, prioriza los recursos nativos y estándares de la CNCF para maximizar la interoperabilidad y reducir la dependencia de plataformas específicas.