컨테이너 readiness probe 구성 점검

서비스 요청을 처리할 준비 상태를 실제 애플리케이션 기준으로 확인하세요.

설명

readiness probe는 컨테이너가 요청을 처리할 준비가 되었는지 확인합니다. 적절한 검사 없이 실행 상태만 기준으로 삼으면 초기화 중이거나 일시적으로 처리할 수 없는 컨테이너에 서비스 트래픽이 전달될 수 있습니다.

readiness 실패는 일반적인 Service 라우팅에서 준비된 엔드포인트로 사용되지 않게 하며 컨테이너를 재시작하지는 않습니다. 재시작을 결정하는 liveness와 시작 시간을 보호하는 startup probe는 목적이 다르므로 워크로드에 맞게 선택하세요.

잠재적 영향

  • 준비되지 않은 인스턴스에 요청이 전달되어 오류가 발생할 수 있습니다.
  • 부정확한 검사는 정상 인스턴스를 트래픽에서 제외하거나 장애 인스턴스에 계속 트래픽을 보낼 수 있습니다.

해결 방법

  • 서비스 컨테이너에 HTTP, TCP 또는 exec 등 지원되는 방식으로 실제 요청 처리 가능 여부를 확인하는 readiness_probe를 구성하세요.
  • 초기화 시간과 일시 장애를 고려해 지연·주기·임계값을 조정하고 롤링 업데이트와 복구를 시험하세요. liveness가 필요한지는 별도로 판단하세요.

예시

nginx가 포트 80에서 /nginx_status를 실제 제공하도록 별도 구성한 예제입니다. 기본 이미지가 이 경로를 자동 제공한다고 가정하지 마세요. 실제 배포에는 유지보수되는 이미지를 사용하세요.

변경 전

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 검사를 추가합니다. 단순한 지연 시간만으로 준비 상태가 확인되는 것은 아닙니다.

참조