핵심 요약
K8s 1.33에서 in-place pod resize가 GA. 파드를 재시작하지 않고 CPU·메모리를 늘리고 줄일 수 있다. 사내 PostgreSQL·Elasticsearch·Kafka 같은 스테이트풀 워크로드에서 트래픽 급증 시 즉시 스케일업, 파드 재시작 회피로 P95 latency 스파이크 0에 가깝게 운영.
1. 동작
apiVersion: v1
kind: Pod
spec:
containers:
- name: db
resources:
requests: { cpu: "2", memory: "4Gi" }
limits: { cpu: "4", memory: "8Gi" }
resizePolicy:
- resourceName: cpu
restartPolicy: NotRequired
- resourceName: memory
restartPolicy: NotRequired
2. 리사이즈 실행
kubectl patch pod db --subresource resize --patch '
spec:
containers:
- name: db
resources:
requests: { cpu: "4", memory: "8Gi" }
limits: { cpu: "8", memory: "16Gi" }
'
kubelet이 cgroup만 조정. 컨테이너 재시작 없음.
3. VPA 통합
Vertical Pod Autoscaler가 in-place resize 모드 지원. updateMode: InPlaceOrRecreate로 설정하면 가능하면 재시작 없이 조정.
4. 함정
- 메모리 다운사이즈 — 컨테이너가 OOM 위험, 절대 금지 권장
- CRI-O/containerd 1.7+ 필요
- cpu shares 변경이 즉시 반영되지 않을 수 있음(스케줄러 지연 ~5s)
5. 스테이트풀 운영 시나리오
| 상황 | 이전 | 1.33 |
|---|---|---|
| PG 메모리 부족 | 파드 재시작 → 페이지 캐시 손실 → 콜드 쿼리 60s 지연 | in-place 8→16GB, 무중단 |
| ES heap 늘리기 | 롤링 재시작 30분 | JVM 옵션은 그대로지만 컨테이너 limit만 늘림(특수 케이스) |
| Kafka broker CPU 추가 | 리더 재선출 | 즉시 |
6. 모니터링
kubectl get pods --output 'jsonpath={.items[*].status.resize}'
# "InProgress" / "Deferred" / "Infeasible"
7. 점진 도입
먼저 stateless API에서 1주, stateful로 확대. resizePolicy를 기본 설정으로 PodTemplate에 박아 두면 운영자가 일관되게 활용.
자주 묻는 질문
Q. HPA와 함께? 같은 파드에 HPA + VPA InPlace는 권장 안 함(중복 결정). HPA만 쓰거나 VPA만 쓰거나.

댓글 0