使用Kustomize删除绑定PV的StatefulSet时卡住的最优解决方法?
方案1:调整静态PV的回收策略(推荐基础配置)
静态供应的PV默认不建议使用Delete回收策略,你可以在pv.yaml中给所有PV添加persistentVolumeReclaimPolicy: Retain配置:
apiVersion: v1 kind: PersistentVolume metadata: name: pg-pv-0 spec: persistentVolumeReclaimPolicy: Retain # 其余PV配置保持不变
这个配置的作用是:
- 即使触发PV删除操作,PV对象只会进入
Released状态,底层存储数据不会被清理 - 删除时PV不会因为被PVC占用进入卡死状态,等上层StatefulSet、PVC完全清理后,你可以根据需求手动复用或删除PV
方案2:拆分Kustomize栈分层管理(最优长期方案)
静态PV和上层应用的生命周期本来就是完全解耦的,建议拆分两个独立的Kustomize栈分别管理:
- 存储栈:单独目录
kustomize/storage,存放pv.yaml和对应kustomization.yaml,负责管理所有静态PV资源 - 应用栈:原Kustomize目录保留,移除
pv.yaml的引用,仅管理StatefulSet、命名空间等上层应用资源
操作顺序严格遵循生命周期规则:
- 部署:先执行
kubectl apply -k kustomize/storage/,等PV全部就绪后再执行kubectl apply -k kustomize/app/ - 销毁:先执行
kubectl delete -k kustomize/app/,等Pod、PVC全部清理完成后再执行kubectl delete -k kustomize/storage/
方案3:自定义Kustomize资源排序规则(不拆分栈的适配方案)
如果不想拆分现有栈,可以通过Kustomize的自定义排序规则调整删除优先级,实现PV最后删除:
- 新建排序规则文件
kustomizeconfig/resource-order.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization sortOptions: rank: # 数值越小优先级越高,apply时优先创建,delete时最后删除 - group: "" version: v1 kind: PersistentVolume rank: 10 - group: apps version: v1 kind: StatefulSet rank: 50
- 修改你的
kustomization.yaml,引入排序配置:
namespace: ibm-cfdb bases: - ../../bases resources: - pv.yaml # 新增排序配置引用 configurations: - kustomizeconfig/resource-order.yaml
临时卡死应急处理
如果当前删除流程已经卡住,可以按以下步骤恢复:
- 执行
kubectl delete statefulset <statefulset名称> -n ibm-cfdb --cascade=foreground手动触发StatefulSet的级联删除 - 待所有Pod完全终止后,执行
kubectl delete pvc -l <PVC匹配标签> -n ibm-cfdb手动删除关联PVC - PV会自动完成删除流程,若仍有残留可以执行
kubectl patch pv <PV名称> -p '{"metadata":{"finalizers":null}}'强制清理
内容的提问来源于stack exchange,提问作者Salvatore D'angelo
相关产品推荐
相关产品推荐

