使用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命令。 勉强和一起销售,但在自己的笔记本电脑学习很好。