KubernetesでPodのライフサイクル管理において、主に使用される存活性プローブ(liveness probe)について説明します。
1. Podのライフサイクルとプローブの役割
アプリケーションインスタンスの動作状態を監視し、異常時には自動的に対応するためのメカニズムが「プローブ」です。これにより、Kubernetesは問題のあるインスタンスを業務トラフィックから除外できます。
- liveness probes: アプリケーションの現在の動作状態を確認し、異常時にはコンテナを再起動します。
- readiness probes: アプリケーションがリクエストを受け取れる状態かを確認し、異常時にはトラフィックを転送しません。
- startup probes: コンテナの起動完了を確認します。
Execコマンドによるプローブ
<yaml>
livenessProbe:
exec:
command:
- /bin/ls
- /app/status
</yaml>
TCP Socketを使用したプローブ
<yaml>
livenessProbe:
tcpSocket:
port: 9090
</yaml>
HTTP Getリクエストを使用したプローブ
<yaml>
livenessProbe:
httpGet:
path: /status
port: 8080
host: localhost
scheme: HTTP
</yaml>
2. 存活性プローブのユースケース
Execプローブの例
<yaml>
apiVersion: v1
kind: Pod
metadata:
name: app-liveness-exec
spec:
containers:
- name: app-container
image: nginx:latest
ports:
- containerPort: 80
livenessProbe:
exec:
command: ["/bin/cat", "/app/config"]
</yaml>
TCP Socketプローブの例
<yaml>
apiVersion: v1
kind: Pod
metadata:
name: app-liveness-tcp
spec:
containers:
- name: app-container
image: nginx:latest
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 8080
</yaml>
HTTP Getプローブの例
<yaml>
apiVersion: v1
kind: Pod
metadata:
name: app-liveness-http
spec:
containers:
- name: app-container
image: nginx:latest
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
</yaml>
追加設定の説明
以下のような追加設定も可能です:
initialDelaySeconds: 最初のプローブまでの待機時間。timeoutSeconds: プローブのタイムアウト秒数。periodSeconds: プローブの頻度。failureThreshold: 失敗と見なす連続失敗回数。successThreshold: 成功と見なす連続成功回数。
<yaml>
apiVersion: v1
kind: Pod
metadata:
name: app-liveness-configured
spec:
containers:
- name: app-container
image: nginx:latest
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 10
</yaml>