◾️はじめに
https://dk521123.hatenablog.com/entry/2025/03/22/111422
で「readinessProbe」に触れた。 そこで、「readinessProbe」が関わる Kubernetesのコンテナのヘルスチェック(Probe)についてまとめる
目次
【1】Probe 1)Readiness Probe 2)Liveness Probe 3)Startup Probe 【2】Probeのサンプル 例1:readinessProbe 例2:livenessProbe 例3:startupProbe 【3】Probeの手段 1)httpGet 2)tcpSocket 3)exec
【1】Probe
* Kubernetesのコンテナのヘルスチェック(Probe)は以下の表の通り。 cf. Probe = 探査する、調査する
https://kubernetes.io/ja/docs/concepts/configuration/liveness-readiness-startup-probes/
https://kubernetes.io/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
Probe | Memo |
---|---|
Readiness Probe | Podが受け入れる準備できているかを確認するために使用 |
Liveness Probe | 異常と判断されたら、コンテナ再起動 |
Startup Probe | 起動時のみ実行 |
1)Readiness Probe
* Podが受け入れる準備できているかを確認するために使用
2)Liveness Probe
# Readiness Probeに類似しているが、こちらは... * コンテナは稼働中かをチェックし、異常と判断されたら、コンテナ再起動
使用上の注意
* 設定ミスると、ずっと再起動したままで稼働しない
3)Startup Probe
* コンテナ内のアプリケーションが起動されたかどうかを検証 * From k8s ver1.18
用途
* 起動や実行する前に終了されるのを防ぐ
使用上の注意
* 起動時のみ実行 * Startup Probeが設定された場合、 成功するまでLiveness Probe/Readiness Probeのチェックは無効
【2】Probeのサンプル
* ごちゃごちゃ言ってても例を見た方が理解が早い
例1:readinessProbe
apiVersion: v1 kind: Pod metadata: name: demo-server-readiness labels: app: demo-server spec: containers: - image: nginx name: nginx # ★ readinessProbe: httpGet: port: 8080 path: / failureThreshold: 3 periodSeconds: 5 # コンテナがReady状態になるまでの時間
例2:livenessProbe
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: registry.k8s.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 # ★ livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 3 # 最初のProbeを実行する前に3秒間待機するように指示 periodSeconds: 5 # Liveness Probeを5秒おきに行うように指定
例3:startupProbe
ports: - name: liveness-port containerPort: 8080 startupProbe: httpGet: path: /healthz port: liveness-port failureThreshold: 30 periodSeconds: 10
【3】Probeの手段
* Probe(ヘルスチェック)を行う手段は以下の表のとおり。
Method of probe | Explanations |
---|---|
httpGet | HTTPのGETリクエストを発行する手法 |
tcpSocket | TCPのコネクションをオープンできるかをチェックする手法 |
exec | コンテナ内でコマンドを実行する手法 |
1)httpGet
* HTTPのGETリクエストを発行する手法 => 2XX~3XXが返ってきたらhealthy、それ以外は unhealthy
サンプル抜粋
livenessProbe: httpGet: path: /healthz port: 8080 # httpHeaders: クエストの際のヘッダーを指定。 name にヘッダー名、 value に値を指定する httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
2)tcpSocket
* TCPのコネクションをオープンできるかをチェックする手法
サンプル抜粋
readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10
3)exec
* コンテナ内でコマンドを実行する手法
サンプル抜粋
livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
参考文献
https://cstoku.dev/posts/2018/k8sdojo-10/
関連記事
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ kube-proxy ~
https://dk521123.hatenablog.com/entry/2025/03/22/111422