38
19

More than 3 years have passed since last update.

DockerやKubernetesの終了: SIGTERMからSIGKILLまでの猶予期間

Last updated at Posted at 2020-10-07

SIGTERMSIGKILLのざっくりした理解

SIGTERMSIGKILLをざっくり説明すると以下のとおり:

  • SIGTERM: 終了要求のシグナル。プロセスはこれを受信後も動くことはできる。
  • SIGKILL: 強制終了。プロセスはこれ以上動作できない。

グレイスフルシャットダウン (graceful shutdown)

グレイスフルシャットダウンとは、プロセスなどが、新規の作業の受付を締め切り、仕掛り途中の作業をキリのいいところまで処理してから安全に終了することを指します。イメージとしては、「店じまい」です。

強制終了が発生すると、システムの状態が中途半端になったり、データに不整合が起きてしまったりします。グレイスフルシャットダウンはそうならないようにする保護策です。

例えば、HTTPサーバのグレイスフルシャットダウンを例に考えると、HTTPサーバが終了フェーズに入ると、新規のリクエストは受け付けないようにしつつ、既に抱えているリクエストはちゃんとレスポンスを返し終わってから終了します。

DockerやKubernetesなどは、アプリケーションがグレイスフルシャットダウンできるように、SIGTERMシグナルを送ったのち、一定の猶予期間経過後、それでも終了してなかったら、SIGKILLを送信して強制終了するようになっています。

DockerやKubernetesなどのSIGTERMからSIGKILLまでの猶予

猶予期間はシステムによって異なります。以下に各システムの猶予期間を列挙します。グレイスフルシャットダウンを実装するにあたってご参考にしてください。

docker stop

  • SIGTERMを送り、10秒後にプロセスが残っていたらSIGKILLを送る。
    • 10秒は-t, --timeオプションで変更可能。
  • docker-compose stopdocker-compose downも同様。

docker kill

  • 即座にSIGKILLを送る
  • docker rm -f, docker-compose killも同様。

KubernetesのPodの終了

  • SIGTERMを送り、30秒後にプロセスが残っていたらSIGKILLを送る。

Systemd

  • SIGTERM→ 90秒後SIGKILL

Upstart

  • SIGTERM→ 5秒後 SIGKILL

Sysvinit

  • SIGTERM→ 5秒後 SIGKILL
38
19
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
38
19