728x90
1. StatefulSet 개요
StatefulSet은 상태를 가진 애플리케이션을 관리하기 위한 워크로드 API 객체입니다. 다음과 같은 특징을 제공합니다:
- 안정적이고 고유한 네트워크 식별자
- 안정적이고 영구적인 스토리지
- 순차적인 배포와 스케일링
- 자동 롤링 업데이트
2. 기본 StatefulSet 구성
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
3. StatefulSet의 주요 기능
3.1 안정적인 네트워크 식별자
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
spec:
clusterIP: None
selector:
app: nginx
ports:
- port: 80
3.2 영구 스토리지
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
728x90
4. 실제 사용 사례
4.1 데이터베이스 클러스터
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
serviceName: mongodb-service
replicas: 3
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:4.4
ports:
- containerPort: 27017
volumeMounts:
- name: data
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
4.2 메시지 큐
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kafka
spec:
serviceName: kafka-service
replicas: 3
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: confluentinc/cp-kafka:latest
ports:
- containerPort: 9092
volumeMounts:
- name: data
mountPath: /var/lib/kafka/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 20Gi
5. 스케일링과 업데이트
5.1 순차적 스케일링
spec:
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
5.2 병렬 스케일링
spec:
podManagementPolicy: Parallel
6. 백업과 복구
6.1 볼륨 스냅샷
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: data-snapshot
spec:
source:
persistentVolumeClaimName: data-mongodb-0
7. 모니터링과 관리
7.1 상태 확인
spec:
template:
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
8. 베스트 프랙티스
- 적절한 스토리지 클래스 선택
- 백업 전략 수립
- 모니터링 설정
- 적절한 리소스 제한 설정
- 네트워크 정책 구성
9. 문제 해결
9.1 일반적인 문제
- PVC 생성 실패
- Pod 스케줄링 문제
- 네트워크 연결 문제
9.2 디버깅 명령어
# Pod 상태 확인
kubectl get pods -l app=mongodb
# PVC 상태 확인
kubectl get pvc
# 이벤트 확인
kubectl get events
# Pod 로그 확인
kubectl logs mongodb-0
728x90
'IT 개발 > 클라우드' 카테고리의 다른 글
[쿠버네티스] 네트워크 정책 완벽 가이드 (73) | 2025.02.11 |
---|---|
[쿠버네티스] Ingress 완벽 가이드 (66) | 2025.02.10 |
[쿠버네티스] 멀티 컨테이너 Pod 구성 가이드 (50) | 2025.02.08 |
[쿠버네티스] 매니페스트 완벽 가이드 (74) | 2025.02.07 |
[쿠버네티스] 쿠버네티스 클러스터 관리와 보안: 운영자 가이드 (70) | 2025.02.06 |