Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

333
Vistas
Réplicas de enjambre de Docker en diferentes nodos

Estoy usando un archivo docker-compose versión 3 con su clave de implementación para ejecutar un enjambre (docker versión 1.13) y me gustaría replicar un servicio para que sea resistente nuevamente a la falla de un solo nodo.

Sin embargo, cuando agrego una sección de implementación como esta:

 deploy: replicas: 2

en mi clúster de cuatro nodos, a veces termino con ambas réplicas programadas en el mismo nodo. Lo que me falta es una restricción que programe las dos instancias en nodos diferentes.

Sé que hay un modo global que podría usar pero que ejecutaría una instancia en cada nodo, es decir, cuatro instancias en mi caso en lugar de solo dos.

¿Existe una forma sencilla de especificar esta restricción de forma genérica sin tener que recurrir a una combinación de global y etiquetas para mantener alejadas las instancias adicionales?

Editar: después de intentarlo de nuevo, encuentro contenedores que se programarán en diferentes nodos esta vez. Estoy empezando a preguntarme si es posible que haya tenido una 'node.hostname == X' .

Edición 2: después de otra actualización del servicio, y sin restricciones de ubicación, el servicio se programa nuevamente en el mismo nodo (como lo muestra ManoMarks Visualizer ):

ingrese la descripción de la imagen aquí

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Extendiendo la respuesta de VonC , y como en su ejemplo está usando un archivo de redacción, no el cli, podría agregar max_replicas_per_node: 1 , como en

 version: '3.8' ... yourservice: deploy: replicas: 2 placement: max_replicas_per_node: 1

La versión 3.8 del esquema de redacción es clave aquí, ya que no hay soporte para max_replicas_per_node por debajo de 3.8 .

Esto se agregó en https://github.com/docker/cli/pull/1410

about 4 years ago · Santiago Trujillo Denunciar

0

docker/cli PR 1612 parece resolver el problema 26259 y se ha lanzado en docker 19.03 .

Se agregó un nuevo conmutador --replicas-max-per-node al servicio docker

como verificarlo

Cree dos servicios y especifique --replicas-max-per-node uno de ellos:

 docker service create --detach=true --name web1 --replicas 2 nginx docker service create --detach=true --name web2 --replicas 2 --replicas-max-per-node 1 nginx

Vea la diferencia en las salidas de comando:

 $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS 0inbv7q148nn web1 replicated 2/2 nginx:latest 9kry59rk4ecr web2 replicated 1/2 (max 1 per node) nginx:latest $ docker service ps --no-trunc web2 ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bf90bhy72o2ry2pj50xh24cfp web2.1 nginx:latest@sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c limint Running Running 34 seconds ago xedop9dwtilok0r56w4g7h5jm web2.2 nginx:latest@sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c Running Pending 35 seconds ago "no suitable node (max replicas per node limit exceed)"

El mensaje de error sería:

 no suitable node (max replicas per node limit exceed)

Ejemplos de Sebastiaan van Stijn :

Cree un servicio con un máximo de 2 réplicas:

 docker service create --replicas=2 --replicas-max-per-node=2 --name test nginx:alpine docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test 2

Actualice el servicio (las réplicas máximas deben mantener su valor)

 docker service update --replicas=1 test docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test 2

Actualice las réplicas máximas a 1:

 docker service update --replicas-max-per-node=1 test docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test 1

Y restablecer a 0:

 docker service update --replicas-max-per-node=0 test docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test 0
about 4 years ago · Santiago Trujillo Denunciar

0

¿Qué versión de docker estás usando? De acuerdo con esta publicación en 1.13, este tipo de problema se ha corregido, eche un vistazo: https://github.com/docker/docker/issues/26259#issuecomment-260899732

Espero que eso responda a tu pregunta.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda