Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@kawaz

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

More than 3 years have passed since last update.

やり方

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に答えが書いてあって、試したら期待通りに動作してくれたのでここにメモを残す。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?