Kubernetes StatefulSet 완벽 가이드! Database와 Stateful Application 관리 구조 이해하기

Kubernetes는 기본적으로 Container를 빠르게 생성하고 삭제하는 환경에 최적화되어 있습니다.

하지만 모든 Application이 동일한 방식으로 운영되는 것은 아닙니다.

웹 서버와 같은 Stateless Application은 새로운 Pod를 생성해도 문제가 없습니다.

예:

Web Server Pod

삭제

새로운 Pod 생성

서비스 유지

하지만 Database, Message Queue, Storage System 같은 Application은 고유한 데이터와 상태를 유지해야 합니다.

예:

MySQL

Redis

MongoDB

Kafka

이러한 Application은 일반적인 Deployment 방식만으로 운영하기 어렵습니다.

Kubernetes에서는 상태를 유지해야 하는 Application을 위해 StatefulSet 기능을 제공합니다.

StatefulSet은 Pod의 고유한 이름, 안정적인 Network Identity, 순차적인 배포와 Storage 연결을 관리하는 Kubernetes Resource입니다.

구성 요소역할
StatefulSet상태 유지 Pod 관리
Headless Service고정 Network Identity 제공
Persistent Volume데이터 유지
Ordered Deployment순차 생성 관리

StatefulSet 구조를 이해하면 Kubernetes 환경에서 Database와 같은 Stateful Application을 안정적으로 운영할 수 있습니다.

Kubernetes StatefulSet이 필요한 이유

일반적인 Deployment는 Pod를 동일한 Replica로 관리합니다.

예:

Deployment

Pod

  • app-7f8d
  • app-9k3m
  • app-2x5p

Pod 이름은 랜덤하게 생성됩니다.

웹 서버에서는 문제가 없습니다.

하지만 Database에서는 문제가 됩니다.

예:

Database Cluster:

mysql-0

mysql-1

mysql-2

각각의 Server Identity가 필요합니다.

Kubernetes StatefulSet은 이러한 고유한 상태를 관리합니다.

StatefulSet과 Deployment 차이

두 Resource는 목적이 다릅니다.

구분DeploymentStatefulSet
목적Stateless ApplicationStateful Application
Pod 이름랜덤고정
Storage공유 가능개별 연결
생성 순서동시 생성순차 생성
삭제 순서무관역순 삭제

Application 특성에 따라 선택해야 합니다.

Kubernetes StatefulSet Pod 이름 구조

StatefulSet은 고정된 Pod 이름을 제공합니다.

예:

StatefulSet 이름:

mysql

생성 Pod:

mysql-0

mysql-1

mysql-2

Pod가 삭제되어도 같은 이름으로 다시 생성됩니다.

예:

mysql-1 삭제

새로운 Pod 생성

mysql-1 복구

안정적인 Identity를 유지합니다.

StatefulSet과 Headless Service 관계

StatefulSet은 일반 Service보다 Headless Service를 주로 사용합니다.

일반 Service:

Client

하나의 ClusterIP

여러 Pod

Load Balancing 목적

Headless Service:

Client

개별 Pod DNS

특정 Pod 접근

Database Cluster 구성에 적합합니다.

Kubernetes StatefulSet Network Identity

StatefulSet Pod는 고유 DNS 이름을 가집니다.

예:

mysql-0.mysql.default.svc.cluster.local

mysql-1.mysql.default.svc.cluster.local

Application은 특정 Pod를 직접 찾을 수 있습니다.

Database Replication 환경에서 중요합니다.

StatefulSet Storage 구조

StatefulSet은 각 Pod마다 개별 Storage를 연결합니다.

구조:

mysql-0

PVC-0

PV-0

mysql-1

PVC-1

PV-1

각 Pod가 독립적인 데이터를 유지합니다.

StatefulSet VolumeClaimTemplates란?

StatefulSet에서는 VolumeClaimTemplates를 사용해 PVC를 자동 생성합니다.

구조:

StatefulSet 생성

PVC Template 확인

Pod별 PVC 생성

Storage 연결

예:

mysql-0

mysql-data-mysql-0

mysql-1

mysql-data-mysql-1

자동으로 Storage를 관리합니다.

StatefulSet 생성 순서

StatefulSet은 순서를 보장합니다.

예:

Replica 3개 생성:

1단계

mysql-0 생성

Ready 확인

2단계

mysql-1 생성

Ready 확인

3단계

mysql-2 생성

순차적인 시작이 필요한 Application에 적합합니다.

StatefulSet 삭제 순서

삭제도 순서가 있습니다.

예:

mysql-2

mysql-1

mysql-0

역순으로 종료합니다.

Database Cluster 안정성을 위해 필요한 구조입니다.

StatefulSet 활용 사례

대표적인 사용 환경:

Application이유
MySQLDatabase Identity 필요
PostgreSQLPersistent Data 필요
MongoDBNode Identity 필요
Redis ClusterReplication 관리
KafkaBroker 관리

상태 관리가 필요한 시스템에서 사용합니다.

StatefulSet 운영 시 주의사항

StatefulSet은 강력하지만 모든 Application에 적합하지 않습니다.

주의:

항목설명
Backup별도 구성 필요
Storage 성능Database 영향
ReplicationApplication 설정 필요
Scaling순서 고려 필요

Database 운영에서는 Kubernetes 기능만으로 모든 문제가 해결되지는 않습니다.

StatefulSet Scaling 방식

Replica 증가:

현재:

mysql-0

mysql-1

Scale Up

mysql-2 생성

순서대로 추가됩니다.

Scale Down:

mysql-2 제거

mysql-1

mysql-0

순서를 유지합니다.

StatefulSet과 Backup 전략

Database 운영에서는 Backup이 중요합니다.

구성:

StatefulSet

Persistent Volume

Backup System

외부 Storage

Volume만 믿는 것은 충분하지 않습니다.

StatefulSet 장애 분석 방법

문제 발생 시 확인:

Pod 확인

kubectl get pods

StatefulSet 확인

kubectl get statefulset

PVC 확인

kubectl get pvc

Event 확인

kubectl describe pod pod-name

Storage와 Network를 함께 확인해야 합니다.

StatefulSet과 Deployment 선택 기준

선택 기준:

Stateless:

  • Web Server
  • API Server
  • Frontend

Deployment

Stateful:

  • Database
  • Message Queue
  • Cluster System

StatefulSet

Application 성격에 따라 결정합니다.

StatefulSet 장점

장점설명
고정 IdentityPod 이름 유지
Stable Storage데이터 유지
순차 관리안정적인 배포
Cluster 구성Database 운영 가능

Stateful Application 운영의 핵심 Resource입니다.

자주 묻는 질문

Database는 무조건 StatefulSet을 사용해야 하나요?

아닙니다.

Managed Database를 사용하는 경우 Kubernetes 외부에서 운영하기도 합니다.

StatefulSet과 Deployment를 같이 사용할 수 있나요?

가능합니다.

예를 들어 API Server는 Deployment, Database는 StatefulSet으로 구성할 수 있습니다.

StatefulSet Pod를 삭제하면 데이터가 사라지나요?

PVC와 PV를 사용하면 Container 삭제와 관계없이 데이터를 유지할 수 있습니다.

마무리

Kubernetes StatefulSet은 데이터와 상태를 유지해야 하는 Application을 위한 Kubernetes Resource입니다.

구성 요소역할
StatefulSet상태 유지 Pod 관리
Headless Service고정 Network 제공
PVC개별 Storage 연결
PV데이터 유지

StatefulSet 구조를 이해하면 Kubernetes 환경에서 Database와 같은 중요한 Application을 안정적으로 운영할 수 있습니다.

다음 글에서는 Kubernetes에서 자동화 작업을 처리하는 Kubernetes Job 완벽 가이드! 일회성 Batch 작업과 Container 실행 관리 구조 이해하기를 알아보겠습니다.

댓글 남기기