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