Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Weaveを試してみた
•
28 likes
•
8,075 views
Kazuto Kusama
Dockerコンテナ同士を繋ぐ、Weaveを試してみた&調べてみたので共有します https://github.com/zettio/weave
Read less
Read more
1 of 42
Download now
Downloaded 41 times
More Related Content
Weaveを試してみた
1.
Weaveを試してみた dockerコンテナ間でネットワークを組もう
2.
@jacopen Kazuto Kusama
NTT Communications Cloudn PaaSの開発・運用をやっています
7.
コンテナ間でネットワークを 繋ぎたい
8.
App DB
9.
同一ホストなら $ sudo
docker run -d --name db training/postgres $ sudo docker run -d -P --name web --link db:db training/webapp python app.py ⇐ webコンテナは、環境変数でDBコンテナの接続先 を取得できる Docker linkを使うのが一般的
10.
じゃあホストが異なる と・・・?
11.
解決策
12.
Weave Zettioが開発している、Dockerコンテナに仮想ネット ワークを提供するソフトウェア。Apache
Licenseで開 発されている。 ZettioはRabbitMQの開発者であるAlexis Richardson氏 と、Matthias Radestock氏によって設立された企業。 本社はロンドン。
13.
https://github.com/zettio/weave
14.
Docker Host1 Docker
Host2 10.0.1.1/24 10.0.1.2/24 Container1 Container2
15.
DEMO1
16.
Weaveのセットアップ sudo wget
-O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave sudo chmod a+x /usr/local/bin/weave 超簡単
17.
Weaveの実行 (HOST1) weave
launch weave run 10.0.1.1/24 -t -i ubuntu /bin/bash (HOST2) weave launch 10.9.8.171 weave run 10.0.1.2/24 -t -i ubuntu /bin/bash Weave Weave Container1 10.0.1.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 Docker Host1 10.9.8.171 Container2
18.
Weave Weave Container1
10.0.1.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 Docker Host1 10.9.8.171 Container2 ConoHa Container3 10.0.1.3/24 Weave Internet Router
19.
DEMO2
20.
Weaveのしくみ
21.
Weave Router(weaver) ホスト間でネットワークを繋ぐ仕組み。weave
launch すると、weaverのコンテナが立ち上がる。 https://github.com/zettio/weave/blob/master/docs/deployment.png
22.
Weave Router(weaver) docker
ps CONTAINER ID IMAGE COMMAND PORTS NAMES 79f34b6616d2 ubuntu:14.04 "/bin/bash" high_lalande e2c7ac764cd7 zettio/weave:git-765bfbb49d46 "/home/weave/weaver 0.0.0.0:6783->6783/tcp, 0.0.0.0:6783->6783/udp weave TCP, UDPの6783で通信している。この2つさえ空いて いれば良い。
23.
Weave(wrapper command) 最初のセットアップでダウンロードしたもの。
中身はshell script。各種コマンドの提供の他、docker wrapperとして機能する。
24.
例えばweave runコマンド run)
[ $# -gt 0 ] || usage validate_cidr $1 ⇐ cidrが正しいか確認 CIDR=$1 shift 1 create_bridge ⇐ bridgeの作成 CONTAINER=$(docker run -d "$@" | tail -n 1) with_container_netns $CONTAINER attach $CIDR echo $CONTAINER ;; ⇐ docker runの実行 ↑ dockerコンテナと同じNetwork Namespaceに 仮想interfaceの作成
25.
Ambassadorパターン
26.
Ambassadorパターン 他ホストのコンテナに接続するための戦略のひとつ。 ホストをまたいで接続する専用のコンテナ
(Ambassador)を立てるやり方。 Ambassador Ambassador Container1 Container2 Docker Host1 Docker Host2 Weaveは、まさにこのAmbassadorパターン。
27.
もうちょっと試そう
28.
Weave Weave Container1
10.0.1.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 Docker Host1 10.9.8.171 Container2 ConoHa Container3 10.0.1.3/24 Weave 問題無く繋がる
29.
Weave Weave Container1
10.0.1.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 Docker Host1 10.9.8.171 Container2 ConoHa Container3 10.0.1.3/24 ×Weave weaver落とすと 10.0.1.3には 繋がらなくなる
30.
Weave Weave Container1
10.0.1.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 Docker Host1 10.9.8.171 Container2 ConoHa Container3 10.0.1.3/24 Weave Weave launchしなおしても 接続が回復しない (あれ?) ?
31.
異なるサブネットのコンテナ Container1 Weave
Weave 10.0.1.2/24 10.0.2.2/24 Docker Host2 10.9.8.170 10.0.1.1/24 10.0.2.1/24 Docker Host1 10.9.8.171 Container2 Container3 Container4 想定した通り、10.0.1.1から10.0.2.2は繋がらない。 その逆も然り
32.
深追い
33.
Dockerホスト内では何が起きているのか
34.
Dockerホスト内では何が起きているのか eth0 docker0
weave vethxx vethyy eth0 eth0 Container1 Weave Container Docker Host Dockerが作るdocker0やvethはそのままに、 新しくweaveというブリッジアダプタが作られる
35.
Dockerホスト内では何が起きているのか eth0 docker0
weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver runされたコンテナごとに、vethweplxxxという仮想イン ターフェースが作られ、weaveに接続される。
36.
Dockerホスト内では何が起きているのか eth0 docker0
weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver weaver container内では、weaverが動いている
37.
Dockerホスト内では何が起きているのか eth0 docker0
weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Weave Container Docker Host weave lauchする際に指定した他のweaverに接続 Weave Container eth0 docker0 weave weaver
38.
Dockerホスト内では何が起きているのか eth0 docker0
weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver eth0 docker0 weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe weaver Weave Container Weave Container Docker Host 結果、1つのL2ネットワークとして全てのコンテナが接続される! (肝心の部分ですが、時間切れのため、このあたりは推測です・・・)
39.
感想
40.
触ってみて思ったこと • weaverコマンドだけで済むので、気軽に試せるのがとても
良い • 自分が試した限りだと、これといったハマリポイントはな かった • 実運用するなら、weaverのオペレーションをなんとかしな いといけない。手動でweaver launchするのはあり得ない ので、serfとかのservice discoveryを組み合わせる必要が ありそう。
41.
今後やりたいこと • weaverをダウンさせたときの再接続が上手くいかなかった
のが気になる。ドキュメント的にはしてくれそうなので、 追加で調べたい • weaver自体の仕組みを把握したい。golangで書かれてい るので読もうと思えば読める • 仕組み的にDockerでなくても、ちょっと書き換えるだけで 使えそう。LXCとか、Wardenとか • 他の仕組み、例えばCoreOSのFlannel(Rudder)と比較した い。
42.
質問?
Download