설명
StatefulSet의 volume_claim_template은 파드에 필요한 영구 볼륨 클레임을 생성할 수 있습니다. 지속 저장이 필요한 애플리케이션에서는 정상적인 구성이며, 스토리지 요청 자체가 취약점은 아닙니다.
임시 데이터나 재생성 가능한 데이터만 다루는 워크로드라면 영구 저장 필요성을 검토하세요. 불필요한 데이터 보존은 비용과 백업·암호화·폐기 관리 범위를 늘릴 수 있습니다.
잠재적 영향
- 불필요한 영구 데이터가 남아 저장 비용과 관리 부담이 커질 수 있습니다.
- 필요한 클레임을 제거하거나 보존 정책을 잘못 바꾸면 데이터 손실이나 서비스 중단이 발생할 수 있습니다.
해결 방법
- 워크로드의 지속 저장 필요성과 요청 용량을 확인하세요. 필요한 PVC에서 storage 요청만 제거하지 마세요.
- 영구 저장이 필요하다면 백업, 암호화와 보존 정책을 구성하세요. 필요하지 않다면 데이터를 먼저 이관하거나 정리한 뒤 배포 구조 변경을 계획하세요.
- 변경 전 StatefulSet의 변경 가능 필드, PVC 보존 정책과 볼륨 회수 정책을 확인하세요. 클레임 템플릿 변경에는 워크로드 재생성이 필요할 수 있습니다.
예시
Pod 템플릿과 관련 Service를 생략한 부분 예제입니다. 변경 후는 영구 클레임이 필요하지 않은 구성의 비교이며, 기존 데이터를 안전하게 이전하는 절차나 일반적인 보안 개선을 뜻하지 않습니다.
변경 전
hcl
resource "kubernetes_stateful_set" "example" {
metadata {
name = "prometheus"
}
spec {
service_name = "prometheus"
selector {
match_labels = {
app = "prometheus"
}
}
volume_claim_template {
metadata {
name = "data"
}
spec {
access_modes = ["ReadWriteOnce"]
storage_class_name = "standard"
resources {
requests = {
storage = "16Gi"
}
}
}
}
}
}
변경 후
hcl
resource "kubernetes_stateful_set" "example" {
metadata {
name = "prometheus"
}
spec {
service_name = "prometheus"
selector {
match_labels = {
app = "prometheus"
}
}
}
}
설명:
- 변경 전: 16Gi의 영구 스토리지를 요청합니다. 실제 데이터 요구에 맞으면 적절한 설정입니다.
- 변경 후: 클레임 템플릿을 선언하지 않습니다. 이 발췌만으로 기존 PVC나 데이터가 자동으로 삭제되는 것은 아닙니다.