コンテナーの readiness probe 構成の確認

実際にリクエストを処理できるかを基準に、準備状態を確認してください。

説明

readiness probe は、コンテナーがリクエストを処理する準備ができているか確認します。適切な検査なしに実行状態だけを基準にすると、初期化中や一時的に処理できないコンテナーへトラフィックが送られる場合があります。

readiness の失敗は通常の Service ルーティングで準備済みエンドポイントから除外するためのもので、コンテナーを再起動しません。再起動を判断する liveness と初期化時間を確保する startup probe は目的が異なるため、ワークロードに合わせて選んでください。

想定される影響

  • 準備できていないインスタンスへリクエストが送られ、エラーになる場合があります。
  • 不正確な検査は正常なインスタンスを除外したり、異常なインスタンスへ送信を続けたりする場合があります。

対処方法

  • HTTP、TCP、exec などの対応する方式で実際の処理能力を確認する readiness_probe を、サービスのコンテナーに構成してください。
  • 初期化と一時障害を考慮して遅延、間隔、閾値を調整し、ローリング更新と復旧をテストしてください。liveness が必要かは別途判断してください。

例

ポート 80 で /nginx_status を実際に提供する nginx 設定が別途必要な例です。既定のイメージがこのパスを自動提供すると考えないでください。実際のデプロイには保守されているイメージを使ってください。

変更前

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      liveness_probe {
        http_get {
          path = "/nginx_status"
          port = 80
        }
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      readiness_probe {
        http_get {
          path = "/nginx_status"
          port = 80
        }

        initial_delay_seconds = 10
      }

      liveness_probe {
        http_get {
          path = "/nginx_status"
          port = 80
        }
      }
    }
  }
}

補足:

  • 変更前: liveness だけがあり、アプリケーションの準備状態を別途確認していません。
  • 変更後: HTTP readiness 検査を追加します。遅延時間の指定だけでは準備状態を確認できません。

参考資料