livenessProbeのないコンテナ
livenessProbeまたはreadinessProbeが設定されていないコンテナを検出します。信頼性の高いKubernetesデプロイメントにヘルスチェックが不可欠な理由を学びます。
Health Checks
詳細な説明
Kubernetesのヘルスプローブ
Kubernetesはヘルスプローブを使用して、コンテナが生きているか、トラフィックを処理する準備ができているかを判断します。プローブがないと、Kubernetesはアプリケーションレベルの障害を検出できません — コンテナプロセスが実行中かどうかしか分かりません。
プローブなしの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
labels:
app: api
spec:
replicas: 3
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
securityContext:
runAsNonRoot: true
containers:
- name: api
image: api-server:3.2.1
ports:
- containerPort: 8080
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
バリデーターが検出する問題
- 警告: コンテナ 'api' にlivenessProbeがありません
- 情報: コンテナ 'api' にreadinessProbeがありません
3種類のプローブ
| プローブ | 目的 | 失敗時の動作 |
|---|---|---|
| livenessProbe | コンテナは生きているか? | コンテナが再起動 |
| readinessProbe | トラフィックを受け入れられるか? | Serviceエンドポイントから除外 |
| startupProbe | 起動は完了したか? | 成功まで他のプローブを無効化 |
プローブ設定例
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
プローブの種類
- httpGet: HTTP GETリクエストを実行
- tcpSocket: ポートが開いているか確認
- exec: コンテナ内でコマンドを実行
- grpc: gRPCヘルスチェックを実行(k8s 1.27以降)
ユースケース
不健全なコンテナの自動再起動とローリングアップデート中の適切なトラフィックルーティングを可能にするために、Kubernetesデプロイメントにヘルスチェックを追加する。