Kubernetes入門4: Liveness and Readiness Probesを使ってみる
Kubernetes上で実行されるアプリケーションコンテナの状態を確認する仕組みとして、Liveness and Readiness Probesがあります。それぞれ、
- Liveness probe
- 失敗するとコンテナを再起動する
- Readiness probe
- 失敗するとコンテナにトラフィックを流さなくなる(コンテナの再起動はしない)
という特徴があります。
今回は、Kubernetes TasksのConfigure Liveness and Readiness Probesを試してみました。
Liveness Probeの例がいくつか載っていますが、この記事では「Linuxコマンド」のみ実行しています。
Linuxコマンドで状態確認
設定ファイルは次の通りです。
# https://k8s.io/examples/pods/probe/exec-liveness.yaml apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: k8s.gcr.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
この設定ファイルでは、コンテナ一つのPodが定義されており、そのコンテナは起動後に、touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;
というコマンドを実行しています。このコマンドでは、指定ディレクトリにファイルを作成し、30秒後に削除しています。
一方、liveness probeの設定をみると、5秒ごとに cat /tmp/healthy
コマンドを実行し、ファイルの存在確認を行っています。そのため、30秒後にはコマンドが失敗し、コンテナの再起動を試みることになるはずです。
Podを実行。
$ kubectl create -f https://k8s.io/examples/pods/probe/exec-liveness.yaml
30秒後にPodの状態確認。
$ kubectl describe pod liveness-exec Events: Type Reason Age From Message ---- ------ ---- ---- ------- <snip> Warning Unhealthy 49s (x3 over 59s) kubelet, test_node Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory Normal Killing 18s kubelet, test_node Killing container with id docker://liveness:Container failed liveness probe.. Container will be killed and recreated. <snip>
Liveness probeにより、コンテナの異常を検知し、コンテナ再起動を行っていることがわかります。
Readiness probeについても、元のドキュメントにyamlファイルが載っていますので、興味がある方はご参照ください。