2016-11-28 9 views
2

私はVagrantとある程度のローカルのVMを使って、最小のcentos VMを提供しています。 VMはすべてDocker 1.12.xを実行しています。私は現在、自動的にswarmモードのクラスタを作成しています。目的はvagrant upであり、CLIが復帰すると、クラスタが稼働しています。swarmモードを設定するDocker swarm with Vagrant

問題ボックスの1つにdocker swarm init --advertise-addr <my init swarm mgr>を実行できますが、マネージャとワーカーノードのトークンをこのボックスから取得し、後で設定したVMに注入する必要があります。

私はRubyをプログラミングすることはできません。回避することができれば、Docker Remote APIで始めるのは本当にむしろ始まっていません。

私はテスト用のVMセットアップからゲストIDの出力をVagrantfileの変数に割り当てようとしましたが、私のRubyはスクラッチではありません。

ローカルでVMをプロビジョニングするときに、Vagrantを使用してswarmモードのクラスタを作成するにはどうすればよいのでしょうか。

編集:ちょうどファイルの形でトークンを抽出し、それを関連するマシンにコピーするのに少なくとも使用できるvagrant scpを見ました。私はプラグインするよりも純粋なものを保つことを望んでいました。そして、より多くの悪影響コマンドを実行するためにRubyから砲撃するのを避けましたが(それを行う良い方法はありますか?)、少なくとも迷惑行為の可能性のあるローカルを使用します。

+0

これはSwarmモードを使用しないので、この使用例の良い例ではありません。 OPに関しては、シェルスクリプトを使って、あなたがする必要があることを実行するために(トークンをつかまえます(トークンをつかまえてトークンを取得し、トークンを取得してからトークンを取得するなど)ことができます。 ..他の人に。 – johnharris85

+0

まあ、私はそれが正しく見えたと思っていたのでうれしく思います。しかし、スクリプトを使ってゲストに 'docker swarm join-token -q manager'を実行しても動作しないと思いますコマンドがinit swarm mgr上で実行され、返されたトークンがゲスト上にトラップされるため、迷惑メールホストは、Vagrantファイルに定義されている次のマシンにそれを渡すことができません。それを提供することができ、その例はありますか?ありがとう – volvox

答えて

1

OK(私を含む)の場合の誰かでは、これを発見し、私はいくつかの方法でトークンを取得する必要がありました。私はこのようにしました。これはトークンの出力を生じさせる

## 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 

:放浪SCPを使用して私のドッカー群発ワーカーノードに特定

## 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 

Vagrantfileコード:流浪ホスト上

Ansibleローカルハンドブックコードは、トークンを抽出するために使用しましたゲストのファイルにscp 'を追加し、迷惑メールホストがドッカー集団ワーカーの設定を処理するときに、トークンがVagrantfileと同じディレクトリに書き込まれた場合、自動的にワーカー・ゲスト0123でロックアップされますansible localコードでdocker swarm joinコマンドにコードを読み取ることができます。一緒に売春をしたり売ったりしているが、自分のラップトップで学習するのはうれしい。

1

Docker 1.12.3から、これを簡単に行う方法はありません。あなたは何らかの形でトークンを出さなければならないでしょう。

次のことが可能です。

  • \swarmエンドポイントとDocker Remote APIを使用して大群を点検し、最初のマシンinit後、関連JoinTokensを抽出:あなたは後にvagrant scpを使用して、前述のように

    [...] 
    "JoinTokens" : { 
        "Worker" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-6qmn92w6bu3jdvnglku58u11a", 
        "Manager" : "SWMTKN-1-1h8aps2yszaiqmz2l3oc5392pgk8e49qhx2aj3nyv0ui0hez2a-8llk83c4wm9lwioey2s316r9l" 
    } 
    [...] 
    
  • トークンをファイルに書き込みます。

  • 同期フォルダを使用し、すべてのVMにマウントします。したがって、最初のVMはトークンをファイルに書き込み、他のVMはそれからトークンを読み取ります。

いずれにしても、手動でブートストラッププロセスを同期させる必要があります。

関連ドッカー問題:@のabronanの記事で述べたようにhttps://github.com/docker/docker/issues/26743

関連する問題