No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Swarm

Curso de Swarm

Guido Vilariño

Guido Vilariño

Controlando el despliegue de servicios

13/24
Recursos

¿Cómo escalar servicios con Docker Swarm?

Para aquellos que buscan optimizar y gestionar servicios de manera eficiente, Docker Swarm ofrece una plataforma robusta que permite escalar, manejar actualizaciones y garantizar máxima disponibilidad. Aquí exploraremos cómo hacerlo en un entorno de alta demanda utilizando un ejemplo práctico con Pingler.

¿Qué es Docker Swarm y por qué debería importarte?

Docker Swarm es una herramienta que permite gestionar y orquestar múltiples contenedores Docker de manera rápida y eficiente. Ofrece una solución ideal para manejar aplicaciones críticas que requieren alta disponibilidad y rápida respuesta frente a fallos.

¿Cómo escalar un servicio en Docker Swarm?

La escalabilidad es esencial cuando se enfrentan altos niveles de demanda. Para escalar un servicio en Docker Swarm, se puede ajustar la cantidad de réplicas de un servicio. Este proceso simula un escenario real de alta demanda.

docker service update --replicas 20 my_service

¿Cómo gestionar actualizaciones en servicios críticos?

Al trabajar con aplicaciones en tiempo real, las actualizaciones deben manejarse con cuidado para evitar tiempos de inactividad. Docker Swarm permite configurar cómo se comportan los servicios durante una actualización.

  • Parallelism: Determina cuántos contenedores se actualizan simultáneamente.
  • Update Order: Define si se deberían crear nuevas tareas antes de eliminar las existentes (Start First) o viceversa (Stop First).
docker service update \
  --update-parallelism 4 \
  --update-order start-first \
  my_service

¿Qué sucede si una actualización falla?

En entornos críticos, manejar errores de actualización automáticamente es esencial. Docker Swarm ofrece configuraciones para definir acciones en caso de fallo, como el rollback automático al detectar errores.

  • Failure Action: Especifica si pausar, continuar, o revertir (rollback) la actualización en caso de fallo.
  • Monitor: Determina el tiempo de monitoreo de una nueva tarea para decidir si ha fallado.
  • Max Failure Ratio: Especifica el porcentaje aceptable de fallos antes de desencadenar una acción correctiva.
docker service update \
  --update-failure-action rollback \
  --update-max-failure-ratio 0.5 \
  my_service

¿Cómo se configura el rollback ante fallos?

El rollback es crucial para asegurar la continuidad del servicio. Cambiar el paralelismo del rollback permite un regreso más rápido a la estabilidad al revertir las versiones anteriores en bloque.

docker service update \
  --rollback-parallelism 0 \
  my_service

¿Qué beneficios ofrece Docker Swarm en la gestión de servicios?

Con Docker Swarm, las empresas pueden asegurar que sus servicios se mantienen operativos y responsivos, incluso bajo circunstancias inesperadas. Este permite proveer un uptime robusto, control eficiente de actualizaciones y gestión automática de fallos.

Si estás en camino de convertirte en un profesional de DevOps o ingeniero de infraestructura, dominar Docker Swarm y sus capacidades de orquestación es una ventaja competitiva crucial. ¡Explora y experimenta más para comprender el potencial completo que esta herramienta tiene para ofrecerte!

Aportes 19

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

  "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            }

que hacemos cuando --rollback-failure-action falla!
esas cosas que no te dejan dormir!

Que buena clase y muy practica

docker service scale pinger=10
docker 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.

Si quieren leer un poco más sobre los estados de las tareas cuando se actualiza el servicio acá dejo el link de la Documentación oficial de Docker
https://docs.docker.com/engine/swarm/how-swarm-mode-works/swarm-task-states/

Para hacer inspect del valor UpdateConfig de un servicio podemos hacer:

docker service inspect --format="{{ json .Spec.UpdateConfig }}" pinger

Intentando hacer roolback de un rolback

  • 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?

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!!

UpdateConfig en Docker Swarm permite gestionar cómo se actualizan los servicios. Sus sub-opciones son: 1. **Parallelism**: determina cuántas tareas se actualizan simultáneamente. Por defecto, es 1, pero puedes aumentar este número para acelerar el proceso en actualizaciones de alta demanda. 2. **Order**: define el orden en que se realizan las actualizaciones. Puede ser "Stop First" (detiene la tarea antigua antes de iniciar la nueva) o "Start First" (crea la nueva tarea antes de detener la antigua). 3. **FailureAction**: especifica qué hacer si una actualización falla. Las opciones incluyen pausar, continuar o realizar un rollback automático. 4. **Monitor**: tiempo en nanosegundos para verificar si una nueva tarea está lista antes de considerar que falló. 5. **MaxFailureRatio**: porcentaje máximo de tareas que pueden fallar antes de que se ejecute un rollback. Estas configuraciones permiten un control detallado sobre el proceso de actualización, optimizando la disponibilidad de los servicios.

Qué buena clase. ¡Gracias Guido!

Buena clase.