4.3. StatefulSets (상태저장 세트)
개요
StatefulSets 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 StatefulSet을 통합적으로 관리하는 페이지입니다. StatefulSet은 상태 저장이 필요한 애플리케이션을 위한 워크로드로, 고정된 네트워크 ID와 영구 스토리지를 제공합니다.
주요 목적:
- 멀티클러스터 StatefulSet 통합 관리
- 상태 저장 애플리케이션 배포 및 스케일링
- 파드 순서 및 고유성 보장
- PropagationPolicy 및 OverridePolicy 확인
StatefulSet 사용 사례:
- 데이터베이스 (예: MySQL, PostgreSQL, MongoDB)
- 메시지 큐 (예: Kafka, RabbitMQ)
- 분산 스토리지 (예: Cassandra, Elasticsearch)
- 상태 저장이 필요한 애플리케이션
화면 구성
StatefulSets 페이지는 테이블 형태로 StatefulSet 목록을 표시합니다.

페이지 상단 요소
| 요소 | 설명 |
|---|---|
| 네임스페이스 필터 | 특정 네임스페이스의 StatefulSet만 표시 |
| 새로고침 버튼 | StatefulSet 목록 갱신 |
| 생성 버튼 | 새 StatefulSet 생성 다이얼로그 열기 |
| 검색창 | StatefulSet 이름으로 검색 |
테이블 컬럼
| 컬럼 | 설명 | 정렬 |
|---|---|---|
| 이름 | StatefulSet 이름 | ✅ |
| 네임스페이스 | StatefulSet이 속한 네임스페이스 | ✅ |
| 상태 | Ready 파드 수 / 원하는 파드 수 | ✅ |
| 이미지 | 컨테이너 이미지 이름 | ✅ |
| 경과시간 | StatefulSet 생성 후 경과 시간 | ✅ |
| 작업 | 편집/삭제 버튼 | - |
상태 표시
상태 컬럼은 Ready 수 / 원하는 수 형식으로 표시됩니다:
- 2/2: 2개 레플리카 모두 Ready 상태
- 1/2: 2개 레플리카 중 1개만 Ready 상태
StatefulSet 상세 정보
StatefulSet 행을 클릭하면 상세 정보 패널이 열립니다.

상세 패널 헤더
| 요소 | 설명 |
|---|---|
| StatefulSet 이름 | 선택한 StatefulSet 이름 |
| 네임스페이스 | StatefulSet이 속한 네임스페이스 |
| 동기화 상태 | N/N 파드 준비 현황 |
액션 버튼
| 버튼 | 기능 |
|---|---|
| 스케일 다운 | 레플리카 수 감소 |
| 스케일 업 | 레플리카 수 증 가 |
| 재시작 | StatefulSet 롤링 재시작 |
| 새로고침 | StatefulSet 정보 갱신 |
| 편집 | YAML 편집 모드 |
| 삭제 | StatefulSet 삭제 |
탭 메뉴
개요 탭
StatefulSet의 기본 정보, 복제 세트 상태, StatefulSet 고유 설정을 표시합니다.
기본 정보:
| 항목 | 설명 |
|---|---|
| 이름 | StatefulSet 이름 |
| 네임스페이스 | StatefulSet이 속한 네임스페이스 |
| 상태 | N/N 준비됨 |
| 경과시간 | 생성 후 경과 시간 |
| 생성일 | StatefulSet 생성 일시 |
복제 세트 상태:
| 항목 | 설명 |
|---|---|
| 파드 준비 상태 | N / N 파드 준비됨 (프로그레스 바 포함) |
| 원하는 복제본 | 설정된 레플리카 수 |
| 준비된 복제본 | Ready 상태의 레플리카 수 |
| 현재 복제본 | 현재 실행 중인 레플리카 수 |
| 업데이트된 복제본 | 최신 버전으로 업데이트된 레플리카 수 |
파드 상태:
파드 상태 섹션에서는 StatefulSet의 파드 현황을 시각적으로 표시합니다:
- 실행 중 (Running): 정상 동작 중인 파드
- 대기 중 (Pending): 스케줄링 대기 중인 파드
- 실패 (Failed): 실패한 파드
상태저장 세트 정보:
StatefulSet 고유의 설정을 표시합니다:
| 항목 | 설명 |
|---|---|
| 서비스 이름 | 헤드리스 서비스 이름 (안정적인 네트워크 ID 제공) |
| 파드 관리 정책 | OrderedReady 또는 Parallel |
| 업데이트 전략 | RollingUpdate 또는 OnDelete |
컨테이너 이미지:
StatefulSet에 정의된 컨테이너 이미지 목록을 표시합니다.
멀티클러스터 정책 탭
StatefulSet에 적용된 멀티 클러스터 정책 정보를 표시합니다.

