- Published on
쿠버네티스의 다양한 Pod 정리
🚀 쿠버네티스의 다양한 Pod 관리 방식
쿠버네티스에서는 Pod을 직접 운영하지 않고, 다양한 컨트롤러를 통해 관리한다. 각 컨트롤러는 목적에 따라 다르게 설계되어 있으며, 장단점을 고려하여 적절히 사용하는 것이 중요함.
1️⃣ Standalone Pod
✅ 개념
- 컨트롤러 없이 직접 생성한 단일 Pod
✅ 장점
- 빠르게 생성 가능
- 디버깅, 테스트용으로 간단히 활용 가능
🚨 단점
- 자동 복구 미지원
- 스케일링 불가
- 롤링 업데이트 미지원
- 노드 장애 시 재배치 불가
- 운영 효율성 낮음
✅ 언제 사용하나?
- 테스트, 실험용 환경
- 간단한 디버깅 목적
2️⃣ ReplicaSet
✅ 개념
- 동일한 Pod을 여러 개 복제하여 실행
- Pod이 죽으면 자동으로 새로 생성
✅ 장점
- Pod 수를 항상 일정하게 유지
- 장애 발생 시 자동 복구
🚨 단점
- 롤링 업데이트나 롤백 미지원
- 직접 관리하려면 복잡
- 실무에서는 Deployment를 주로 사용
✅ 언제 사용하나?
- Deployment 내부에서 자동 사용됨
- 특정 상황에서 수동 Pod 복제 관리
3️⃣ Deployment
✅ 개념
- ReplicaSet을 포함한 컨트롤러
- 가장 일반적인 애플리케이션 배포 방식
✅ 장점
- 롤링 업데이트, 롤백 지원
- 자동 복구 및 스케일링 가능
- 선언적 구성으로 운영 편의성 높음
🚨 단점
- 상태가 필요한 앱(DB 등)에는 부적합
✅ 언제 사용하나?
- 대부분의 무상태 애플리케이션
- 웹 서버, 백엔드 API 등
4️⃣ StatefulSet
✅ 개념
- 각 Pod에 고유한 ID와 볼륨을 제공
- 상태가 있는 앱을 위한 컨트롤러
✅ 장점
- 고정된 네트워크 이름
- 재시작해도 동일한 볼륨 사용 가능
- 순차적 배포/종료 지원
🚨 단점
- 설정 복잡
- 빠른 확장 어려움
✅ 언제 사용하나?
- 데이터베이스, Kafka, Redis 등
- 상태 유지를 요구하는 앱
5️⃣ DaemonSet
✅ 개념
- 모든 노드에 하나씩 Pod을 배포
- 노드 추가 시 자동으로 배포됨
✅ 장점
- 로그 수집, 모니터링 등에 필수
- 시스템 전반에 필요한 Pod 실행 가능
🚨 단점
- 리소스 사용이 높을 수 있음
- 노드 선택 세부 설정 필요
✅ 언제 사용하나?
- Fluentd, Filebeat, Prometheus Node Exporter
- 클러스터 시스템 수준의 에이전트
6️⃣ Job / CronJob
✅ 개념
- Job: 한 번 실행 후 종료되는 작업
- CronJob: 정기적으로 실행되는 Job
✅ 장점
- 일회성 및 스케줄 기반 작업 처리에 적합
- 완료 시 자동 종료
🚨 단점
- 충돌 제어 및 실패 재처리 필요
- 자주 실행 시 리소스 낭비 가능
✅ 언제 사용하나?
- 데이터 마이그레이션, 정기 백업
- 로그 정리, 반복 배치 작업
✅ 요약 정리
컨트롤러 | 장점 | 단점 | 대표 용도 |
---|---|---|---|
Standalone Pod | 빠르고 간단한 실행 | 운영에 부적합, 자동화 미지원 | 테스트, 디버깅 |
ReplicaSet | Pod 개수 유지, 자동 복구 | 롤링 업데이트 등 직접 구현 필요 | 동일한 Pod 복제 유지 |
Deployment | 스케일링, 롤링 업데이트, 롤백 지원 | 상태 앱에는 부적합 | 웹 앱, API 서버 등 일반 서비스 |
StatefulSet | 고유 ID, 스토리지 유지 | 복잡한 설정, 느린 확장 | DB, 캐시 등 상태 유지 앱 |
DaemonSet | 모든 노드 배포, 자동 노드 대응 | 리소스 과다 사용 가능 | 로그 수집, 모니터링 |
Job | 일회성 작업 처리 | 지속 서비스에는 부적합 | 데이터 마이그레이션, 배치 |
CronJob | 반복 작업 자동화 | 리소스 낭비 가능, 충돌 제어 필요 | 예약 백업, 정기 정리 작업 |