KubernetesのPodリソースにおける存活性プローブの実装

KubernetesでPodのライフサイクル管理において、主に使用される存活性プローブ(liveness probe)について説明します。

1. Podのライフサイクルとプローブの役割

アプリケーションインスタンスの動作状態を監視し、異常時には自動的に対応するためのメカニズムが「プローブ」です。これにより、Kubernetesは問題のあるインスタンスを業務トラフィックから除外できます。

  • liveness probes: アプリケーションの現在の動作状態を確認し、異常時にはコンテナを再起動します。
  • readiness probes: アプリケーションがリクエストを受け取れる状態かを確認し、異常時にはトラフィックを転送しません。
  • startup probes: コンテナの起動完了を確認します。

Execコマンドによるプローブ

<yaml>
livenessProbe:
  exec:
    command:
    - /bin/ls
    - /app/status
</yaml>

TCP Socketを使用したプローブ

<yaml>
livenessProbe:
  tcpSocket:
    port: 9090
</yaml>

HTTP Getリクエストを使用したプローブ

<yaml>
livenessProbe:
  httpGet:
    path: /status
    port: 8080
    host: localhost
    scheme: HTTP
</yaml>

2. 存活性プローブのユースケース

Execプローブの例

<yaml>
apiVersion: v1
kind: Pod
metadata:
  name: app-liveness-exec
spec:
  containers:
  - name: app-container
    image: nginx:latest
    ports:
    - containerPort: 80
    livenessProbe:
      exec:
        command: ["/bin/cat", "/app/config"]
</yaml>

TCP Socketプローブの例

<yaml>
apiVersion: v1
kind: Pod
metadata:
  name: app-liveness-tcp
spec:
  containers:
  - name: app-container
    image: nginx:latest
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 8080
</yaml>

HTTP Getプローブの例

<yaml>
apiVersion: v1
kind: Pod
metadata:
  name: app-liveness-http
spec:
  containers:
  - name: app-container
    image: nginx:latest
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
        scheme: HTTP
</yaml>

追加設定の説明

以下のような追加設定も可能です:

  • initialDelaySeconds: 最初のプローブまでの待機時間。
  • timeoutSeconds: プローブのタイムアウト秒数。
  • periodSeconds: プローブの頻度。
  • failureThreshold: 失敗と見なす連続失敗回数。
  • successThreshold: 成功と見なす連続成功回数。
<yaml>
apiVersion: v1
kind: Pod
metadata:
  name: app-liveness-configured
spec:
  containers:
  - name: app-container
    image: nginx:latest
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 15
      timeoutSeconds: 10
</yaml>

タグ: Kubernetes LivenessProbes YAMLConfiguration

7月12日 20:16 投稿