簡體   English   中英

docker-swarm和docker-組成如何動態添加節點並使它們可以由服務解析

[英]docker-swarm and docker-compose how to dynamically add nodes and have them resolvable by the services

我一直在使用docker-compose並且已經從docker hub網站拼湊了一個項目。

我想到的一件事就是我如何擴展個別服務(通過添加更多實例)並讓現有實例以某種方式了解這些新實例。

例如,規范的docker-compose示例包含以下群集:

  • redis節點
  • python(flask)節點
  • haproxy負載均衡器

我創建了集群,一切正常,但我嘗試將另一個節點添加到集群:

$ 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

這工作......但是讓我們看看haproxy節點看到的集群(docker docker-machine修改'/ 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

如果我使用docker-compose重新啟動整個集群,該節點應該填充它的/etc/hosts但它現在似乎已經進一步破碎:

$ 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

總而言之,有一種更聰明的方法(解決方案和發現)嗎? 還有另一種更智能的方式而不僅僅是更新主機文件嗎? 這里的最佳做法是什么?

Docker剛剛發布了一個內置編排的新版本:

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

您可以使用以下命令啟動新的Swarm群集:

docker swarm init

並創建服務:

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

創建的服務將進行負載平衡,您可以上下調整它:

docker service scale frontend=X

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM