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.

 

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *