説明
StatefulSet の volumeClaimTemplates は、Pod ごとに PersistentVolumeClaim を作成します。永続データが必要なワークロードには適切な構成であり、storage の要求があるだけで削除すべきではありません。一時データだけを使う場合は、不要な永続ストレージによって費用や保持データの範囲が増えることがあります。
想定される影響
- 不要なボリュームやデータが残り、費用や管理作業が増える場合があります。
- 保持要件を確認せずにボリュームを削除すると、データ損失やサービス停止につながる場合があります。
対処方法
- 永続ストレージが必要か確認してください。必要なら適切な容量、StorageClass、アクセス制御、バックアップを設定し、バインドと復旧を試してください。
- 永続ストレージが不要なら、データ移行と StatefulSet の再作成が必要かを検討してから設定を変更してください。PVC の保持ポリシーと PV の回収ポリシーを確認し、不要になったデータだけを整理してください。
例
既存の nginx の例で永続ボリュームの使用を比較します。nginx Service とストレージのプロビジョニングは別途用意する必要があります。二つは代替構成であり、既存の StatefulSet から volumeClaimTemplates をそのまま削除するパッチではありません。
変更前
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 やデータが自動削除されるわけではなく、データ保持要件に合う場合にだけ選択してください。