HPA Scale-in이 만든 AZ 불균형, Pod Deletion Cost로 바로잡기 | 당근 SRE 밋업 4회
- 로컬리티 로드 밸런싱 도입 후 AZ 간 파드 불균형(존 스큐) 문제가 발생하여 특정 존의 과부하 및 장애를 유발했습니다. 🌐
- HPA 스케일인 시 쿠버네티스 스케줄러가 삭제할 파드를 결정하지 않아 토폴로지 스프레드 제약 조건만으로는 존 스큐를 해결할 수 없었습니다. 📉
- 수동 재시작이나 디스케줄러 방식은 근본적인 해결책이 아니거나 운영 안정성에 리스크가 있어, 파드 삭제 순서를 직접 제어하는 방법이 필요했습니다. 🛠️
- 쿠버네티스 1.22+ 버전부터 제공되는 파드 딜리션 코스트 기능을 활용하여 낮은 코스트 값을 가진 파드부터 삭제되도록 우선순위를 부여했습니다. 🔢
- 모든 파드에 코스트를 부여하는 복잡한 방식 대신, 스케일인이 점진적으로 일어난다는 점에 착안하여 일부 파드에만 코스트를 부여하는 단순하고 비침투적인 전략을 채택했습니다. 💡
- 자동화된 컨트롤러를 개발하여 파드 수 변화 이벤트를 감지하고, 존 불균형을 계산하여 필요한 파드에만 동적으로 파드 딜리션 코스트를 적용했습니다. 🤖
- 균형 상태에서도 다음 스케일인 시 예측 가능한 균형 유지를 위해 각 존의 일부 파드에 동일한 작은 코스트를 부여하는 '대칭 코스트' 아이디어를 추가했습니다. ⚖️
- 컨트롤러 도입 후 AZ 간 파드 수 및 CPU 사용량 편차가 크게 줄어들어 지표가 안정화되었으며, 존 스큐로 인한 장애가 연건으로 감소했습니다. ✅
- 수동 개입 없이 시스템 안정성을 높이고 운영 부담을 줄여, 지표 개선과 운영 효율성 증대라는 두 마리 토끼를 모두 잡았습니다. 🚀