Kubernetes 롤아웃: SLO에 따라 승격하고, 'pods are Ready'에 의존하지 않기
발행: (2026년 3월 15일 오전 12:57 GMT+9)
4 분 소요
원문: Dev.to
Source: Dev.to
Readiness는 로컬 신호이고, Production 영향은 전역적입니다.
Pods는 Ready 상태이면서도 SLO 윈도우가 이미 소진되고 있을 수 있습니다.
The failure chain
- Rollout이 트래픽을 빠르게 전환합니다.
- 새로운 Pods가 HPA가 반응하기 전에 포화됩니다.
- HPA 스크레이프 윈도우는 최소 15–30 seconds 입니다.
- P95 지연 시간이 상승합니다.
- 오류 비율이 증가합니다.
- SLI가 악화됩니다.
모든 것이 정상적으로 보이지만, 오류 예산은 조용히 소모되고 있습니다.
Why “pods are Ready” lies to you
- Ready는 컨테이너가 시작되어 헬스 체크를 통과했음을 의미할 뿐입니다.
- P95 지연 시간, 오류 비율, 혹은 SLO 조각이 유지되고 있는지에 대해서는 아무것도 알려주지 않습니다.
- 메트릭이 너무 거칠어 캐너리가 “green” 상태에 머물 수 있습니다.
- 라벨도 없고, 슬라이스도 없으면 블라스트 반경이 보이지 않습니다.
Three resolvers
1. Pre‑scale before the first canary step
- 트래픽이 전환되기 전에 복제본 수를 늘립니다.
- HPA가 포화된 상태가 아니라 안전한 기준선에서 따라잡을 수 있습니다.
2. Match step interval to your HPA scale‑up window
- 기본 안정화 윈도우는 3 minutes 입니다.
- 다음 명령으로 확인하세요:
kubectl get hpa -o yaml- 해당 윈도우가 닫히기 전에 승격하는 것은 눈을 가리고 승격하는 것입니다.
3. Gate steps on SLI health
- Argo Rollouts에
AnalysisRun을 연결해 오류 비율과 P95 지연 시간이 SLO 범위 내에 있는지 확인한 뒤에만 승격합니다. - SLI가 아직 회복 중이라면 승격이 대기합니다.
The rule
캐너리가 고정된 윈도우 동안 중요한 SLO 슬라이스를 유지할 때만 승격합니다.
그 윈도우를 벗어나면 자동 롤백이 트리거됩니다.
Rollout 속도와 자동 스케일러 반응 시간은 별도로 조정됩니다. 이 간극이 바로 오류 예산이 누군가 페이지를 호출하기 전에 소진되는 지점입니다.
Deep dive
현재 여러분의 Rollout 단계 간격은 어떻게 설정되어 있나요?