Gom3rye

K8S 프로젝트 중) Deployment vs. Statefulset 본문

카테고리 없음

K8S 프로젝트 중) Deployment vs. Statefulset

Gom3rye 2025. 9. 18. 16:48
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
반응형