쿠버네티스를 운영하다 보면 CPU나 메모리 같은 리소스를 조정해야 할 때가 자주 생깁니다. 그런데 지금까지는 리소스를 바꾸기 위해선 Pod를 종료하고 다시 생성해야 했습니다. 이 과정은 다운타임을 유발하고, 특히 데이터베이스 같은 상태를 가진 애플리케이션에는 치명적일 수 있습니다.
이러한 불편을 해결하기 위해 Kubernetes 1.33에서는 In-Place Pod Vertical Scaling이라는 기능이 도입되었습니다. 이 기능은 Pod를 재시작하지 않고도 리소스를 조정할 수 있게 해주며, 현재 베타 기능으로 기본 활성화되어 있습니다. 이 글에서는 해당 기능의 개념, 기술적 배경, 사용 방법, 주요 이점, 고려사항 등을 상세히 설명합니다.
In-Place Pod Vertical Scaling이란?
이 기능은 실행 중인 Pod의 CPU와 메모리 리소스를 동적으로 조정할 수 있게 해주는 기능입니다. 구체적으로는 Pod의 resources.requests와 resources.limits 값을 실시간으로 수정할 수 있습니다. 기존에는 리소스를 변경하기 위해 Pod를 삭제하고 다시 띄워야 했지만, 이제는 이 과정을 생략할 수 있습니다.
주요 변화 사항
- Kubernetes 1.33에서 베타로 제공되며 기본적으로 활성화되어 있음
- 리소스 변경을 위한 별도의 feature gate 설정이 불필요함
- kubectl patch 명령어로 간단하게 리소스를 변경할 수 있음
- Stateful workload에서도 안전하게 리소스를 조정할 수 있음
왜 중요한가?
1. 무중단 리소스 조정
기존에는 Vertical Pod Autoscaler(VPA)를 사용할 경우에도 리소스를 바꾸기 위해 Pod를 삭제하고 다시 생성해야 했습니다. 이로 인해 연결이 끊기거나 사용자가 오류를 경험할 수 있었습니다. 이제는 애플리케이션을 중단하지 않고도 리소스를 조절할 수 있어 안정성이 크게 향상됩니다.
2. 비용 효율성
과도한 리소스 할당은 클라우드 비용 증가의 주요 원인입니다. In-Place Scaling을 활용하면 실제 사용량에 따라 리소스를 조정할 수 있어 불필요한 비용을 줄일 수 있습니다.
3. 상태 유지 애플리케이션 지원
데이터베이스, 메시지 큐 등 상태를 유지해야 하는 워크로드에서는 중단 없이 리소스를 늘릴 수 있다는 점이 매우 중요합니다. 운영 중에도 안정적으로 서비스를 지속할 수 있습니다.
4. VPA 통합 가능성
향후 VPA와 통합되면 자동 리소스 조정도 재시작 없이 가능해질 예정입니다. 현재는 아직 직접 수동으로 조정해야 하지만, 이 기능은 미래를 위한 기반이 됩니다.
실제 사용 사례
데이터베이스 워크로드
예를 들어, PostgreSQL 같은 데이터베이스가 갑작스러운 쿼리 증가로 인해 성능 저하가 발생했을 때, 메모리나 CPU를 즉시 늘려 문제를 해결할 수 있습니다. 이때 연결은 유지되므로 사용자 입장에서는 아무런 영향이 없습니다.
트래픽 급증 대응
쇼핑몰에서 이벤트나 세일 시즌 등으로 인해 특정 API의 부하가 급증할 때, Node.js 같은 웹 애플리케이션에 CPU를 유연하게 할당하여 성능 저하 없이 트래픽을 처리할 수 있습니다.
머신러닝 추론 서비스
TensorFlow Serving 등에서 인퍼런스 요청이 급증할 때 리소스를 즉시 확장하여 처리량을 높일 수 있습니다. 재시작이 없기 때문에 처리 중인 작업에도 영향이 없습니다.
기술적 구성 요소
리소스 필드 변경
Kubernetes API에서 Pod의 resources.requests와 resources.limits 필드가 변경 가능하도록 설계되었습니다. kubectl patch 명령으로 해당 리소스를 실시간으로 조정할 수 있습니다.
kubelet과 컨테이너 런타임의 협력
kubelet은 노드의 가용 리소스를 확인하고, 문제가 없을 경우 컨테이너 런타임(containerd, CRI-O 등)과 통신하여 cgroup 설정을 업데이트합니다. 이 과정은 비동기적으로 수행되며, 컨테이너는 계속 실행됩니다.
Pod 상태 정보
Pod 리소스 조정 과정 중 다음과 같은 상태 조건이 표시됩니다.
- PodResizePending: 노드 리소스 부족으로 조정 대기 중
- PodResizeInProgress: 리소스 조정이 진행 중
kubectl describe pod 명령을 통해 해당 상태를 확인할 수 있습니다.
런타임 호환성
- containerd (v1.6 이상): 완전 지원
- CRI-O (v1.24 이상): 완전 지원
- Docker: 제한적 지원 (사용 권장되지 않음)
- cgroup v2: 메모리 조정 안정성 향상
사용 시 주의사항
- Linux 전용 기능으로, Windows Pod에서는 사용할 수 없습니다.
- **고정 리소스 정책(CPU 매니저 static 등)**을 사용하는 경우에는 지원되지 않습니다.
- JVM 기반 애플리케이션은 메모리 조정 시 -Xmx 설정이 필요하므로 재시작이 필요할 수 있습니다.
- cgroup v1 사용 시 메모리 축소는 불안정할 수 있으며, cgroup v2 사용을 권장합니다.
- Pod의 QoS 클래스는 고정이며, 리소스 변경으로 바뀌지 않습니다.
Kubernetes 1.33의 In-Place Pod Vertical Scaling 기능은 쿠버네티스 운영의 큰 전환점이 될 수 있는 기능입니다. 이제는 Pod를 재시작하지 않고도 리소스를 조정할 수 있어, 서비스 중단 없이 성능을 확보할 수 있습니다.
이 기능은 특히 상태 기반 워크로드에 매우 유용하며, 비용 최적화 및 운영 효율성 향상에도 기여합니다. 다만 런타임 호환성, 정책 제한 등 몇 가지 주의사항이 있으므로 실제 환경에 도입하기 전에 충분한 테스트가 필요합니다.
앞으로 VPA와의 통합이 완료되면 자동 리소스 조정도 재시작 없이 가능해질 것으로 기대되며, 수동 관리의 번거로움 없이 더 유연한 리소스 운영이 가능해질 것입니다.
https://itnext.io/kubernetes-1-33-resizing-pods-without-the-drama-finally-88e4791be8d1
Kubernetes 1.33: Resizing Pods Without the Drama (Finally!) 🎉
Remember that feeling? You meticulously configured your Kubernetes pods, set the CPU and memory just right (or so you thought), only to…
itnext.io
'Kubernetes' 카테고리의 다른 글
클라우드 운영을 바꾸는 새로운 접근법: Kagent가 가져올 AI 기반 Kubernetes 혁신 (0) | 2025.06.09 |
---|---|
쿠버네티스에서 AI 트래픽을 더 똑똑하게 처리하는 법: Gateway API Inference Extension 완벽 해설 (0) | 2025.06.08 |
쿠버네티스 v1.33 '옥타린' 업데이트 총정리: 새로운 마법을 만나다 (0) | 2025.04.27 |
Kagent: AI 기반 쿠버네티스 자동화의 새로운 혁신 (0) | 2025.03.26 |
Kubernetes 보안 위협 TOP 10: OWASP 가이드로 안전한 클러스터 운영하기 (0) | 2025.03.19 |