こんにちは。株式会社ビデオリサーチのキクチです。
私事ですが、先日、Google Cloud Professional Cloud Developerの資格試験を受験しました。
試験には合格したものの、問題の中でKubernetes(以下、k8s)のPodのヘルスチェックについて問われ、これまで曖昧に理解していたことに気付きましたので、復習がてら記事にしてみました。
ヘルスチェックの種類
k8sでは、kubelet により実行される3種類のヘルスチェックが用意されています。
Liveness Probe
- 概要
- 名前通り、コンテナが正常に動作しているか(=Liveness)を確認します。
- Probeの失敗時、kubeletはコンテナを再起動します。
- 主な使用場面
Readiness Probe
- 概要
- 主な使用場面
- アプリケーションが外部サービスやリソースに依存している場合など、probeが成功するまでリクエストを受け付けたくないコンテナに設定します。
Startup Probe
- 概要
- コンテナ内のアプリケーションの初期処理が完了しているか(=Startup)を確認します。
- コンテナ起動後、他のProbesよりも先に評価されます。
- Probeの失敗時、kubeletはPodを再起動します。(次のProbeは開始されない)
- 主な使用場面
- アプリケーション起動時にマイグレーションや暖気処理等、長めの初期化処理を必要とする場合など、起動に時間のかかるコンテナに設定します。
Probeの処理フロー
単語だけでは理解しづらいため、各Probeがどのようなフローになるかをまとめました。
ヘルスチェックのハンドラ
Probeはヘルスチェックによる診断を行うためにハンドラを呼び出します。ハンドラは以下の3種類で実装できます。
ExecAction
- 概要
- コンテナ内で指定したコマンドを実行します。
- コマンドがステータス0で終了した場合はヘルスチェック成功とみなされます。
HTTPGetAction
- 概要
- コンテナのIPの特定のポートとパスに対して、HTTP GETリクエストを送信します。
- レスポンスのステータスが200以上400未満の場合、ヘルスチェックは成功とみなされます。
TCPSocketAction
- 概要
- コンテナのIPの特定のポートにTCP Socketのコネクションを確立します。
- コネクションが確立できれば、ヘルスチェックは成功とみなされます。
まとめ
今回はinitialDelaySeconds
などの詳細な設定項目の説明は省略しましたが、以下のリンクで詳しく解説されています。
それぞれの特性とこれらの設定項目を理解し、適切なProbeを実装することで、細やかなヘルスチェックを実現し、システム全体の安定性と可用性を確保することができそうです。
参考
ビデオリサーチでは、現在一緒にサービス開発を推進してくれる仲間を大募集しています!
もしビデオリサーチに興味を持っていただいた方は、以下よりお気軽にご応募ください💁♂️