Kubernetes: Liveness プローブを設定した Pod を作成する

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 を監視するための、マニフェストの書き方です。