livenessProbeのないコンテナ

livenessProbeまたはreadinessProbeが設定されていないコンテナを検出します。信頼性の高いKubernetesデプロイメントにヘルスチェックが不可欠な理由を学びます。

Health Checks

詳細な説明

Kubernetesのヘルスプローブ

Kubernetesはヘルスプローブを使用して、コンテナが生きているか、トラフィックを処理する準備ができているかを判断します。プローブがないと、Kubernetesはアプリケーションレベルの障害を検出できません — コンテナプロセスが実行中かどうかしか分かりません。

プローブなしの例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-server
  labels:
    app: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      securityContext:
        runAsNonRoot: true
      containers:
        - name: api
          image: api-server:3.2.1
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 200m
              memory: 256Mi
            limits:
              cpu: 500m
              memory: 512Mi

バリデーターが検出する問題

  • 警告: コンテナ 'api' にlivenessProbeがありません
  • 情報: コンテナ 'api' にreadinessProbeがありません

3種類のプローブ

プローブ 目的 失敗時の動作
livenessProbe コンテナは生きているか? コンテナが再起動
readinessProbe トラフィックを受け入れられるか? Serviceエンドポイントから除外
startupProbe 起動は完了したか? 成功まで他のプローブを無効化

プローブ設定例

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 15
  periodSeconds: 10
  failureThreshold: 3
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

プローブの種類

  • httpGet: HTTP GETリクエストを実行
  • tcpSocket: ポートが開いているか確認
  • exec: コンテナ内でコマンドを実行
  • grpc: gRPCヘルスチェックを実行(k8s 1.27以降)

ユースケース

不健全なコンテナの自動再起動とローリングアップデート中の適切なトラフィックルーティングを可能にするために、Kubernetesデプロイメントにヘルスチェックを追加する。

試してみる — K8s Manifest Validator

フルツールを開く