StatefulSet の永続ストレージ要件の確認

データ永続化の必要性と、容量・保持方針を併せて確認してください。

説明

StatefulSet の volume_claim_template は、Pod 用の永続ボリュームクレームを作成できます。永続化が必要なアプリケーションでは通常の構成であり、ストレージ要求自体が脆弱性ではありません。

一時データや再生成可能なデータだけを扱う場合は、永続化の必要性を確認してください。不要な保持はコストや、バックアップ・暗号化・廃棄の管理範囲を増やす場合があります。

想定される影響

  • 不要な永続データが残り、保存コストと管理負担が増える場合があります。
  • 必要なクレームの削除や保持設定の誤変更は、データ損失やサービス中断につながる場合があります。

対処方法

  • 永続化の必要性と要求容量を確認してください。必要な 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 やデータが自動削除されるわけではありません。

参考資料