2016-01-20 18 views
6

Provo a configurare il docker cluster con swarm e consul. Ho manager, host1 e host2.
Gestisco i contenitori consul e swarm manager sul gestore.I "--cluster-store" e "--cluster-advertise" non funzionano

$ docker run --rm -p 8500:8500 progrium/consul -server -bootstrap 
$ docker run -d -p 2377:2375 swarm manage consul://<manager>:8500 

Su host1 e host2, io modificare le opzioni di demone con --cluster-store e --cluster-advertise, e riavviare docker daemon.

host1 
DOCKER_OPTS="--cluster-store=consul://<manager>:8500 --cluster-advertise=<host1>:2375" 
host2 
DOCKER_OPTS="--cluster-store=consul://<manager>:8500 --cluster-advertise=<host2>:2375" 

Quando unisco host1 e host2 allo sciame, non riesce.

host1 $ docker run --rm swarm join --advertise=<host1>:2375 consul://<manager>:8500 
host2 $ docker run --rm swarm join --advertise=<host2>:2375 consul://<manager>:8500 

Dal registro di gestione scia, errore.

time="2016-01-20T02:17:17Z" level=error msg="Get http://<host1>:2375/v1.15/info: dial tcp <host1>:2375: getsockopt: connection refused" 
time="2016-01-20T02:17:20Z" level=error msg="Get http://<host2>:2375/v1.15/info: dial tcp <host2>:2375: getsockopt: connection refused" 
+0

Sono di fronte allo stesso problema. e ho seguito questo link https://docs.docker.com/swarm/install-manual/ –

risposta

0

Sei consulente per la scoperta di reti multihosts o per la scoperta di agenti Swarm?

Hai provato a controllare il consul members? Perché non esegui docker daemon per connettere localmente a a consul e poi a consul join i membri del console? C'è qualche ragione per non farlo?

Suggerisco anche i metodi di file statici per l'individuazione degli agenti Swarm. Il mezzo più veloce, facile e sicuro che conosco!

Si dovrebbe dare un'occhiata a: how to create docker overlay network between multi hosts? può aiutare.

+0

Voglio provare la modalità 'key-value server'. Qual è la differenza tra file statico e 'server valore-chiave'? – firelyu

+0

Come guida, l'opt è '/ usr/bin/daemon docker -H tcp: //0.0.0.0: 2375 -H unix: ///var/run/docker.sock --cluster-advertise eth0: 2375 - -cluster-store console: //127.0.0.1: 8500'. Perché impostare '--cluster-store console: //127.0.0.1: 8500'? Ho impostato '--cluster-store console: // : 8500', e il daemon docker non si avvia. – firelyu

+0

'console' è distribuito. Ogni demone si promuove localmente da console e il console console si unisce ai nodi (e quindi al daemon docker). L'ho impostato localmente, quindi se c'è qualche difetto nella rete, il daemon non ne sarà influenzato. Funziona bene. La differenza tra archivio valori-chiave e file statico è che il file statico non richiede altro che un file. La rete non è utilizzata per la scoperta dell'agente, è la più sicura, più semplice e veloce in quanto non utilizza nient'altro che un semplice file sul master Swarm. Non sono necessari client/server né applicazioni distribuite. – Auzias

3

Dal momento che sono venuto su un problema simile, ho finalmente scoperto perché non ha funzionato (nel mio esempio sto usando più caselle su una LAN 192.168.10.0/24 che voglio gestire da lì e consentire solo accesso dall'esterno a taluni contenitori - i seguenti esempi vengono eseguiti sulla scatola a 192.168.10.1):

  • assegnare i Demoni con --cluster-store consul://192.168.10.1:8500 e porta 8500 (distribuzione Console & registrator su ogni Daemon come i primi contenitori) e --cluster-advertise 192.168.10.1:2375 e -H tcp://192.168.10.1:2375 -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375 (non leghiamo comunque gli altri indirizzi disponibili come con tcp://0.0.0.0:2375 e inst solo legare al locale 192.168.10.0/24).Nel caso in cui si desidera che i contenitori si leghino solo alla rete locale e (come ho fatto in questo caso) è possibile specificare il parametro --ip aggiuntivo per Daemon - quando i contenitori devono essere disponibili anche altrove (nel mio caso solo un carico nginx Balancer con failover tramite keepalived) si specifica vincolante la porta a tutte le interfacce docker run ... -p 0.0.0.0:host_port:container_port ... <image>
  • avviare i demoni
  • Deploy gliderlabs/registrator e Console con Compose (questo è un esempio dalla prima casella nel mio setup, ma mi metto l'equivalente su tutti i Daemon per una configurazione completa di failover Consul HA) docker-compose -p bootstrap up -d (denominazione dei contenitori bootstrap_registrator_1 e bootstrap_consul_1 nella rete privata bootstrap):

    version: '2' 
    services: 
        registrator: 
        image: gliderlabs/registrator 
        command: consul://192.168.10.1:8500 
        depends_on: 
         - consul 
        volumes: 
         - /var/run/docker.sock:/tmp/docker.sock 
        restart: unless-stopped 
    
        consul: 
        image: consul 
        command: agent -server -bootstrap -ui -advertise 192.168.10.1 -client 0.0.0.0 
        hostname: srv-0 
        network_mode: host 
        ports: 
         - "8300:8300"  # Server RPC, Server Use Only 
         - "8301:8301/tcp" # Serf Gossip Protocol for LAN 
         - "8301:8301/udp" # Serf Gossip Protocol for LAN 
         - "8302:8302/tcp" # Serf Gossip Protocol for WAN, Server Use Only 
         - "8302:8302/udp" # Serf Gossip Protocol for WAN, Server Use Only 
         - "8400:8400"  # CLI RPC 
         - "8500:8500"  # HTTP API & Web UI 
         - "53:8600/tcp" # DNS Interface 
         - "53:8600/udp" # DNS Interface 
        restart: unless-stopped 
    
  • ora i Demoni registrare e configurare blocchi sul KV-store (Console) in docker/nodes e Swarm non sembra di leggere automaticamente da questa posizione .. Così, quando si tenta di leggere che sono Demoni disponibile non ne trova. Ora questo po 'mi è costato più tempo: per risolvere questo ho dovuto specificare --discovery-opt kv.path=docker/nodes e iniziare Swarm con docker-compose -p bootstrap up -d - su tutte le caselle aswell per finire con un failover Swarm HA dei manager:

    version: '2' 
    services: 
        swarm-manager: 
        image: swarm 
        command: manage -H :3375 --replication --advertise 192.168.10.1:3375 --discovery-opt kv.path=docker/nodes consul://192.168.10.1:8500 
        hostname: srv-0 
        ports: 
         - "192.168.10.1:3375:3375" # 
        restart: unless-stopped 
    
  • Ora io alla fine con uno sciame di lavoro che è disponibile solo sulla rete 192.168.10.0/24 sulla porta 3375. Tutti i contenitori che vengono avviati sono disponibili solo per questa rete partecipavano a meno che non mi specificare -p 0.0.0.0:host_port:container_port quando si inizia (con docker run)

  • ulteriore ridimensionamento: quando ho aggiungi più caselle al locale rete per accrescere la capacità la mia idea sarebbe quella di aggiungere più Demoni e forse le istanze di Swarm non manager con quelli e anche i successivi client Consul (piuttosto che i server, iniziati con -server).