Controla despliegues en Docker Swarm con confianza: aprende a escalar réplicas, acelerar updates masivos con parallelism y order, y activar rollback automático ante fallos. Mantén el uptime alto incluso en escenarios de alta demanda y CI/CD.
¿Cómo escalar un servicio y simular alta demanda en Docker Swarm?
Al trabajar con servicios críticos, necesitas garantizar que la aplicación no caiga durante cambios frecuentes. Con un servicio como Pinger, puedes simular carga y validar comportamiento en producción sin escribir código nuevo.
Escalar réplicas para alta demanda.
Actualizar argumentos para simular una nueva versión.
Observar tareas para verificar rotaciones.
¿Qué comando usar para cambiar réplicas?
En lugar de usar scale, puedes actualizar el servicio directamente con update y ajustar réplicas:
dockerservice update --replicas 20 pinger
Útil cuando automatizas despliegues y no necesitas ver el output en vivo. Con el modo desacoplado (-d en docker run o docker compose up -d), el control vuelve de inmediato al proceso que orquesta.
¿Cómo validar el estado de las tareas?
Consulta las tareas del servicio y verifica la rotación:
dockerserviceps pinger
Úsalo tras updates para confirmar que cada tarea alcanzó el estado deseado.
¿Qué es update config y cómo acelerar un despliegue?
La especificación del servicio define cómo se actualiza. Con docker service inspect verás update_config, que controla la estrategia de rotación de tareas.
parallelism: cuántas tareas se actualizan al mismo tiempo.
order: define si usar stop-first o start-first.
stop-first: detiene la tarea vieja antes de crear la nueva.
start-first: crea la nueva y luego elimina la vieja. Permite overprovisioning temporal para evitar pérdida de capacidad.
Acelera el despliegue incrementando el parallelism y usando start-first en escenarios productivos:
Con parallelism 4 verás rotaciones por lotes, mucho más rápidas que de a una.
Con start-first mantienes capacidad mientras validas que las nuevas tareas levantan correctamente.
¿Cómo proteger producción con rollback automático ante fallos?
En updates reales, algunos cambios pueden fallar. Swarm te permite definir qué hacer si una tarea nueva no arranca.
failure-action: decide el comportamiento ante fallos: pause, continue o rollback.
monitor: ventana de tiempo para considerar que una tarea arrancó bien. Está expresada en nanosegundos; ajusta el valor si tu servidor tarda varios segundos en iniciar.
max-failure-ratio: porcentaje de fallos permitido antes de activar la acción definida.
rollback_config: misma lógica que update_config, pero aplicada al proceso de rollback.
¿Cómo activar rollback automático y definir el umbral de fallo?
Configura el rollback cuando falle al menos el 50 % de las tareas durante el update:
Paralelismo 0 en rollback indica revertir sin particionar. Útil cuando la app ya está caída y priorizas restaurar capacidad.
Con start-first, el rollback puede ser inmediato: si las nuevas tareas fallan en arrancar, basta con borrar esas tareas nuevas; no hace falta recrear las viejas.
Para provocar y observar la reversión automática, lanza un update con argumentos que sabes que fallarán y verifica cómo Swarm revierte al estado anterior en cuanto el umbral supera el max-failure-ratio.
Habilidades y conceptos aplicados: configuración de update_config y rollback_config. Gestión de parallelism, order (start-first, stop-first). Control de failure-action, monitor y max-failure-ratio. Prácticas orientadas a CI/CD y alta disponibilidad.
¿Tienes una estrategia favorita para combinar start-first con max-failure-ratio sin sacrificar capacidad? Comparte tu enfoque y cuéntanos qué métricas observas al desplegar en producción.
Comandos usados en la clase con el servicio ejemplo pinger
# Actualizar las replicas de un servicio
docker service update --replicas=20 pinger
# Actualizar paralelismo y orden de la configuración de update en el servicio pinger
docker service update --update-parallelism 4--update-order start-first pinger
# Actualizar accion en fallo y radio maximo de falla de la configuración de update en el servicio pinger
docker service update --update-failure-action rollback --update-max-failure-ratio 0.5 pinger
# Actualizar paralelismo de la configuracion de rollback en el servicio de pinger
docker service update --rollback-parallelism 0 pinger
En el entry “UpdateConfig” se puede ver como está configurado el servicio para comportarse cuando tiene que hacer un update y cuando tiene que rotar sus tareas.
El parámetro parallelism es cuántas tareas va a actualizar al mismo tiempo.
El parámetro FailureAction indica qué hacer en caso de que falle al actualizar (en este caso parar de actualizar)
El parámetro Monitor es el tiempo en nanosegundos que tendrá para determinar si el servicio está corriendo correctamente o no.
El parámetro MaxFailureRatio indica el porcentaje de 0 a 1 (siendo 50% = 0.5) de cuántas tareas pueden fallar como máximo
El orden de actualización es dado por el parámetro Order
que hacemos cuando --rollback-failure-action falla!
esas cosas que no te dejan dormir!
Que buena clase y muy practica
docker service scale pinger=10docker service update --replicas=20 pinger
docker service update -d --replicas=20 pinger
docker service inspect pinger
docker service update --update-parallelism 4--update-order start-first pinger
docker service inspect pinger
docker service update --args "ping www.facebook.com" pinger
docker service ps pinger
docker service update --update-failure-action rollback --update-max-failure-ratio 0.5 pinger
docker service update --rollback-parallelism 0 pinger
docker service update --args "ping www." pinger
-- Actualizar las replicas de un servicio, agregando mas replicas
docker service update --replicas=20 pinger
docker service update -d --replicas=20 pinger
-- Actualizar paralelismo y orden de la configuración de update en el servicio pinger (stop-first: Arranca con esta cantidad de tareas, start-first: Creame mas tareas cuando esten listas las nuevas y borramela las viejas)
docker service update --update-parallelism 4--update-order start-first pinger
docker service inspect pinger
docker service update --args "ping www.facebook.com" pinger
-- Actualizar accion en fallo y radio maximo de falla de la configuración de update en el servicio pinger
docker service update --update-failure-action rollback --update-max-failure-ratio 0.5 pinger
-- Actualizar paralelismo de la configuracion de rollback en el servicio de pinger
docker service update --rollback-parallelism 0 pinger
Podemos configurar la forma de actuar cuando falle una actualización, podemos indicar que se pause, siga adelante o haga un rollback.
docker service update --replicas=<n> <servicename>, actualiza el numero de replicas del servicio.
docker service update --update-parallelism <n> --update-order <start-first> <servicename>, configura los n nodos que se actualizaran en paralelo, así como se indica el update order.
docker service update --update-failure-action rollback --update-max-failure-ratio <n> <servicename>, configura el max n de fallas de un update antes de realizar un rollback del servicio.
docker service update --rollback-parallelism <n> <servicename>, configura los n nodos que se haran rollback en paralelo, [0=todos]
Joya.
Que excelente clase. Con esto ya podemos prevenirnos de subir cualquier servicio roto
tengo una duda, habias puesto de ejemplo real de si el servidor normalmente tarda 5 segundos en arrancar y detecta que ya pasó ese tiempo entonces se produce el error y swarm automaticamente hace el rollback, ahora bien como hacemos para que swarm haga esto mismo pero con errores de codigo que no afectan de manera directa como por ej: dar un error 500 o tirar el server abajo, si no que daña el flujo interno al solo ser error de codigo, te doy un ejemplo, no poder conectarse a mysql desde php, hay maneras de hacer un catch de ese tipo de errores y asi podemos tambien hacer que swarm se adapte a nuestro contexto de errores?
Creo que no hay forma, pero igual eso que dices está muy mal hecho. Para eso tienes que tener ambientes de prueba donde antes de deployar en produccion tienes que testear tu codigo, y para eso mismo tambien es docker, una vez testeas el codigo, y corras la imagen, esa misma te va a servir en produccion, porque las imagenes de docker corren en cualquier parte sin problemas, entonces a produccion deberia ser muy dificil que llegue un bug de ese estilo.
Las cuestiones que mencionas no deberian ser tratadas por Swarm, tu aplicacion debe estar configurada para arrogar el error sino pudo conectarse a base de datos. debes hacer que tu aplicacion no se llevante hasta que tenga TODO listo.
Lo normal es que tu app lo intente un cierto numero de veces, sino lo logra entonces no arranca y DEBE salir con un error, y es cuando Swarm entra en accion.
O simplemente confiras el "timeout" de Swarm para que estere que tu aplicacion arranque.
En resumen tu app jamas deberia levantarse hasta que este lista y tambien deberia salir con codigo de error para que swarm sepa que fallo.
docker service update --update-parallelism 4 --update-order start-first pinger
docker service update --update-failure-action rollback --update-max-failure-ratio 0.5 pinger
que cosa mas poderosa alfin estoy trabajando en un cluster , algo que siempre eh querido hacer!!
Excelente clase!
Cual es la diferencia entre utilizar el comando service update --replicas=<num_replicas> <service_name> y el comando service scale <service_name>=<num_replicas>
Son comandos equivalentes, service scale es implemente un atajo para service update --replicas.
Esto mismo está explicado en la documentación de referencia del comando
Es posible saber cuantos nodos puede correr una máquina?
Este servicio “pinger” podria tener base de datos o tiene base de datos?