2016-01-25 14 views
14

Grałem z docker-compose i splatałem projekt ze strony centrum dokującego.dokowanie-dokowanie i dokowanie - jak dynamicznie dodawać węzły i czy można je przetłumaczyć za pomocą usług

Jedną z rzeczy, która mi umyka, jest to, jak mogę skalować poszczególne usługi (dodając więcej instancji) I czy istniejące instancje w jakiś sposób informowały o tych nowych instancjach.

Przykładowo kanoniczna docker-compose przykład stanowi klaster:

  • REDIS węzła
  • pyton (kolba) węzeł
  • haproxy równoważenia obciążenia

utworzyć klaster, a wszystko działa dobrze, jednak próbuję dodać inny węzeł do klastra:

$ docker-compose scale web=2 
Creating and starting 2 ... done 


$ docker ps 
CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS    PORTS           NAMES 
e83f6ed94546  packetops/web:latest "/bin/sh -c 'python /" 6 minutes ago  Up About a minute 80/tcp           swarm-slave/1_web_2 
40e01a615a2f  tutum/haproxy   "python /haproxy/main" 7 minutes ago  Up About a minute 443/tcp, 1936/tcp, 172.16.186.165:80->80/tcp swarm-slave/1_lb_1 
f16357a28ac4  packetops/web:latest "/bin/sh -c 'python /" 7 minutes ago  Up About a minute 80/tcp           swarm-slave/1_lb_1/1_web_1,swarm-slave/1_lb_1/web,swarm-slave/1_lb_1/web_1,swarm-slave/1_web_1 
8dd59686e7be  redis     "/entrypoint.sh redis" 8 minutes ago  Up About a minute 6379/tcp          swarm-slave/1_redis_1,swarm-slave/1_web_1/1_redis_1,swarm-slave/1_web_1/redis,swarm-slave/1_web_1/redis_1,swarm-slave/1_web_2/1_redis_1,swarm-slave/1_web_2/redis,swarm-slave/1_web_2/redis_1 

To działało ... Ale zobaczymy co węzeł haproxy widzi klastra (docker-machine modyfikuje plik „/ etc/hosts”)

# docker exec -i -t swarm-slave/1_lb_1 /bin/bash -c 'cat /etc/hosts' 
172.17.0.4  40e01a615a2f 
127.0.0.1  localhost 
::1  localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 


ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.3  1_web_1 f16357a28ac4 
172.17.0.3  web f16357a28ac4 1_web_1 
172.17.0.3  web_1 f16357a28ac4 1_web_1 

Gdybym restart całego klastra za pomocą docker-compose że węzeł powinien mieć to /etc/hosts zaludnionych ale teraz wydaje się, że uszkodzony nawet dalej:

$ docker-compose up --force-recreate -d 
Recreating 1_redis_1 
Recreating 1_web_2 

Recreating 1_web_1 
Recreating 1_lb_1 
ERROR: Unable to find a node fulfilling all dependencies: --link=1_web_1:1_web_1 --link=1_web_1:web --link=1_web_1:web_1 --link=1_web_2:1_web_2 --link=1_web_2:web --link=1_web_2:web_2 

$ docker-compose up -d 
1_redis_1 is up-to-date 
1_web_1 is up-to-date 
1_web_2 is up-to-date 
Starting 40e01a615a_1_lb_1 

$ docker exec -i -t swarm-slave/40e01a615a_1_lb_1 /bin/bash -c 'cat /etc/hosts' 
172.17.0.4  40e01a615a2f 
127.0.0.1  localhost 
::1  localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

Tak na zakończenie czy istnieje lepszy sposób to zrobić (rozdzielczość i Discovery)? Czy istnieje inny mądrzejszy sposób niż tylko aktualizacja plików hostów? Jaka jest tutaj najlepsza praktyka?

+0

Czy zaglądasz do Kubernetes? Automatycznie obsługuje to wszystko dla ciebie. – kichik

+0

Nie. Próbuję zrobić to w całości używając podstawowych funkcji dokowania, Kubernetes/Mesos są poza zakresem. –

+0

Jaką wersję okna dokowanego i okna dokowanego używasz? Czy Twój "docker-compose.yml" zaczyna się od 'version 2'? – VonC

Odpowiedz

1

Docker właśnie wydała nową wersję z wbudowanym orkiestracji:

https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/

można rozpocząć nowy rój Klaster z:

docker swarm init 

I tworzyć Usługi:

docker service create –name frontend –replicas 5 -p 80:80/tcp nginx:latest 

Utworzone Usługi będą równoważone obciążeniem i można przerobić podnieść w górę i dół:

docker service scale frontend=X 
+0

Więcej próba produktu niż pytanie ;-) –

Powiązane problemy