2016-01-20 13 views
6

Próbuję skonfigurować klaster docker z swarm i consul. Mam manager, host1 i host2.
Prowadzę kontenery consul i swarm manager na menedżerze."-cluster-store" i "-cluster-advertise" nie działają

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

Na host1 i host2, zmodyfikować opcje demona z --cluster-store i --cluster-advertise i ponownie 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" 

Kiedy dołączam host1 i host2 do roju, nie powiedzie się.

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

Z dziennika menedżera roju błąd jest wyświetlany.

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

Mam do czynienia z tym samym problemem. i poszedłem za tym linkiem https://docs.docker.com/swarm/install-manual/ –

Odpowiedz

0

Czy prowadzisz konsul do odkrywania sieci multihosts lub do wykrywania agentów Swarm?

Czy próbowałeś sprawdzić consul members? Dlaczego nie uruchamiasz docker daemon, aby podłączyć lokalnie do consul, a następnie consul join członków konsulatu? Czy jest jakiś powód, żeby tego nie robić?

Proponuję również metody plików statycznych do wykrywania agentów Swarm. Najszybszy, najłatwiejszy i najbezpieczniejszy sposób, jaki znam!

Powinieneś rzucić okiem na: how to create docker overlay network between multi hosts? może ci pomóc.

+0

Chcę wypróbować tryb 'klucz-wartość serwera'. Jaka jest różnica między plikiem statycznym a 'serwerem wartości klucza'? – firelyu

+0

Jako swój przewodnik, opt to '/ usr/bin/docker daemon -H tcp: //0.0.0.0: 2375 -H unix: ///var/run/docker.sock --cluster-advertise eth0: 2375 - Konsument-sklepowy: //127.0.0.1: 8500'. Po co ustawiać '--cluster-store consul: //127.0.0.1: 8500'? Ustawiłem '--cluster-store consul: // : 8500', a demon dockerowy nie może się uruchomić. – firelyu

+0

'consul' jest dystrybuowany. Każdy demon demonstruje się lokalnie do konsula, a konsul master łączy się z węzłami (a tym samym demonem docker). Ustawiam to lokalnie, więc jeśli w sieci istnieje jakaś wada, demon nie zostanie przez nią dotknięty. To działa dobrze. Różnica między magazynem par klucz-wartość i plikiem statycznym polega na tym, że plik statyczny nie wymaga niczego oprócz pliku. Sieć nie jest wykorzystywana do wykrywania agentów, jest najbezpieczniejsza, najłatwiejsza i najszybsza, ponieważ nie używa niczego innego, niż tylko plik w systemie głównym Swarm. Nie potrzeba klienta/serwera ani aplikacji rozproszonej. – Auzias

3

Odkąd pojawił się podobny problem, w końcu dowiedziałem się, dlaczego to nie zadziałało (w moim przykładzie używam wielu skrzynek w sieci LAN 192.168.10.0/24, z których chcę zarządzać i akceptować dostęp z zewnątrz do niektórych pojemników - Poniższe przykłady są prowadzone na polu w 192.168.10.1):

  • skonfigurować demonów z --cluster-store consul://192.168.10.1:8500 i port 8500 (stosującego Konsul & Registrator na każdym Daemon jako pierwszych pojemników) i --cluster-advertise 192.168.10.1:2375 i jako -H tcp://192.168.10.1:2375 -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375 (nie łączę się jednak z innymi dostępnymi adresami, tak jak z tcp://0.0.0.0:2375 i inst ead tylko wiąże się z lokalnym 192.168.10.0/24).Jeśli chcesz, aby kontenery wiązały się tylko z siecią lokalną oraz (tak jak to było w tym przypadku), możesz określić dodatkowy parametr --ip dla Daemona - kiedy pojemniki powinny być dostępne również dla wszystkich innych (w moim przypadku tylko obciążenie nginx) balancer z pracy awaryjnej poprzez keepalived) określić wiążące port do wszystkich interfejsów docker run ... -p 0.0.0.0:host_port:container_port ... <image>
  • uruchomić demony
  • Deploy gliderlabs/Registrator i konsul z Compose (jest to przykład z pierwszego pola w mojej konfiguracji, ale zacznę równowartość na wszystkich Daemonach, aby uzyskać pełną konfigurację przełączania awaryjnego Consul HA) docker-compose -p bootstrap up -d (nazywanie kontenerów bootstrap_registrator_1 i w sieci prywatnej 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 
    
  • teraz demony zarejestrować i ustawić blokady na KV-store (Konsul) w docker/nodes i Swarm nie wydaje się automatycznie do odczytu z tego miejsca .. Więc gdy próbuje odczytać które są demony dostępne, nie ma żadnych. Teraz to trochę kosztowało mnie najwięcej czasu: Do tego musiałem podać --discovery-opt kv.path=docker/nodes rozwiązać i zacząć Swarm z docker-compose -p bootstrap up -d - na wszystkich polach aswell aby skończyć z Swarm HA failover menedżerów:

    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 
    
  • teraz I skończyć z roju roboczej, która jest dostępna tylko w sieci 192.168.10.0/24 na porcie 3375. Wszystkie pojemniki, które są uruchamiane są dostępne tylko do tej sieci aswell chyba określić -p 0.0.0.0:host_port:container_port przy uruchamianiu (ze docker run)

  • Dalsze skalowanie: kiedy dodaj więcej pól do lokalnego aby zwiększyć pojemność, mój pomysł polegałby na dodaniu kolejnych Demonów i być może nie-menedżerskich instancji Swarm z takimi samymi, jak późniejszymi klientami konsulów (zamiast z serwerami, zaczynającymi się od -server).