ベストプラクティス第三弾です
こんにちは、jackです。
さて、第三弾ですね。今回はKubernetesのhealth checkのお話です。
コードはあまりなく、前回より少し冗長的になってしまいそうな雰囲気ですが、やってきましょう。
毎度のことですが、公式ブログはこちら。
Kubernetes best practices: Setting up health checks with readiness and liveness probes
TL;DR
- 分散システムにhealth checkは欠かせないものである、Kubernetesもまた例外ではない
- Kubernetesのhealth checkの種類は2つ
- Readiness
- Liveness
-
Health checkプローブの種類は3つ
- HTTP Probes
- Command Probes
- TCP Probes
- LivenessのinitialDelaySecondsに要注意
もう少し詳しく
health checkは欠かせない
分散システムは複数のコンピュータ(VM)がそれぞれの役割を担っているため管理が大変です。なにか一つが壊れてもすべてがクラッシュするのではなく、異常を感知し、トラフィックを転送するなどして、自動的に復旧してくれるようなシステムを構築をする必要があります。
そのそうな対応するためにも、health checkをすることはシステムが正常に動作しているかを確認するのに、もっともシンプルな手段と言えます。
Kubernetesの場合、Podが正常に立ち上がってからトラフィックを送り始め、クラッシュしたら再起動するような処理がデフォルトで設定されています。
これはこれで嬉しいことなのですが、完璧とは言い切れません。ということで、今回はより強固なシステムを構築するべく、Kubernetesのhealth checkの設定に必要な知識を紹介していきます。
health checkの種類
Kubernetesのhealth checkには2種類あり、これらの違いを知っておく必要があります。
1. Readiness
Readinessプローブはアプリケーションが正常に起動し、トラフィックを受ける準備ができたことをKubernetesに知らせるものです。
成功したらKubernetesはそのPodにトラフィックを送り始め、仮に失敗した場合は成功するまでそのPodにトラフィックを送らないようにすることができます。
どういう時に使うのか
通常、KubernetesはPodのコンテナが正常に起動したことを確認したら、すぐさまトラフィックを送り始めてしまいます。しかし、多少起動時間がかかるアプリケーションだった場合どうでしょう?
Kubernetesの通常時の挙動ではアプリケーションが準備できる前にトラフィックを受けてしまいます。そこで、Readiness probeの出番です。Readiness probeを使うことで、KubernetesにそのPodにトラフィックを送らず待機してくれるよう知らせることができます。
2. Liveness
一方、Livenessプローブはアプリケーションの正常・異常をKubernetesに知らせるものです。失敗した場合Podを消去し新しいPodを立ち上げ、置き換えます。
どういう時に使うのか
例えば、アプリケーションにDeadlockが存在したとします。この場合、アプリケーションはいつまでも次の処理ができず、固まってしまいます。しかし、Kubernetesはアプリケーション側の動作を知らず、Podは正常に動いていると判断します。よって、アプリケーションが固まっているにもかかわらず、次から次へのそのPodにリクエストを送り続けてしまいますよね。
こういった場合にLiveness probeを使いましょう。KubernetesにアプリケーションがDead(死んだ)と伝え、再起動するようといったことができます。
プローブの種類
さて、Health checkの種類を見てきましたが、実際にどんな種類のプローブがあるか見ていきます。種類は3つです。
HTTP
まず1つ目は、HTTPです。もっともよく使われる種類のプローブです。
アプリケーションがHTTPサーバーでなくても、立ち上げるのが簡単なので一番使い勝手が良いプローブでしょう。
- HTTPレスポンスで判断
- 2XX、3XXのレスポンス
healthy
- それ以外が
unhealthy
- 2XX、3XXのレスポンス
Command
Command probeはKubernetesがコマンドをコンテナ内で実行します。
- exit codeで判断
- 0 の時は
healthy
- それ以外は
unhealthy
- 0 の時は
TCP
最後に、TCP probeです。
特定のポートにTCPコネクションを張ることで判断します。
- TCPコネクションで判断
- 繋がれば
healthy
- 繋げられなければ
unhealthy
- 繋がれば
まとめ
Health checkの種類とProbeの種類、それぞれ見てきましたがいろいろありましたね。これらの知識を活用してより強固な土台と、安定したシステムを作ることができるのではないでしょうか。
また、Probeのより詳しい設定は公式ドキュメントにわかりやすく書いてあるので、こちらもどうぞ。
それでは、また次回。