More Related Content
Similar to Weaveを試してみた (20)
More from Kazuto Kusama (20)
Weaveを試してみた
- 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を使うのが一般的
- 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
- 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つさえ空いて
いれば良い。
- 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の作成
- 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は繋がらない。
その逆も然り
- 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ネットワークとして全てのコンテナが接続される!
(肝心の部分ですが、時間切れのため、このあたりは推測です・・・)
- 41. 今後やりたいこと
• weaverをダウンさせたときの再接続が上手くいかなかった
のが気になる。ドキュメント的にはしてくれそうなので、
追加で調べたい
• weaver自体の仕組みを把握したい。golangで書かれてい
るので読もうと思えば読める
• 仕組み的にDockerでなくても、ちょっと書き換えるだけで
使えそう。LXCとか、Wardenとか
• 他の仕組み、例えばCoreOSのFlannel(Rudder)と比較した
い。