使用Vagrant设置swarm模式的Docker Swarm
我正在使用Vagrant和当地的一家供应一些DEV最小的centos虚拟机。 这些虚拟机都运行Docker 1.12.x,现在我正在考虑自动创build一个群集模式群集。 我们的目标是做到vagrant up
,当气候回归时,我有一个集群起来跑步。
我遇到的麻烦是我可以在其中一个盒子上运行一个docker swarm init --advertise-addr <my init swarm mgr>
,但是我需要从这个盒子中取出pipe理器和工作节点的标记,并将它们注入随后build立的虚拟机。
我无法编程Ruby,如果我能避免它,我真的不会开始使用Docker Remote API。
我已经试过从一个testing虚拟机设置请求hostid尝试和分配一个来宾cmd输出到Vagrantfile中的一个variables,但我的Ruby没有达到从头开始。
无论如何,问题是如何在使用本地虚拟机configuration虚拟机时使用Vagrant创build群集模式群集。
编辑:我刚才看到stream浪的scp ,我至less可以用它来提取文件的forms的令牌,并将其复制到相关的机器。 我希望保持纯粹的东西而不是插入,并且避免使用Ruby来运行更多的stream浪命令(有没有更好的方法来做到这一点?),但至less可以利用stream浪汉和当地人。
从Docker 1.12.3
,没有简单的方法来做到这一点。 您必须以某种方式获取该令牌。
您可以:
-
使用
\swarm
端点使用Docker Remote API检查Swarm,并在第一台机器init
后提取相关的JoinTokens
:[...] "JoinTokens" : { "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a", "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l" } [...]
-
正如你所提到的,在将令牌写入文件之后使用
vagrant scp
。 - 使用同步文件夹并将其安装在所有虚拟机上。 因此,第一个虚拟机将令牌写入文件,其他虚拟机正在从中读取令牌。
但无论如何,您需要手动同步引导过程。
相关的Docker问题 : https : //github.com/docker/docker/issues/26743
如果有人(包括我)发现这一点,就像@ abronan的post中提到的那样,我需要以某种方式获取这个标记。 我这样做了。
用于提取令牌的Vagrant主机上的Ansible本地剧本代码:
## docker swarm mgr # - name: docker swarm join-token -q manager shell: docker swarm join-token -q manager register: dockerswarmjointokenmgr - name: copy content={{ dockerswarmjointokenmgr.stdout.split() }} dest=/vagrant/myswarmwkr.token local_action: copy content={{ dockerswarmjointokenmgr.stdout.split() }} dest=/vagrant/myswarmwkr.token - name: make swarm wkr token readable file: path=/vagrant/myswarmwkr.token owner=vagrant group=vagrant recurse=no
我的docker群工人节点使用vagrant scp特定的Vagrantfile代码:
## now handle docker swarm tokens # config.vm.provision :host_shell do |host_shell| host_shell.inline = 'vagrant scp dockerwkr:/vagrant/myswarmwkr.token .' end config.vm.provision :host_shell do |host_shell| host_shell.inline = 'vagrant scp dockerwkr:/vagrant/myswarmwkr.token .' end
这会导致将令牌输出到guest scp
上的文件, scp
到达stream浪主机,然后当stream浪者处理docker swarm worker设置时,如果令牌被写入与Vagrantfile
相同的目录,它们将自动向上工人客人/vagrant
,你的ansible local
代码可以将他们读入docker swarm join
命令。 勉强和一起销售,但在自己的笔记本电脑学习很好。