Regresar
105

Orquestación: Kubernetes vs Docker Swarm vs "ninguno todavía"

Actualizado: 14/09/2026

Un clúster de Kubernetes gestionado en cualquiera de los proveedores grandes arranca en torno a los 70 dólares al mes solo por el plano de control, antes de levantar un solo contenedor con tu aplicación dentro. A eso hay que sumarle los nodos, el balanceador y el almacenamiento.

Ese número es el punto de partida honesto de esta comparación, porque la orquestación casi nunca se evalúa por lo que cuesta sostenerla, sino por lo que promete resolver.

Y lo que promete es real: reinicia lo que se cae, reparte carga entre máquinas, despliega sin cortar el servicio. La pregunta es si hoy tienes los problemas que eso resuelve.

A la izquierda, tres piezas entre el usuario y la base de datos en un servidor único. A la derecha, siete piezas con un orquestador: balanceador, ingress, service, deployment, pod, contenedor y almacenamiento
Cada capa resuelve algo real. También es una capa más donde buscar cuando la aplicación no responde.

Qué resuelve un orquestador, dicho sin marketing

Un orquestador hace tres cosas que a mano cuestan trabajo, y conviene nombrarlas con precisión porque cada una tiene alternativas mucho más baratas.

Reinicia lo que muere. Si el proceso se cae, lo vuelve a levantar sin que nadie intervenga. Un gestor de procesos del sistema hace lo mismo en una sola máquina, con una línea de configuración.

Reparte réplicas entre máquinas. Si una máquina se apaga, mueve esas réplicas a otra. Esto sí necesita varias máquinas para tener sentido; con una sola no hay nada que repartir.

Despliega sin cortar. Levanta la versión nueva, comprueba que responde, y recién entonces retira la vieja. Un servidor web con dos procesos alternados consigue algo equivalente, con bastante menos maquinaria.

La diferencia no está en si esas tres cosas son valiosas, sino en cuántas máquinas y cuántos servicios tienes. Con una máquina y un servicio, las tres tienen soluciones que caben en un archivo de configuración.

Lo que se paga, y no es solo la factura

El costo mensual es el más visible y el menos importante. Los otros dos se pagan en tiempo.

El primero es el vocabulario. Para desplegar un contenedor hay que entender pod, deployment, service, ingress, namespace y configmap, y saber cuál de ellos es el que está mal cuando la aplicación no responde. Eso no es complejidad accidental: cada objeto existe por un motivo. Pero es conocimiento que hay que adquirir antes de poder diagnosticar nada.

El segundo es que ese conocimiento no se comparte con nadie más de tu proyecto si trabajas solo. Cuando el clúster falla un domingo, la persona que tiene que entender los siete objetos del diagrama eres tú.

La pregunta que ordena la decisión

No es cuántos usuarios tienes ni cuánto tráfico esperas. Es cuántas máquinas necesitas mantener.

Con una, un orquestador es una capa de abstracción sobre algo que no hace falta abstraer. A partir de tres o cuatro, con despliegues frecuentes, empieza a devolver más de lo que cuesta.

El escalón que casi nadie menciona

La comparación suele presentarse como si hubiera dos opciones: servidor manual o Kubernetes. En medio hay un escalón que resuelve la mayoría de los casos y que rara vez aparece en la propuesta.

Docker Compose sobre una sola máquina da contenedores, reinicio automático, variables de entorno separadas del código y despliegues reproducibles. Todo lo que la mayoría de los proyectos pequeños necesita de verdad.

services:
  app:
    image: mi-app:1.4.2
    restart: unless-stopped        # se vuelve a levantar si muere
    env_file: .env
    depends_on: [db]
  db:
    image: postgres:16
    restart: unless-stopped
    volumes:
      - datos:/var/lib/postgresql/data

volumes:
  datos:

Doce líneas, una máquina, cero costo de plano de control. No reparte carga entre servidores ni sobrevive a la caída de la máquina, y para muchos proyectos eso está perfectamente bien: si el servidor se apaga, se levanta otro y se corre el mismo archivo.

El salto a un orquestador se justifica cuando esa última frase deja de ser aceptable, es decir, cuando el tiempo que tardas en levantar otra máquina a mano cuesta más que mantener el clúster.

El estado, que es donde todo se complica

Los contenedores parten de una idea sencilla: se crean y se destruyen sin que importe cuál era cuál. Esa propiedad es la que permite reiniciar, mover y replicar sin pensar.

Y es también la que choca de frente con cualquier cosa que necesite recordar algo. Un contenedor que muere se lleva consigo todo lo que había escrito dentro.

Las tres cosas que más se pierden por no haber pensado en esto, y que funcionan perfectamente en desarrollo:

  • Archivos subidos por usuarios. Guardados en el disco del contenedor, desaparecen en el siguiente despliegue. Y con varias réplicas es peor: el archivo aterriza en una y las otras no lo ven, así que la mitad de las descargas fallan.
  • Sesiones en memoria. Con dos réplicas, el usuario inicia sesión contra una y la siguiente petición llega a la otra, que no lo conoce. El síntoma es que la sesión se cae sola cada dos por tres.
  • Trabajos programados. Si el proceso que envía correos corre dentro de la aplicación y hay tres réplicas, se envía tres veces.

Ninguno es un problema del orquestador: son consecuencias de replicar algo que asumía ser único. Pero aparecen justo cuando adoptas orquestación, y por eso conviene saberlo antes.

Las soluciones son conocidas y tienen un costo: los archivos van a un almacenamiento externo, las sesiones a un almacén compartido, y los trabajos programados salen de la aplicación a un componente que corre una sola vez. Cada una es una pieza más.

La base de datos merece su propia decisión

Hay una pregunta que aparece sola cuando se adopta un orquestador: si todo va en contenedores, ¿la base de datos también?

Técnicamente se puede, y los orquestadores tienen mecanismos pensados para eso, con almacenamiento persistente e identidad estable por réplica. La pregunta no es si se puede, es si te conviene.

Lo que cambia al meterla dentro

Pasas a ser responsable de copias de seguridad, actualizaciones de versión, réplicas y recuperación ante un fallo del disco, todo ello dentro de un entorno donde los contenedores están pensados para ser reemplazables.

Un servicio gestionado te cobra por eso mismo y lo hace un equipo dedicado. Para un proyecto pequeño, esa factura suele ser más barata que la noche en que hay que restaurar a mano.

La combinación que mejor funciona en proyectos chicos es mixta: la aplicación en contenedores, porque es lo que cambia todas las semanas, y la base de datos gestionada fuera, porque es lo que no quieres tocar.

Esto además simplifica el paso siguiente, porque la parte con estado deja de moverse cuando cambias de plataforma.

Empaqueta antes de orquestar

Hay un orden que conviene respetar, y es el que separa el valor del costo. Empaquetar la aplicación en una imagen aporta desde el primer día, aunque nunca llegues a orquestar nada.

Una imagen resuelve el problema más viejo del despliegue: que el entorno de tu máquina y el del servidor no son iguales. Con una imagen, lo que probaste es exactamente lo que corre.

# Construir una vez, con una etiqueta que identifique la versión
docker build -t mi-app:1.4.2 .

# La misma imagen en pruebas y en producción: nada se recompila
docker push registro.ejemplo.com/mi-app:1.4.2

Ese detalle de la etiqueta importa más de lo que parece. Desplegar con la etiqueta latest hace imposible saber qué versión está corriendo y, sobre todo, volver a la anterior cuando algo falla. Con una versión explícita, revertir es desplegar el número de ayer.

