used swarm que managing machine for español contenedores cluster docker deployment configuration etcd docker-swarm-mode

swarm - Autoconfiguración automática de un clúster de etcd como servicio de enjambre Docker



operational model used by docker swarm for managing a cluster (1)

Quiero encontrar una manera de implementar un clúster de etcd como un servicio de Docker Swarm que se configuraría automáticamente sin ninguna interacción. Básicamente, pienso en algo en espíritu de este comando:

docker service create --name etcd --replicas 3 my-custom-image/etcd

Supongo que la red de superposición está configurada para ser segura y proporcionar tanto cifrado como autenticación, por lo que creo que no necesito TLS, ni siquiera --auto-tls . No quiera que un dolor de cabeza adicional encuentre una manera de aprovisionar los certificados, cuando esto se pueda resolver en la otra capa.

Necesito un --name único para cada instancia, pero puedo obtener eso de un script de punto de entrada que usaría export ETCD_NAME=$(hostname --short) .

El problema es que estoy atascado en la configuración inicial. Según la guía de agrupación, hay tres opciones, pero ninguna parece encajar:

  • El escenario de descubrimiento de DNS es el más cercano a lo que estoy buscando, pero Docker no admite el descubrimiento de registros SRV de DNS en este momento. Puedo buscar, etcd y obtendré todas las IP de los contenedores de mis nodos, pero no hay registros _etcd-server._tcp .
  • No puedo crear ETCD_INITIAL_CLUSTER automáticamente porque, si bien conozco las IP, no conozco los nombres de los otros nodos y no conozco ninguna forma de resolverlos. (No voy a exponer el socket de la API de Docker al contenedor etcd para esto).
  • No hay un clúster de etcd preexistente, y al proporcionar el URI de configuración inicial de discovery.etcd.io es una posible solución alternativa que me interesa no hacer esto. docker-compose.yml objetivo es "simplemente desplegar una pila desde este docker-compose.yml y automáticamente hará lo correcto, sin hacer preguntas" en un escenario sin complicaciones.

¿Hay algún truco que pueda tirar?


Como ha dicho correctamente, conoce las direcciones IP de los contenedores de sus nodos, por lo que el truco sugerido es simplemente construir los nombres necesarios de los etcd como derivados de la dirección IP de cada nodo.

  • dentro de cada contenedor, etcd se nombra usando la IP de este contenedor en particular, es decir, etcd-$ip
  • ETCD_INITIAL_CLUSTER se llena utilizando las IP de otros contenedores de manera similar

Los nombres podrían ser tan simples como etcd-$ip o incluso mejor, es decir, podríamos usar la netmask de netmask para calcular la IP del nodo en esta red para hacer que los nombres sean más bonitos.

En este caso, en una configuración simple de 3 nodos, uno podría terminar teniendo nombres como etcd-02 etcd-03 etc.

No existen requisitos específicos para el atributo de name , solo necesita ser único y legible para el ser humano. Aunque de hecho parece un truco, podría funcionar.