전파 정책 (PropagationPolicy):
| 컬럼 | 설명 |
|---|---|
| 이름 | PropagationPolicy 이름 |
| 네임스페이스 | 정책이 속한 네임스페이스 |
| 범위 | 네임스페이스 범위 정책 / 클러스터 범위 정책 |
| 대상 클러스터 | 타겟 클러스터 목록 |
오버라이드 정책 (OverridePolicy):
클러스터별 커스텀 설정이 있는 경우 표시됩니다.
레이블 탭
StatefulSet에 적용된 Kubernetes 레이블 목록을 표시합니다.
어노테이션 탭
StatefulSet에 적용된 어노테이션 목록을 표시합니다.
파드 탭
해당 StatefulSet에서 실행 중인 파드 목록을 표시합니다.

| 컬럼 | 설명 |
|---|---|
| 이름 | 파드 이름 (예: my-statefulset-0, my-statefulset-1) |
| 클러스터 | 파드가 실행 중인 클러스터 |
| 상태 | 파드 상태 (실행 중/대기 중/실패 등) |
| 노드 | 파드가 스케줄된 노드 |
| 재시작 횟수 | 파드 재시작 횟수 |
| 경과시간 | 파드 생성 후 경과 시간 |
| 작업 | 보기/삭제 버튼 |
참고: StatefulSet 파드는 순차적인 이름을 가집니다 (예: my-statefulset-0, my-statefulset-1). 각 클러스터에서 동일한 이름의 파드가 생성됩 니다.
이벤트 탭
StatefulSet 관련 Kubernetes 이벤트를 표시합니다.
StatefulSet 생성
새로운 StatefulSet을 MCM 컨트롤 플레인에 생성합니다.
입력 항목
| 항목 | 필수 | 설명 |
|---|---|---|
| 이름 | ✅ | StatefulSet 이름 |
| 네임스페이스 | ✅ | 배포할 네임스페이스 |
| 서비스 이름 | ✅ | 헤드리스 서비스 이름 |
| 레플리카 수 | ✅ | 초기 레플리카 수 (기본값: 1) |
| 컨테이너 이미지 | ✅ | 컨테이너 이미지 URL |
| 볼륨 클레임 템플릿 | - | PersistentVolumeClaim 템플릿 |
| 포트 | - | 컨테이너 포트 설정 |
| 환경 변수 | - | 컨테이너 환경 변수 |
YAML 편집
"YAML 편집" 탭에서 StatefulSet 정의를 직접 작성할 수 있습니다.
StatefulSet 작업
스케일 업/다운
StatefulSet의 레플리카 수를 조정합니다.
- StatefulSet 선택
- 스케일 업(▲) 또는 스케일 다운(▼) 버튼 클릭
- 레플리카 수가 증가/감소
참고: StatefulSet 스케일링은 순서대로 진행됩니다:
- 스케일 업: 0, 1, 2... 순서로 파드 생성
- 스케일 다운: ...2, 1, 0 역순으로 파드 삭제
롤링 재시작
StatefulSet의 모든 파드를 순차적으로 재시작합니다.
- StatefulSet 선택
- 상세 패널에서 "재시작" 버튼 클릭
- 확인 다이얼로그에서 "재시작" 버튼 클릭
재시작은 역순으로 진행됩니다 (마지막 파드부터 첫 번째 파드까지).
StatefulSet 편집
- StatefulSet 선택
- 상세 패널에서 "편집" 버튼 클릭
- YAML 에디터에서 StatefulSet 정의 수정
- "저장" 버튼 클릭
StatefulSet 삭제
⚠️ 주의: StatefulSet을 삭제해도 PersistentVolumeClaim은 자동으로 삭제되지 않습니다. 데이터 보존을 위해 별도로 PVC를 관리해야 합니다.
- 삭제할 StatefulSet 선택
- 상세 패널에서 "삭제" 버튼 클릭
- 확인 다이얼로그에서 StatefulSet 이름 입력
- "삭제" 버튼 클릭
사용 예시
시나리오 1: 멀티클러스터 데이터베이스 배포
- "생성" 버튼 클릭
- StatefulSet 정보 입력:
- 이름:
mysql - 네임스페이스:
database - 서비스 이름:
mysql-headless - 레플리카 수:
3 - 컨테이너 이미지:
mysql:8.0
- 이름:
- 볼륨 클레임 템플릿 설정:
- 스토리지 클래스:
standard - 용량:
10Gi
- 스토리지 클래스:
- "생성" 버튼 클릭
- PropagationPolicy로 타겟 클러스터 지정
시나리오 2: StatefulSet 상태 확인
- StatefulSet 목록에서 확인할 StatefulSet 클릭
- 개요 탭에서 복제 세트 상태 확인
- 상태저장 세트 정보에서 서비스 이름, 관리 정책 확인
- 파드 탭에서 클러스터별 파드 분배 확인
- 파드 이름이 순차적인지 확인 (my-statefulset-0, my-statefulset-1)
시나리오 3: 스케일 아웃
- 스케일 아웃할 StatefulSet 선택
- "스케일 업" 버튼 클릭
- 새 파드가 순서대로 생성되는 것 확인 (예: my-statefulset-2)
- 파드가 Ready 상태가 된 후 다음 파드 생성
시나리오 4: 롤링 업데이트
- StatefulSet 선택 후 "편집" 클릭
- 컨테이너 이미지 버전 변경 (예:
mysql:8.0→mysql:8.1) - "저장" 클릭
- 업데이트가 역순으로 진행되는 것 확인:
- my-statefulset-2 → my-statefulset-1 → my-statefulset-0
- 각 파드가 Ready 상태가 된 후 다음 파드 업데이트
시나리오 5: 클러스터별 파드 확인
- StatefulSet 선택
- "파드" 탭 클릭
- 각 클러스터에 동일한 이름의 파드 확인:
- 클러스터 A: my-statefulset-0
- 클러스터 B: my-statefulset-0
- 각 파드의 노드, 상태, 재시작 횟수 확인
관련 개념
StatefulSet vs Deployment
| 특성 | StatefulSet | Deployment |
|---|---|---|
| 파드 이름 | 순차적 고정 (app-0, app-1) | 랜덤 (app-abc123) |
| 네트워크 ID | 안정적 (헤드리스 서비스) | 동적 |
| 스토리지 | 영구 (PVC 유지) | 임시 |
| 순서 보장 | 생성/삭제 순서 보장 | 순서 없음 |
| 스케일링 | 순차적 | 병렬 |
| 사용 사례 | 데이터베이스, 상태 저장 앱 | 무상태 웹 앱 |
파드 관리 정책
OrderedReady (기본값):
- 파드가 순서대로 생성/삭제
- 이전 파드가 Ready 상태가 되어야 다음 파드 생성
- 데이터베이스 클러스터 구성에 적합
Parallel:
- 모든 파드가 동시에 생성/삭제
- 순서가 중요하지 않은 경우 사용
- 빠른 스케일링이 필요한 경우
업데이트 전략
RollingUpdate (기본값):
- 역순으로 파드를 업데이트 (마지막 → 첫 번째)
partition: 특정 인덱스 이상의 파드만 업데이트
OnDelete:
- 파드를 수동으로 삭제해야 업데이트됨
- 완전한 제어가 필요한 경우 사용
헤드리스 서비스
StatefulSet은 헤드리스 서비스와 함께 사용됩니다:
- ClusterIP가 None인 서비스
- 각 파드에 고유한 DNS 이름 제공
- 예:
mysql-0.mysql-headless.database.svc.cluster.local
PersistentVolumeClaim 관리
StatefulSet의 볼륨 클레임 템플릿:
- 각 파드에 개별 PVC 생성
- StatefulSet 삭제 시 PVC 유지 (데이터 보존)
- 수동으로 PVC 삭제 필요
다음 단계
- Jobs (작업) - 멀티클러스터 Job 관리
- CronJobs (크론 작업) - 멀티클러스터 CronJob 관리
- PersistentVolumeClaims - 스토리지 관리