❗
サイドカー (istio-proxy) 付きの cronjob を終了させる
はじめに
Pod にサイドカーが挿入されている場合、本 AP が終了してもサイドカーが終了してくれず、結果として Job が終了しないという問題があります。この問題を解決する方法はたくさんありますが、今回は wget を起動コマンドで用いた例を紹介します。
セキュリティや煩雑さの観点から curl をイメージに含めたくないという場合に参考になればと思います。(例えば, distroless を用いて busybox 等からマルチステージビルドを行うような場合は、 wget は 初期コマンドに含まれており, apt 等パッケージマネジャーからダウンロードする必要ないなど、シンプルかつ無駄なステージを挟むことなく利用できるので個人的には wget で実現できるならその方が嬉しいです。)
また、以下は cronjob マニフェスト内で利用することを想定しています。
実装例
wget
command: ["/bin/bash", "-c"]
args:
- |
trap 'wget --timeout=2 -q --post-data='' http://127.0.0.1:15020/quitquitquit 2>/dev/null' EXIT
while ! wget -q --spider http://127.0.0.1:15020/healthz/ready 2>/dev/null; do
sleep 1
done
<実行したいコマンド>
2>/dev/null
については envoy がまだ立ち上がっていない時に 503 が吐かれてしまい、こちらは既知の不要なエラーなのでそれをログに流さないためのものです。
参考: https://github.com/istio/istio/issues/11659#issuecomment-479547294
おわりに
もし、コンテナセキュリティの観点から curl をインストールできないという方は代替として wget を使った実装を参考にしていただければと思います。
Discussion