Con la aplicación ya empaquetada, la decisión de orquestación se vuelve reversible: pasar de una máquina con Compose a Swarm o a Kubernetes cambia cómo se despliega lo mismo, no lo que despliegas. Y si el proyecto nunca crece hasta necesitarlo, no perdiste nada, porque la parte que hiciste era la que aportaba valor igual.

Tres señales de que ya toca orquestar

  • Tienes más de tres máquinas y las administras a mano. Ahí el trabajo repetido ya supera el costo de aprender la herramienta.
  • Varios equipos despliegan servicios distintos. El orquestador se convierte en el contrato común entre ellos.
  • Necesitas escalar y reducir según la carga, varias veces al día. Hacerlo a mano deja de ser viable.

Si ninguna aplica, adoptar orquestación es adelantar un costo cierto contra un beneficio que llegará, si acaso, más adelante. Y la migración desde Compose hacia un orquestador es bastante directa: los contenedores ya están hechos, que es la parte que de verdad cuesta.

Una máquina, contenedores con Docker Compose o incluso la aplicación instalada directamente, y un gestor de procesos que la reinicia si muere.

Ventaja: tres piezas que entender, una factura, y cuando algo falla sabes exactamente dónde mirar.

Costo: si la máquina se apaga, el servicio se cae hasta que alguien levante otra. No hay reparto de carga entre servidores.

Úsalo mientras una máquina aguante la carga y puedas tolerar el rato que toma reponerla. Evítalo cuando la caída de un servidor sea inaceptable.

Orquestación incluida en Docker: varios nodos, réplicas y despliegues progresivos, con una sintaxis muy parecida a la de Compose.

Ventaja: la curva de aprendizaje es corta si ya usas Compose, y cubre el caso de varias máquinas sin el vocabulario completo de Kubernetes.

Costo: su ecosistema y su comunidad son mucho menores, así que hay menos respuestas cuando algo se rompe y menos herramientas alrededor.

Úsalo cuando necesitas varias máquinas y valoras la simplicidad. Evítalo si vas a depender de integraciones de terceros.

El estándar de facto: despliegues declarativos, escalado automático, y un ecosistema enorme de herramientas alrededor.

Ventaja: resuelve el caso de muchos servicios y muchos equipos, es común a todos los proveedores, y hay documentación y perfiles profesionales de sobra.

Costo: el plano de control se paga aunque no despliegues nada, y hay siete objetos entre el usuario y tu aplicación que alguien tiene que entender para diagnosticar un fallo.

Úsalo con varios equipos, muchos servicios o escalado frecuente. Evítalo mientras una persona lleve el proyecto.

Cómo decidir sin adelantar el costo

El orden que menos arrepentimientos produce es empezar por contenedores, no por orquestación. Empaquetar la aplicación en una imagen es la parte que aporta valor desde el primer día y la que se reutiliza sin importar a dónde vayas después.

Con eso hecho, la decisión se vuelve reversible: pasar de Compose a Swarm o a Kubernetes es cambiar cómo se despliega lo mismo, no reescribir nada.

Tres preguntas, en este orden:

  1. ¿Cuántas máquinas mantienes? Si es una, no hay caso. Si son más de tres a mano, ya lo hay.
  2. ¿Cuánto tiempo puedes estar caído? Si tolerar media hora es aceptable, una máquina con un buen respaldo alcanza.
  3. ¿Quién va a diagnosticar el clúster a las tres de la mañana? Si la respuesta eres tú y nadie más, ese conocimiento es parte del costo.

Y una advertencia sobre lo que vas a recibir si preguntas sin dar contexto: la respuesta por defecto tiende a ser Kubernetes, porque es lo más representado en la documentación técnica reciente. Decir una máquina, un servicio, una persona cambia la propuesta por completo.


Comparativa intermedio Vigente para: Kubernetes 1.31, Docker Engine 27
Indica la versión de la herramienta o estándar sobre la que está escrita esta comparativa. El resto de las conclusiones puede variar en versiones futuras.