将单独定义的 PVC 转移到 StatefulSet Volume Claim Templates
pds-pvc.yaml
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pds-dataspec: accessModes: ["ReadWriteOnce"] storageClassName: longhorn resources: requests: storage: 20Gipds-stateful-set.yaml
volumes: - name: pds-data persistentVolumeClaim: claimName: pds-data目标是移除单独定义的 PVC(pds-data),使用 StatefulSet 中的 Volume Claim Templates 定义存储卷声明。
关闭服务并移除 StatefulSet
Section titled “关闭服务并移除 StatefulSet”kubectl delete -n atproto-pds statefulset pds-stateful-setPVC 替换
Section titled “PVC 替换”- 将原 PVC 的
persistentVolumeReclaimPolicy修改为Retain,避免删除原 PVC 时 PV 和数据被一并删除。 - 删除旧 PVC
pds-data。- 完成后 PV 状态应从
Bound变为Released。
- 完成后 PV 状态应从
- 移除 PV 的
claimRef字段,将 PV 与已不存在的 PVC 解绑。- 完成后 PV 状态应变为
Available。
- 完成后 PV 状态应变为
- 手动创建新 PVC。
- 通过 StatefulSet Volume Claim Templates 自动创建的 PVC,命名会自动遵循以下规则:
[volumeClaimTemplate 名字]-[StatefulSet 名字]-[Pod 索引号]- 这里创建为:
pds-data-pds-stateful-set-0
- 这里创建为:
volumeName字段指向原 PV。
- 通过 StatefulSet Volume Claim Templates 自动创建的 PVC,命名会自动遵循以下规则:
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pds-data-pds-stateful-set-0 namespace: atproto-pdsspec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: longhorn volumeName: pvc-d5810e3d-60ff-4014-8bcf-0bf8f6213e90 volumeMode: Filesystem修改 StatefulSet 定义并重新部署
Section titled “修改 StatefulSet 定义并重新部署” volumes: - name: pds-data persistentVolumeClaim: claimName: pds-datavolumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pds-data spec: accessModes: ["ReadWriteOnce"] storageClassName: longhorn resources: requests: storage: 20Gi部署后分别确认原 PV 和新 PVC 的 Status 为 Bound,新 StatefulSet 运行正常。