【k8s】Kubernetes ~ Health check / Probe ~

◾️はじめに

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が受け入れる準備できているかを確認するために使用

https://kubernetes.io/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes

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
KubernetesWindows / 環境構築編 ~
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