Kubernetes の Pod のマニフェストで、Liveness プローブによる Pod 監視を定義する方法です。
Liveness プローブとは
Liveness プローブとは、Pod 内のアプリケーションが正常に動作しているかをチェックする機能です。
「成功」または「失敗」の応答が返され、「失敗」が返された場合、Pod は再起動され、コンテナが再作成されます。
kubelet による Pod 監視は、メイン プロセスのダウンを検知します。よって、デッド ロックや無限ループなどのメイン プロセスがダウンしないケースでは、Pod の再スケジュールは実施されません。
Liveness プローブでは、Pod 外からの応答によって 監視するため、上記の場合にも対応できます。
Liveness プローブが「成功」を返すのは、次の場合です。
- Exec
コンテナ内で実行したコマンドが 0 を返した場合 - HTTP Get
HTTP レスポンスが 2xx または 3xx の場合 - TCP Socket
TCP セッションが確立された場合
Liveness プローブを設定するマニフェスト
apiVersion: v1
kind: Pod
metadata:
name: app1
spec:
containers:
- image: dockerhubuser/app1
name: app1-container
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
1~8行目については、次の記事を参照してください。
>> マニフェスト ファイルで Kubernetes クラスタに Pod を作成する
ここから、Liveness プローブの設定です。
livenessProbe:
使用するプローブの種類は httpGet です。httpGet の場合、HTTP リクエストで指定するパスと、宛先ポート番号を設定します。
httpGet:
path: /
port: 8080
使用するプローブの種類が Exec の場合は、次のように書きます。
command で、実行するコマンドを設定します。
exec:
command: ["test_command", "-command_option"]
使用するプローブの種類が TCP Socket の場合は、次のように書きます。
port で、リクエストの宛先のポート番号を設定します。
tcpSocket:
port: 5000
次のとおり、Liveness プローブのその他の設定をします。
initialDelaySeconds: 最初の監視開始までの遅延時間 (秒)
periodSeconds : 監視の間隔 (秒)、デフォルトは10秒
successThreshold : 「成功」と判断するまでの回数
failureThreshold : 「失敗」と判断するまでの回数
initialDelaySeconds: 30
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
以上が、Liveness プローブで Pod を監視するための、マニフェストの書き方です。