はじめに
実務の中でKubernetesのローリングアップデートをおこなう際にSpringBootコンテナアプリケーションを無停止で再起動する必要があり、色々と調べながら進めています。
これから数回に渡って、kubernetesやSpringBootの挙動や設定について整理していきます。
Podの削除時にSIGTERMやSIGKILLといったものが送られるということがkubernetes公式ドキュメントに記載されており、恥ずかしながら馴染みがなかったのでまずはそこを整理します。
SIGTERMとSIGKILLとは何か
実行中のプロセスに対して送られるシグナル(命令)のことです。
冒頭で出したSIGTERM,SIGKILLはそれぞれ終了要求と強制終了の意味を持ちます。
- SIGTERM
- プロセスに終了を要求する
- SIGKILL
- プロセスを強制終了させる
プロセスを終了させる際に以下のようなコマンドを実行すると思いますが、このコマンドの裏ではSIGTERM,SIGKILLというシグナルがプロセスに対して送られています。
# SIGTERM
kill [-15] <PID>
# SIGKILL
kill -9 <PID>
挙動の違い
- SIGTERM
- プロセスは強制終了とはならない
- 実行中の処理の終了を待ったり、データの保存をしたり後片付けをおこなってからプロセスを終了する
- プロセス側でSIGTERMを受け取った後の動作をハンドリングできる
- SIGKILL
- 問答無用でプロセスは強制終了となる
- 後片付けをおこなう時間はない
- ハンドリングできない
おわり
今回はkubernetesの領域には立ち入らずSIGTERM,SIGKILLの内容について整理しました。
次回はPod削除時のSIGTERM,SIGKILLのタイミングと関連するKubernetes,SpringBootのプロパティについて整理します。
ご覧いただきありがとうございました。