IstioのparentShutdownDurationが削除されていた話
背景
Kubernetesでistioを導入しているシステムにおいて、podを安全に停止する方法を調べていたところ、istioのparentShutdownDuration
というパラメータに言及している記事をいくつか見つけました。
しかしながら、最新版のdocumentではproxy-configのパラメータにparentShutdownDuration
が存在しません。調べてみると、istioのバージョン1.17のタイミングでdocumentから削除されているようのですが、リリースノートにも記載が見当たらず、ネットでも解説しているものがなかっため、廃止された背景について調査しました。
結論
parentShutdownDuration
はenvoyのhot restartに関わるパラメータですが、istioがenvoyのhot restartを利用しなくなったため、parentShutdownDuration
のパラメータも削除されました。
istioのhot restart自体はistioバージョン1.10の時点で削除されています。
parentShutdownDurationとは
envoyにはhot restartによる設定値更新の仕組みがあり、hot restartを実行すると、新しくenvoyのプロセスが起動され、一時的に新旧2つのenvoyプロセスが並列実行される状態になります。
旧プロセスはhot restartが開始してから--drain-time-s
の秒数だけdrain状態となり、--parent-shutdown-time-s
の秒数が経過すると強制的にshutdownされ、hot restartが完了します。
istioはenvoy実行時にparentShutdownDuration
の値を--parent-shutdown-time-s
に渡しています。つまり、parentShutdownDuration
はenvoyがhot restartする時に旧プロセスをshutdownするまでの秒数を指します。(ちなみに、istioのdrainDuration
の値が--drain-time-s
に渡される)
削除された経緯
githubを確認したところ、2021年3月9日にDiable envoy hot restartというPRが作成されています。
このPRによると、以下の内容が述べられています。
- 現状hot restartは利用していないので無効化する
- hot restartを無効にすると単一pod上で複数のenvoyを実行するのがシンプルになる
- envoy側の作業も軽減されるし、envoyへ付与する権限も少なくて済む
最初に紹介した記事では、istioのsidecarを終了するとenvoyにhot restartが実行されるとの記載があったのですが、実際には2021年時点で利用されていなかったということでしょうか。(ここはあまり自信ありません)
envoyの仕組みとしては、hot restartを利用せずともxDSというAPIを利用して設定値を動的に変更できるようなので、副作用が大きいhot restartは使われなくなっていったのかと推測されます。
とにかく、istioのバージョン1.10.0にこのPRが取り込まれ、envoyのhot restartが無効化されます。実装としては、envoyの起動オプションに--disable-hot-restart
が渡されるようになります。
しかしながら、parentShutdownDuration
のパラメータはhot restartにしか使われないにも関わらず、このタイミングでは削除されませんでした。そのまま1年半以上の月日が過ぎ、2022年12月3日にようやくparentShutdownDurationを削除するPRが作成され、2023年2月14日にリリースされたistioバージョン1.17.0に取り込まれます。
つまり、istioバージョン1.10〜1.16ではparentShutdownDuration
のパラメータを設定できるものの動作しない状態だったということになります。
上記のPRはいずれもリリースノートに記載がありませんでした。リリースノートに記載がないとgithubのissueやPRを追わないといけないので、中々気付くのは難しいですね。
Discussion