StatefulSet 영구 스토리지 요구 사항 점검

데이터 보존 요구를 확인하고 필요한 볼륨의 용량과 수명주기를 관리하세요.

설명

StatefulSet의 volumeClaimTemplates는 Pod별 PersistentVolumeClaim을 생성합니다. 영구 데이터가 필요한 워크로드에는 적절한 구성이며, storage 요청이 있다는 이유만으로 제거해서는 안 됩니다. 임시 데이터만 필요한 경우에는 불필요한 영구 저장소가 비용과 데이터 보존 범위를 늘릴 수 있습니다.

잠재적 영향

  • 불필요한 볼륨과 데이터가 남아 비용과 관리 부담이 증가할 수 있습니다.
  • 데이터 보존 요구를 확인하지 않고 볼륨을 제거하면 데이터 손실이나 서비스 중단이 발생할 수 있습니다.

해결 방법

  • 워크로드에 영구 저장소가 필요한지 확인하세요. 필요하다면 적절한 용량, StorageClass, 접근 제어와 백업을 구성하고, 바인딩과 복구를 시험하세요.
  • 영구 저장소가 불필요하다면 데이터 이전과 StatefulSet 재생성 여부를 검토한 뒤 구성을 변경하세요. 기존 PVC의 보존 정책과 PV 회수 정책을 확인하고, 더 이상 필요하지 않은 데이터만 정리하세요.

예시

기존 nginx 예시에서 영구 볼륨 사용 여부를 비교합니다. nginx Service와 스토리지 프로비저닝은 별도 준비가 필요합니다. 두 예시는 대안 구성으로, volumeClaimTemplates를 기존 StatefulSet에서 그대로 삭제하는 패치를 뜻하지 않습니다.

변경 전

yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: nginx
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

각 Pod에 1Gi PVC를 요청하고 웹 콘텐츠 경로에 마운트합니다. 영구 데이터가 필요하다면 유지할 수 있는 구성입니다.

변경 후

yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: nginx
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25

영구 볼륨 요청과 마운트를 생략합니다. 기존 PVC나 데이터가 자동으로 삭제된다는 뜻은 아니며, 데이터 보존 요구에 맞는 경우에만 선택해야 합니다.

참조