Weaveを試してみた

4,808 views

Published on

Dockerコンテナ同士を繋ぐ、Weaveを試してみた&調べてみたので共有します
https://github.com/zettio/weave

Published in: Technology
0 Comments
29 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,808
On SlideShare
0
From Embeds
0
Number of Embeds
207
Actions
Shares
0
Downloads
34
Comments
0
Likes
29
Embeds 0
No embeds

No notes for slide

Weaveを試してみた

  1. 1. Weaveを試してみた dockerコンテナ間でネットワークを組もう
  2. 2. @jacopen Kazuto Kusama NTT Communications Cloudn PaaSの開発・運用をやっています
  3. 3. コンテナ間でネットワークを 繋ぎたい
  4. 4. App DB
  5. 5. 同一ホストなら $ 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を使うのが一般的
  6. 6. じゃあホストが異なる と・・・?
  7. 7. 解決策
  8. 8. Weave Zettioが開発している、Dockerコンテナに仮想ネット ワークを提供するソフトウェア。Apache Licenseで開 発されている。 ZettioはRabbitMQの開発者であるAlexis Richardson氏 と、Matthias Radestock氏によって設立された企業。 本社はロンドン。
  9. 9. https://github.com/zettio/weave
  10. 10. Docker Host1 Docker Host2 10.0.1.1/24 10.0.1.2/24 Container1 Container2
  11. 11. DEMO1
  12. 12. Weaveのセットアップ sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave sudo chmod a+x /usr/local/bin/weave 超簡単
  13. 13. 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
  14. 14. 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
  15. 15. DEMO2
  16. 16. Weaveのしくみ
  17. 17. Weave Router(weaver) ホスト間でネットワークを繋ぐ仕組み。weave launch すると、weaverのコンテナが立ち上がる。 https://github.com/zettio/weave/blob/master/docs/deployment.png
  18. 18. 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つさえ空いて いれば良い。
  19. 19. Weave(wrapper command) 最初のセットアップでダウンロードしたもの。 中身はshell script。各種コマンドの提供の他、docker wrapperとして機能する。
  20. 20. 例えば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の作成
  21. 21. Ambassadorパターン
  22. 22. Ambassadorパターン 他ホストのコンテナに接続するための戦略のひとつ。 ホストをまたいで接続する専用のコンテナ (Ambassador)を立てるやり方。 Ambassador Ambassador Container1 Container2 Docker Host1 Docker Host2 Weaveは、まさにこのAmbassadorパターン。
  23. 23. もうちょっと試そう
  24. 24. 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 問題無く繋がる
  25. 25. 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には 繋がらなくなる
  26. 26. 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しなおしても 接続が回復しない (あれ?) ?
  27. 27. 異なるサブネットのコンテナ 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は繋がらない。 その逆も然り
  28. 28. 深追い
  29. 29. Dockerホスト内では何が起きているのか
  30. 30. Dockerホスト内では何が起きているのか eth0 docker0 weave vethxx vethyy eth0 eth0 Container1 Weave Container Docker Host Dockerが作るdocker0やvethはそのままに、 新しくweaveというブリッジアダプタが作られる
  31. 31. Dockerホスト内では何が起きているのか eth0 docker0 weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver runされたコンテナごとに、vethweplxxxという仮想イン ターフェースが作られ、weaveに接続される。
  32. 32. Dockerホスト内では何が起きているのか eth0 docker0 weave vethxx vethweplxx vethyy vethweplyy eth0 ethwe eth0 ethwe Container1 Weave Container Docker Host weaver weaver container内では、weaverが動いている
  33. 33. 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
  34. 34. 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ネットワークとして全てのコンテナが接続される! (肝心の部分ですが、時間切れのため、このあたりは推測です・・・)
  35. 35. 感想
  36. 36. 触ってみて思ったこと • weaverコマンドだけで済むので、気軽に試せるのがとても 良い • 自分が試した限りだと、これといったハマリポイントはな かった • 実運用するなら、weaverのオペレーションをなんとかしな いといけない。手動でweaver launchするのはあり得ない ので、serfとかのservice discoveryを組み合わせる必要が ありそう。
  37. 37. 今後やりたいこと • weaverをダウンさせたときの再接続が上手くいかなかった のが気になる。ドキュメント的にはしてくれそうなので、 追加で調べたい • weaver自体の仕組みを把握したい。golangで書かれてい るので読もうと思えば読める • 仕組み的にDockerでなくても、ちょっと書き換えるだけで 使えそう。LXCとか、Wardenとか • 他の仕組み、例えばCoreOSのFlannel(Rudder)と比較した い。
  38. 38. 質問?

×