KubernetesのProbe入門 ~Liveness、Readiness、StartupProbeの使い分け~
はじめに
Kubernetesでコンテナ化アプリケーションを運用する際、Probeは非常に重要な役割を果たします。この記事では、Probeの基本概念や各種Probeの違い、設定方法、そして運用時に注意すべきポイントについて解説します。
1. Probeとは?
KubernetesにおけるProbeは、コンテナの状態を定期的にチェックする仕組みです。正しく設定することで、以下のメリットがあります。
-
自動回復:
異常が検出された場合、Kubernetesはコンテナを再起動するなどの対応を自動的に行い、アプリケーションの健全性を保ちます。 -
サービス提供の最適化:
コンテナがリクエストを受け付けられる状態かどうかを判断し、トラフィックを適切に振り分けることが可能です。
Probeは主に3種類あります。
2. 各種Probeの種類と役割
2.1 livenessProbe
livenessProbeは、コンテナが正常に動作しているかどうかをチェックします。もし異常が検出された場合、Kubernetesはそのコンテナを強制的に再起動します。
使用例:
- アプリケーションがハングしている場合に再起動を促す
- メモリリークやその他の致命的なエラーが発生している際に回復する
2.2 readinessProbe
readinessProbeは、コンテナがリクエストを受け付ける準備ができているかを判断します。
特徴:
- コンテナが初期化中や一時的に負荷が高いときは、サービスから除外する
- ロードバランサーのトラフィック送信対象に含めるかどうかの判断基準になる
2.3 startupProbe
startupProbeは、アプリケーションの起動プロセスを監視します。特に、初回起動時に初期化に時間がかかるアプリケーションで有効です。
ポイント:
- 起動プロセスが完了するまで、livenessProbeの失敗による不必要な再起動を防ぐ
- 起動後は通常のlivenessProbeに移行する
3. Probeの設定方法
以下は、シンプルなPod定義ファイルでlivenessProbeとreadinessProbeを設定する例です。
apiVersion: v1
kind: Pod
metadata:
name: sample-app
spec:
containers:
- name: app-container
image: myapp:latest
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
この設定例では、コンテナが/health
エンドポイントでヘルスチェックされ、異常があれば再起動されます。また、/ready
エンドポイントでサービスリクエストの受け入れ準備ができているかが判断され、準備が整うまでトラフィックが流れないようになります。
4. 運用時の注意点
-
適切な初期遅延:
アプリケーションの起動時間に合わせたinitialDelaySeconds
の設定が必要です。過度に短いと、起動前の状態で失敗と判断されるリスクがあります。 -
Probe間隔とタイムアウト:
periodSeconds
やtimeoutSeconds
の値を適切に設定することで、ネットワーク遅延や一時的な負荷増加に柔軟に対応できます。 -
エンドポイントの設計:
ヘルスチェック用エンドポイントは、アプリケーション内部の重要なリソース(データベース接続など)も考慮し、実際のサービス提供状態を正しく反映するように設計しましょう。
5. まとめ
KubernetesのProbeは、コンテナの健全性とサービスの安定運用を支える重要な仕組みです。
- livenessProbeでコンテナの異常を検知し自動回復を促し、
- readinessProbeで適切なタイミングでトラフィックを流す、
-
startupProbeで初回起動時の誤判定を防ぐ、
といった役割をうまく組み合わせることで、信頼性の高いアプリケーション運用が可能になります。
Kubernetes環境を構築・運用する際は、これらのProbeを積極的に活用して、システム全体の健全性を保ちましょう。
Discussion