You need to enable JavaScript to run this app. 使用Kustomize删除绑定PV的StatefulSet时卡住的最优解决方法?
优惠活动
大模型
产品
解决方案
定价
更多

使用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栈分别管理:

  1. 存储栈:单独目录kustomize/storage,存放pv.yaml和对应kustomization.yaml,负责管理所有静态PV资源
  2. 应用栈:原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最后删除:

  1. 新建排序规则文件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
  1. 修改你的kustomization.yaml,引入排序配置:
namespace: ibm-cfdb
bases:
- ../../bases
resources:
- pv.yaml
# 新增排序配置引用
configurations:
- kustomizeconfig/resource-order.yaml

临时卡死应急处理

如果当前删除流程已经卡住,可以按以下步骤恢复:

  1. 执行kubectl delete statefulset <statefulset名称> -n ibm-cfdb --cascade=foreground手动触发StatefulSet的级联删除
  2. 待所有Pod完全终止后,执行kubectl delete pvc -l <PVC匹配标签> -n ibm-cfdb手动删除关联PVC
  3. PV会自动完成删除流程,若仍有残留可以执行kubectl patch pv <PV名称> -p '{"metadata":{"finalizers":null}}'强制清理

内容的提问来源于stack exchange,提问作者Salvatore D'angelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 01:00:01