Kubernetes Startupプローブヘルスチェック
起動が遅いアプリケーション向けのKubernetes Startupプローブレスポンスを設計します。StartupプローブはLivenessチェックを初期化中に無効にし、早期の再起動を防ぎます。
Kubernetes
詳細な説明
Kubernetes Startupプローブ
Startupプローブは、起動が遅いアプリケーションが初期化完了前にLivenessプローブによって強制終了されることを防ぎます。コンテナ起動時にのみ実行され、成功するまでLivenessとReadinessプローブを無効にします。
レスポンス形式
{
"status": "ok",
"started": true,
"checks": {
"databaseMigration": { "status": "completed" },
"cacheWarmup": { "status": "completed" },
"configLoaded": { "status": "completed" }
}
}
初期化中:
{
"status": "fail",
"started": false,
"checks": {
"databaseMigration": { "status": "completed" },
"cacheWarmup": { "status": "in_progress" },
"configLoaded": { "status": "completed" }
}
}
プローブ設定
startupProbe:
httpGet:
path: /startup
port: 8080
initialDelaySeconds: 0
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 30 # 30 * 5s = 最大150秒の起動時間
一般的な起動タスク
| タスク | 典型的な所要時間 | 影響 |
|---|---|---|
| データベースマイグレーション | 10-60秒 | スキーマの準備が必要 |
| キャッシュウォームアップ | 5-30秒 | コールドキャッシュはレイテンシの原因 |
| 設定読み込み | 1-5秒 | アプリに設定が必要 |
| コネクションプーリング | 2-10秒 | DBプール初期化 |
Startupプローブを使う理由
Startupプローブなしでは、LivenessプローブのinitialDelaySecondsを最悪の起動時間に合わせて高く設定する必要があります。Startupプローブは起動時間と継続的なヘルスチェックを分離し、遅い起動をサポートしながらLivenessプローブの間隔を短くできます。
ユースケース
Java/JVMアプリケーション、起動時にデータベースマイグレーションを実行するサービス、またはKubernetes環境でトラフィック処理前にキャッシュのウォームアップが必要なアプリケーション。