ヘルスチェック:LivenessとReadiness Probe
Liveness ProbeとReadiness Probeを設定し、アプリケーションが正常でトラフィックを受け付けられる状態か確認します。
「ヘルスチェック:LivenessとReadiness Probe」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。
アプリケーションを正常に保つ
Kubernetes は、アプリケーションが本当に動作しているかどうかをどのように判断するのでしょうか。コンテナが単に実行中であるだけでは不十分です。トラフィックを処理できる正常な状態で、準備ができている必要があります。
Kubernetes は、プローブと呼ばれる特別なチェックを使ってアプリケーションを監視します。これらのプローブにより、ユーザーに常に信頼性の高いサービスを提供できます。
Liveness Probe とは
Liveness Probe は、アプリケーションがまだ生存していて応答可能かどうかを確認します。Liveness Probe が失敗すると、Kubernetes はコンテナが異常な状態だと判断し、再起動します。
心拍モニターのようなものだと考えてください。心臓が止まったら、再起動が必要です。デッドロックやアプリケーションのクラッシュからの復旧に役立ちます。
Liveness Probe の基本
Liveness Probe は、次のようなさまざまな方法で設定できます。
- HTTP GET: 指定したパスに HTTP リクエストを送信します。
- TCP Socket: ポートへの TCP 接続を確立できるか確認します。
- Exec Command: コンテナ内でコマンドを実行します。
Web アプリケーションでは、HTTP GET がよく使われます。Pod の YAML で定義する例を示します。
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5Liveness Probe の動作
この Python Flask アプリは、/healthz への 2 回のリクエスト後にクラッシュして異常な状態になるようシミュレートします。Kubernetes のプローブがこれを検出し、コンテナを再起動します。
まず、これを app.py として保存します。
from flask import Flask, Response
import os
import time
app = Flask(__name__)
request_count = 0
@app.route('/healthz')
def health_check():
global request_count
request_count += 1
if request_count > 2:
print("Liveness probe failing! Exiting...")
os._exit(1) # Simulate a crash
print(f"Liveness probe successful (count: {request_count})")
return Response("OK", status=200)
@app.route('/')
def home():
return "Hello from the Liveness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Liveness Probe の実行
それでは、Kubernetes が Liveness Probe をどのように使うか見てみましょう。次の YAML でデプロイすると、ヘルスチェックが失敗したときに Kubernetes が Pod を再起動します。
apiVersion: v1
kind: Pod
metadata:
name: liveness-demo
spec:
containers:
- name: liveness-container
image: python:3.9-slim-buster
command: ["python", "app.py"]
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: liveness-app-config
# (You'd need a ConfigMap for app.py, omitted for brevity)デプロイすると、2 回のチェックが成功した後、3 回目のチェックが失敗し、Kubernetes がコンテナを再起動します。
Readiness Probe とは
Readiness Probe は、アプリケーションがトラフィックを処理できる状態かどうかを確認します。Readiness Probe が失敗すると、Kubernetes はその Pod へのトラフィック送信を停止しますが、Pod 自体は再起動しません。
これは、起動時(データベース接続の確立を待つ場合など)や、正常なシャットダウンの際に重要です。「その店はお客様を迎えられる状態ですか」と考えてみてください。
Readiness Probe の基本
Readiness Probe は Liveness Probe と同様に、HTTP GET、TCP Socket、Exec コマンドを使って設定します。重要な違いは、失敗したときの影響です。
- Liveness: 失敗するとコンテナを再起動します。
- Readiness: 失敗すると Pod をサービスのエンドポイントから除外し、トラフィックを送信しません。
Readiness Probe の例を示します。
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5Readiness Probe の動作
この Flask アプリは、初期化に時間がかかるアプリケーション(データベースへの接続など)をシミュレートします。5 秒後にのみ「ready」と報告します。
これを ready_app.py として保存します。
from flask import Flask, Response
import time
app = Flask(__name__)
start_time = time.time()
READY_AFTER_SECONDS = 5
@app.route('/ready')
def readiness_check():
if time.time() - start_time > READY_AFTER_SECONDS:
print("Readiness probe successful: App is ready!")
return Response("READY", status=200)
else:
print("Readiness probe failing: App not ready yet...")
return Response("NOT READY", status=503)
@app.route('/')
def home():
return "Hello from the Readiness Probe Demo!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)Readiness Probeの実行
この YAML でデプロイすると、最初の initialDelaySeconds の時間と、/ready が 200 OK を返すまでにかかる時間が経過するまで、Pod はトラフィックを受信しません。
apiVersion: v1
kind: Pod
metadata:
name: readiness-demo
spec:
containers:
- name: readiness-container
image: python:3.9-slim-buster
command: ["python", "ready_app.py"]
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 3
volumeMounts:
- name: app-volume
mountPath: /app
volumes:
- name: app-volume
configMap:
name: readiness-app-config
# (You'd need a ConfigMap for ready_app.py, omitted for brevity)これにより、本当に準備が整ったインスタンスにのみトラフィックが送信されます。
Liveness と Readiness の比較
両方の Probe を正しく使い分けることが重要です。
- Liveness Probe: アプリケーションがクラッシュしたか、復旧不能な状態にあるかを検出するために使用します。失敗すると、Kubernetes はコンテナを再起動します。
- Readiness Probe: アプリケーションがリクエストを受け付けて処理できる状態かどうかを検出するために使用します。失敗すると、Kubernetes は Pod へのトラフィック送信を停止します。
これらは異なる目的を持ちながら相互に補完し、アプリケーションの堅牢性を保ちます。
理解度チェック
Liveness Probe と Readiness Probe に関する次の説明のうち、正しいものはどれですか?
Probe:重要なポイント
このレッスンでは、Kubernetes の Liveness Probe と Readiness Probe について学びました。これらのヘルスチェックは、アプリケーションの信頼性と可用性を維持するために重要です。
- Liveness Probe は異常なコンテナを検出し、再起動を促します。
- Readiness Probe は、Pod がネットワークトラフィックを受信できる状態かどうかを制御します。
これらを効果的に使用することで、アプリケーションは常に応答可能な状態を保ち、問題から速やかに回復できます。
よくある質問
「ヘルスチェック:LivenessとReadiness Probe」レッスンは無料ですか?
はい。「ヘルスチェック:LivenessとReadiness Probe」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。
「ヘルスチェック:LivenessとReadiness Probe」で何を学びますか?
Liveness ProbeとReadiness Probeを設定し、アプリケーションが正常でトラフィックを受け付けられる状態か確認します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kubernetes Basicsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ヘルスチェック:LivenessとReadiness Probe」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKubernetes Basicsレッスンでコードを書いて実行できますか?
はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- kubectl logsによるログ管理
- PrometheusとGrafanaによるメトリクス管理
- ヘルスチェック:LivenessとReadiness Probe
- 分散トレーシングとイベント