설명
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나 데이터가 자동으로 삭제된다는 뜻은 아니며, 데이터 보존 요구에 맞는 경우에만 선택해야 합니다.