Kubernetes 환경에서는 Web Server처럼 상태가 없는 Application뿐만 아니라 Database, Message Queue, Storage 시스템처럼 데이터 상태를 유지해야 하는 Application도 운영해야 합니다.
일반적인 Deployment는 Pod가 삭제되고 다시 생성될 때 새로운 이름과 상태로 실행되기 때문에 데이터 관리가 필요한 Application에는 적합하지 않을 수 있습니다.
Kubernetes에서는 이러한 Stateful Application을 안정적으로 운영하기 위해 StatefulSet 기능을 제공합니다.
StatefulSet은 Pod의 고유한 Identity, 안정적인 Network 이름, Persistent Storage 연결을 보장하는 Kubernetes Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| StatefulSet | 상태 저장 Application 관리 |
| Pod | 고유 Identity 유지 |
| Headless Service | 고정 Network 주소 제공 |
| Persistent Volume | 데이터 저장 |
StatefulSet 구조를 이해하면 Kubernetes에서 Database와 같은 상태 저장 서비스를 어떻게 안정적으로 운영하는지 이해할 수 있습니다.
Kubernetes StatefulSet이란 무엇인가?
StatefulSet은 상태(State)를 유지해야 하는 Application을 관리하기 위한 Kubernetes Controller입니다.
Deployment와 다르게 각 Pod가 고유한 이름과 순서를 가지며 안정적인 Storage 연결을 제공합니다.
예:
Deployment Pod:
web-7d8f9c-x1a2b
재생성 후:
web-7d8f9c-y3c4d
StatefulSet Pod:
database-0
database-1
database-2
Pod Identity가 유지됩니다.
Kubernetes StatefulSet이 필요한 이유
Database와 같은 Application은 단순히 Container만 실행한다고 운영할 수 없습니다.
각 Instance마다 고유한 데이터와 Network Identity가 필요합니다.
문제:
| 상황 | 문제 |
|---|---|
| Pod 재생성 | 이름 변경 |
| Storage 변경 | 데이터 손실 위험 |
| 순서 없는 실행 | Cluster 구성 어려움 |
| Network 변경 | 서비스 연결 문제 |
StatefulSet은 이러한 문제를 해결하기 위해 설계되었습니다.
Kubernetes StatefulSet과 Deployment 차이
StatefulSet과 Deployment는 목적이 다릅니다.
| 구분 | StatefulSet | Deployment |
|---|---|---|
| 목적 | 상태 저장 Application | Stateless Application |
| Pod 이름 | 고정 | 변경 가능 |
| Storage | 개별 연결 | 공유 또는 일반 연결 |
| 생성 순서 | 순서 보장 | 동시 생성 |
| 사용 사례 | Database | Web Server |
Application 특성에 따라 적절한 Controller를 선택해야 합니다.
Kubernetes StatefulSet 동작 구조
StatefulSet은 Controller가 Pod 상태를 관리합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| StatefulSet Controller | Pod 관리 |
| Pod | Application 실행 |
| Headless Service | Network Identity 제공 |
| PVC | Storage 연결 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | StatefulSet 생성 |
| 2단계 | Pod 생성 |
| 3단계 | 고유 이름 부여 |
| 4단계 | Persistent Volume 연결 |
| 5단계 | 상태 유지 |
각 Pod는 독립적인 Identity를 가지게 됩니다.
Kubernetes StatefulSet Pod Identity란?
StatefulSet의 가장 큰 특징은 Pod 이름이 일정하게 유지된다는 점입니다.
예:
생성:
mysql-0
mysql-1
mysql-2
mysql-1 장애 발생
복구:
mysql-1 재생성
이전과 같은 이름을 유지합니다.
이를 통해 Database Cluster 같은 환경에서 안정적인 연결이 가능합니다.
Kubernetes StatefulSet Headless Service란?
StatefulSet은 일반 Service가 아닌 Headless Service를 사용하는 경우가 많습니다.
Headless Service는 Cluster IP를 제공하지 않고 Pod 개별 주소를 제공합니다.
구조:
Client
↓
Headless Service
↓
Pod DNS
예:
mysql-0.mysql.default.svc.cluster.local
각 Pod를 직접 접근할 수 있습니다.
Kubernetes StatefulSet과 Persistent Volume 관계
StatefulSet은 각 Pod마다 별도의 Persistent Volume을 연결할 수 있습니다.
구조:
StatefulSet
↓
Pod 0
↓
PVC 0
↓
PV 0
Pod 1
↓
PVC 1
↓
PV 1
각 Instance의 데이터를 독립적으로 유지합니다.
Kubernetes VolumeClaimTemplate이란?
StatefulSet에서는 VolumeClaimTemplate을 사용하여 Pod 생성 시 자동으로 PVC를 생성합니다.
동작:
StatefulSet 생성
↓
Pod 생성
↓
PVC 자동 생성
↓
PV 연결
Storage 관리 자동화에 중요한 기능입니다.
Kubernetes StatefulSet 생성 순서 관리
StatefulSet은 Pod 생성과 삭제 순서를 보장합니다.
생성:
database-0
↓
database-1
↓
database-2
삭제:
database-2
↓
database-1
↓
database-0
Database Cluster처럼 순서가 중요한 환경에서 유용합니다.
Kubernetes StatefulSet Update 방식
StatefulSet은 업데이트 방식도 안정적으로 관리합니다.
대표 방식:
| 방식 | 설명 |
|---|---|
| RollingUpdate | 순차 업데이트 |
| OnDelete | 수동 삭제 후 업데이트 |
RollingUpdate는 하나씩 변경하여 서비스 영향을 줄입니다.
Kubernetes StatefulSet 활용 사례
StatefulSet은 상태가 필요한 Application에서 사용됩니다.
| Application | 용도 |
|---|---|
| MySQL | Database 운영 |
| PostgreSQL | 데이터 저장 |
| MongoDB | Database Cluster |
| Kafka | Message Queue |
| Elasticsearch | 검색 Cluster |
특히 분산 시스템 운영에서 많이 활용됩니다.
Kubernetes StatefulSet 운영 시 고려사항
Stateful Application은 일반 Application보다 관리가 복잡합니다.
| 항목 | 설명 |
|---|---|
| Backup | 데이터 보호 필요 |
| Storage 성능 | Disk 성능 중요 |
| Replication | Cluster 구성 고려 |
| Upgrade | 순차 변경 필요 |
자동화 기능이 있어도 데이터 운영 정책이 중요합니다.
Kubernetes StatefulSet 장애 처리
StatefulSet은 Pod 장애 상황에서도 Identity와 Storage를 유지합니다.
예:
Pod 장애 발생
↓
Controller 감지
↓
동일 이름 Pod 생성
↓
기존 PVC 연결
↓
서비스 복구
데이터를 유지하면서 Application을 복구할 수 있습니다.
Kubernetes StatefulSet 장점
| 장점 | 설명 |
|---|---|
| Identity 유지 | 고유 Pod 이름 제공 |
| Storage 유지 | 데이터 보호 |
| 순서 관리 | 안정적인 Cluster 구성 |
| 자동 복구 | 장애 대응 가능 |
StatefulSet은 Kubernetes에서 상태 저장 서비스를 운영하기 위한 핵심 기능입니다.
자주 묻는 질문
StatefulSet과 Deployment 중 어떤 것을 사용해야 하나요?
데이터 저장이나 고유 Identity가 필요한 Application은 StatefulSet, 일반 Web Application은 Deployment가 적합합니다.
StatefulSet Pod가 삭제되면 데이터도 삭제되나요?
일반적으로 PVC와 PV 정책에 따라 다르며 Storage 설정을 통해 데이터를 유지할 수 있습니다.
StatefulSet은 Database 운영에 필수인가요?
Database 특성에 따라 다르지만 Kubernetes 환경에서 안정적인 Database 운영을 위해 많이 활용됩니다.
마무리
Kubernetes StatefulSet은 Database와 같은 상태 저장 Application을 안정적으로 운영하기 위한 핵심 Controller입니다.
| 구성 요소 | 역할 |
|---|---|
| StatefulSet | 상태 저장 Pod 관리 |
| Headless Service | 고정 Network 제공 |
| PVC | Persistent Storage 연결 |
| VolumeClaimTemplate | Storage 자동 생성 |
StatefulSet 구조를 이해하면 Kubernetes에서 데이터가 필요한 Application을 어떻게 안정적으로 배포하고 관리하는지 이해할 수 있습니다.
다음 글에서는 Kubernetes DaemonSet을 활용한 Node별 Agent 운영 방식인 Kubernetes DaemonSet 완벽 가이드! 모든 Node에 Pod 배포와 운영 구조 이해하기를 알아보겠습니다.