Kubernetes v1.35가 RestartAllContainers 액션을 도입해 Pod 전체 재시작 시 대규모 AI/ML 워크로드의 장애 복구 오버헤드를 수분에서 수초로 단축
Kubernetes v1.35: New level of efficiency with in-place Pod restart
AI 요약
Context
Kubernetes의 기존 재시작 정책은 단일 컨테이너 또는 Pod 레벨에서만 작동했으며, init 컨테이너, 사이드카, 메인 컨테이너 간 복잡한 의존성이 있는 현대적 애플리케이션에서는 전체 Pod을 삭제하고 재생성하는 방식만 가능했다. 1,000개 노드 규모의 AI/ML 훈련 클러스터에서 Pod 재스케줄링 오버헤드는 월 $100,000의 컴퓨팅 자원 낭비를 초래했다.
Technical Solution
- Pod 전체 재시작 기능 추가: RestartAllContainers 액션을 container restart rules에 신규 추가해 모든 컨테이너를 순차적으로 재시작
- Pod 리소스 보존: Pod UID, IP 주소, 네트워크 네임스페이스, 샌드박스, 볼륨(emptyDir, PVC)을 유지하면서 in-place 재시작 수행
- 초기화 시퀀스 재실행: 모든 init 컨테이너를 처음부터 순서대로 재실행한 후 사이드카와 일반 컨테이너 시작
- 모니터링 가시성 확보: Pod 상태에 AllContainersRestarting 조건을 추가해 재시작 중 상태 신호 제공 및 컨테이너 재시작 횟수 카운트 증가
- 기능 활성화: RestartAllContainersOnContainerExits 피처 게이트를 API 서버와 kubelet에서 활성화하면 기존 앱에 적용 가능
Impact
- 대규모 AI/ML 워크로드의 장애 복구 시간을 수분에서 수초로 단축
- 월 $100,000의 컴퓨팅 자원 낭비 제거 가능 (1,000개 노드 규모 기준)
Key Takeaway
분산 시스템에서 Pod 전체 상태 초기화가 필요한 경우, Pod 삭제·재생성 대신 in-place 재시작으로 스케줄링 오버헤드를 제거함으로써 대규모 동기식 워크로드의 복구 효율성을 획기적으로 개선할 수 있다. 특히 노드 캐싱 등 Pod 정체성에 종속된 최적화를 유지하면서도 깨끗한 상태로 재시작할 수 있다는 점이 설계의 핵심이다.
실천 포인트
1,000개 이상의 노드를 운영하는 AI/ML 훈련 환경에서 특정 Pod이나 노드 장애 시 전체 fleet 재시작이 필요한 경우, RestartAllContainers 액션을 container restart rules에 정의하면 Pod 삭제 대신 in-place 재시작으로 장애 복구 시간을 수분에서 수초로 단축할 수 있다. 단, 모든 컨테이너가 재진입 가능(reentrant)해야 하며 init 컨테이너 재실행에 대비하고 graceful shutdown을 preStop 훅에 의존하지 않도록 설계해야 한다.