[MacOS 환경 #16] 볼륨 클레임 템플릿(volumeClaimTemplates)

도람·2025년 11월 18일
post-thumbnail

volumeClaimTemplates이란

volumeClaimTemplates는 StatefulSet에서 “파드마다 따로 PVC를 자동으로 만들어주는 템플릿” 이다.

  • 일반 Deployment:

    • 보통 하나의 PVC를 여러 파드가 같이 쓰거나, 아예 PVC 없이 emptyDir 같은 것을 쓴다.
  • StatefulSet + volumeClaimTemplates:

    • 파드가 3개면 PVC도 3개 생긴다.

    • ex) data-myapp-0, data-myapp-1, data-myapp-2 이런 식으로 파드 번호에 맞춰 PVC가 자동 생성된다.

    • 파드가 재스케줄되어도 “0번 파드는 0번 볼륨” 식으로 안정적으로 매핑된다.

한 줄로 말하면:

StatefulSet용 “PVC 자동 생성 양식”이 volumeClaimTemplates이다.


yaml 예시

예시: 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개 생긴다.

    • www-web-0
    • www-web-1
    • www-web-2
  • 각각의 파드에 자기 전용 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

profile
정도를 걷는 엔지니어

0개의 댓글