環境
- kubernetes 1.21
- loki 2.4
- agentはpromtail
状況
jobやcronjobの処理が一瞬で終了する場合、ログを保存できないことがある
調べたこと
- 処理時間が大体1秒以下くらいで保存できないことが多くなる
- promtailがpodをターゲットに追加できていない
- promtailのkubernetes target discoveryはprometheusのものを使っている
- kubernetes apiをwatchしていて、ポーリングではない
- podの作成から補足できてないのか、そこはできてるけどログのターゲットに追加できないのか、は不明
- kubectl get po -wで見る場合は、ログ保存できないようなpodでも作成は補足できている
ちょっとよくわからないですね…
対応
原因がちゃんとわかってないので、見える範囲でちゃんと保存できてるよ、という対応になります
Jobの場合
-
spec.ttlSecondsAfterFinished
を使ってpodの寿命を伸ばす- 10秒くらいにしとけば間違いないでしょう
cronJobの場合
- 現状の設定の
spec.successfulJobsHistoryLimit
が1以上の場合- 特に対応しなくてもこの現象は起きてないはず
- 現状の設定の
spec.successfulJobsHistoryLimit
が0の場合-
spec.successfulJobsHistoryLimit
を1にする -
spec.jobTemplate.spec.ttlSecondsAfterFinished
を設定する- これも10秒くらいで
-
successfulJobsHistoryLimitの設定で残ったpodがずっと残らずに、10秒くらい残って消える動作になります
その他
preStopは使えない
preStopはapiserverからのpod削除命令でトリガーなので、自らのexitで終了するjobでは発火しません
サイドカー戦法
サイドカーコンテナ立ててsleep 10
するのでも一応保存できました、よくわからないけど…
そもそも
1秒未満で終了するようなjobのログなんていらないかもしれないですけど
正常動作で出てるはずのログが保存されてないのは何かあった時にミスリードを誘います