ssig33.com

Docker swarm モードでのラベルの使用

Docker の swarm モードが何かについては Docker 1.12RC の swarm mode チュートリアル - Qiita を読んでおいてください。とにかくすごいやつです。ロードバランサがどうのとかそういうことを考える必要がほとんどなくなってすごいことになります。

ここで以下のようなサーバー群からなるクラスタがあるとします

ちなみにこれはぼくが今使っている swarm クラスタの実際の構成です。

たとえばここでアメリカの糞みたいに遅い VPS にのみデプロイしたいサービスがあるとします。その場合どうすればよいか。公式のドキュメントを読んでもいまのところやり方が書かれていませんが、 github の issue をみるとなんだかそれらしいことが書いてあります。

というわけで↑を実現する場合に実際にやる作業としては以下の通り

# ラベルの作成
$ docker node update --label-add location=america node1
$ docker node update --label-add location=america node2
$ docker node update --label-add location=america node3

# サービス側に特定のラベルのところにデプロイという制約の追加
$ docker service update --constraint-add node.labels.location==america some-service

これで待ってるとそのうちアメリカだけにコンテナが配置されます。制約の記法については、多分これまでの swarm と一緒です。デーモン側でつけたラベルも参照可能なので、そのあたりのやり方については↑の issue コメントを読んで察しましょう。

これはとても簡単ですね。非常によいと思いました。ちなみにまだドキュメント化されてないような話なので仕様は変わる可能性があります。気をつけましょう。

back to index of texts


Site Search