
volumeClaimTemplates는 StatefulSet에서 “파드마다 따로 PVC를 자동으로 만들어주는 템플릿” 이다.
일반 Deployment:
StatefulSet + volumeClaimTemplates:
파드가 3개면 PVC도 3개 생긴다.
ex) data-myapp-0, data-myapp-1, data-myapp-2 이런 식으로 파드 번호에 맞춰 PVC가 자동 생성된다.
파드가 재스케줄되어도 “0번 파드는 0번 볼륨” 식으로 안정적으로 매핑된다.
한 줄로 말하면:
StatefulSet용 “PVC 자동 생성 양식”이 volumeClaimTemplates이다.
예시: StatefulSet 하나 만들면서, 각 파드에 1Gi 스토리지를 붙이고 싶다고 한다면,
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.21.0
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # ↑ 위에서 volumeMounts.name 과 동일해야 함
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: standard # 사용하는 StorageClass 이름
resources:
requests:
storage: 1Gi
replicas: 3 이라서 파드는 web-0, web-1, web-2 이렇게 3개가 생긴다.
volumeClaimTemplates 한 개 정의했으니까 PVC도 3개 생긴다.
각각의 파드에 자기 전용 PVC가 /usr/share/nginx/html로 마운트된다.
파드가 재시작되거나 다른 노드로 옮겨가도, web-1은 계속 www-web-1 PVC를 사용한다.
→ “Stateful” 특성을 보장해주는 핵심 기능 중 하나이다.
참고자료:
[쿠버네티스 공식 홈페이지 - StatefulSets]
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/?utm_source=chatgpt.com