Notice
Recent Posts
Recent Comments
Link
Gom3rye
K8S 프로젝트 중) Deployment vs. Statefulset 본문
728x90
반응형
1. Deployment vs StatefulSet: 기본 차이
구분 Deployment StatefulSet
| Pod 식별자 | 익명적, 임의 이름 (예: myapp-5f9f7d7b7b) | 고유한 안정적 이름과 순서 보장 (예: myapp-0, myapp-1) |
| 스케일링 | Pod를 자유롭게 늘리거나 줄임 | Pod 순서대로 생성/삭제, 순서가 중요할 때 사용 |
| 스토리지 연결 | PV 사용 가능, 하지만 Pod가 재생성될 때 PV 재사용 보장 안 됨 | 각 Pod가 고유한 PV와 연결되어 재생성 후에도 데이터 유지 |
| 네트워크 ID | Pod IP가 동적 변경됨 | Pod마다 고정된 네트워크 ID와 DNS 이름 있음 |
| 주요 사용처 | stateless 애플리케이션 (웹서버, API 서버 등) | 상태가 필요한 애플리케이션 (데이터베이스, 메시지 큐 등) |
2. Deployment도 PV 쓸 수 있지만 StatefulSet과 다른 점
- Deployment가 PV를 쓸 수 있다는 건 맞습니다. PVC를 Pod에 마운트해서 데이터를 저장할 수 있죠.
- 하지만 Deployment는 Pod가 삭제되고 새로 생성될 때 다른 PV를 붙일 수 있습니다.
즉, Pod 인스턴스별로 고유한 스토리지 보장이나 순서 보장이 안 됩니다. - 반면, StatefulSet은 Pod마다 고유한 PVC를 생성하고, 해당 Pod가 재시작되거나 이동해도 같은 PVC를 계속 사용합니다.
3. NFS와 같은 공유 스토리지 사용 시 차이점
- NFS처럼 공유 스토리지를 쓴다면, 여러 Pod가 같은 PV를 마운트할 수 있어 Deployment도 큰 문제 없을 수 있습니다.
- 그러나 다음 상황에서는 StatefulSet이 필요합니다.
- Pod마다 개별 데이터를 저장해야 할 때 (예: DB 노드별 데이터 분리)
- Pod 이름과 네트워크 ID가 고정되어야 할 때 (클러스터링, 리더 선출 등)
- NFS를 쓰더라도 상태 관리, 네트워크 ID, Pod 순서 보장 등은 StatefulSet 고유 기능입니다.
4. 정리
내용 설명
| Deployment와 StatefulSet 차이 | Pod 이름, 네트워크 ID, 스토리지 관리 등에서 차이 |
| PV 사용 가능 여부 | 둘 다 가능하지만 Pod별 PV 고유 관리 여부 다름 |
| NFS 공유 스토리지 사용 시 | Deployment도 공유 가능하지만 상태·네트워크 고유성은 StatefulSet 필요 |
| 언제 StatefulSet 사용? | 상태 유지, 고정 네트워크 ID, 순서 보장이 필요할 때 |
요약
Deployment가 PV를 사용할 수 있어도, Pod별 고유한 스토리지와 네트워크 아이덴티티 보장이 필요한 상태 저장 애플리케이션은 StatefulSet을 씁니다. 공유 스토리지라도 Pod의 순서나 고유성 요구사항이 있으면 StatefulSet이 필요합니다.
728x90
반응형