KubernetesLivenessおよびReadinessプローブの正しい実装

Aug 24 2020

無限ループでKafkaトピックをポーリングし、受信したKafkaメッセージを処理した後、結果をs3バケットにアップロードするPythonアプリケーションがあるとします。

Kubernetesの準備と活性のプローブを定義する際に考慮すべきことは何ですか。

準備プローブに含めることは理にかなっていますか?

  1. s3バケットが存在すること。
  2. そのカフカのトピックが存在します。
  3. Kafkaトピックをポーリングするループが初期化されました。

また、活性プローブは、ポーリングループが終了していないことを確認するだけです。

レディネスプローブでそのようなことをチェックすることは厳密に悪い習慣ですか?

回答

2 DavidMaze Aug 24 2020 at 19:51

Kubernetesプローブではこれらのことはチェックしません。アプリケーションの起動時にそれらを独自にチェックしてもらい、環境が適切でない場合は、すぐに終了します。ポッドはCrashLoopBackOff状態で表示され、数回再起動しますが、何かが間違っていることは非常に明白です。

アプリケーションの実行中にこれらが失敗する可能性がありますが、これに気付くはずです。たとえば、Prometheusのようなメトリクスシステムは、S3リクエストのほとんどが失敗しているかどうかに気付くのに役立ちます。Kafkaリスナーのメインループが終了したかどうかを確認できる場合は、それを再起動することもできます。