LoginSignup
0
1

More than 5 years have passed since last update.

docker serviceのリバランス(再配置)の仕方

Last updated at Posted at 2017-09-23

やり方

docker service update --detach=false --force foo_service という感じにアップデートするパラメータは何も指定せず --force だけを付けて docker sercice update すれば良いらしい。
すべてのサービスでリバランスしたければ↓こんな感じか(--detachは本質的には関係ないが纏めて実行する時はfalseにしておけば待たずに済む)。

for s in $(docker service ls -q); do
  docker service update --detach=false --force "$s"
done

利用シーン

例えば2ノードに対してレプリカ数6で docker service create --replicas=6 foo_service のような感じにサービスを作成した場合、各ノードには3つずつのタスクが作成される。
ここで新たなノードが docker swarm join で追加されて3ノードになった時はタスク数が各ノードに2つずつになるよう、既存ノードからは1個ずつ停止して新ノードでは2つ起動する、ということをやってほしいが自動的にはこれは行われない。つまり何もしなければ親ノードにはいつまでたっても何のタスクも起動せず旧ノードもずっと3タスクずつ起動しっぱなしということになる。
もちろん既存ノードがサーバ再起動などしてタスク実行が出来なくなったりすれば数を保つために新ノードの方にもタスクが起動し始めてくれるが、この挙動はサーバリソースを公平に使ってほしい場合は嬉しくない。
タスクを各ノードにリバランスする為のコマンドが無いかと思ってひと通り見てみたが、どうやらサブコマンド名やオプション名からそれらしいものは無いっぽいと分かる。が、ググったら #24103 のIssueに答えが書いてあって、試したら期待通りに動作してくれたのでここにメモを残す。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1