You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitOps环境下如何通过Git+Kustomize+Argo CD删除Kubernetes PVC

纯GitOps模式下PVC启停管控实现方案

你现有Deployment的停服逻辑可以直接扩展到PVC资源,全程只需要修改Git仓库内的Kustomize配置,不需要手动执行kubectl命令、不需要额外脚本,完全适配Argo CD的GitOps同步逻辑。


核心实现逻辑

Argo CD默认支持资源修剪能力(syncPolicy.automated.prune: true为GitOps场景常规配置):只要Git仓库中声明的资源清单移除了对应资源,Argo CD同步时会自动删除集群中对应的存量资源。配合Kustomize的patch能力,你可以直接在现有stopApp.yaml中扩展PVC删除逻辑,和当前Deployment缩容的操作逻辑完全对齐——停服时引用stopApp.yaml,恢复时注释掉引用即可。


具体操作步骤

  1. 扩展现有stopApp.yaml,增加PVC删除逻辑
    针对你示例中名为dummy-data的PVC,直接在stopApp.yaml中追加以下内容,使用Kustomize原生支持的strategic merge delete标记声明要删除的资源:
    # 停服时删除指定PVC
    $patch: delete
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: dummy-data
      annotations:
        # 配置同步波浪,晚于Deployment缩容执行删除
        argocd.argoproj.io/sync-wave: "0"
    
    如果你有多个PVC需要批量删除,不需要逐个列名,可以给所有应用管理的PVC打上统一标签(比如app: gitops-managed),再用通用target匹配批量删除:
    apiVersion: kustomize.config.k8s.io/v1
    kind: Patch
    metadata:
      name: batch-delete-pvcs
    patch: |
      $patch: delete
      apiVersion: v1
      kind: PersistentVolumeClaim
    target:
      kind: PersistentVolumeClaim
      labelSelector: "app=gitops-managed"
    
  2. 给原有Deployment缩容patch加同步波浪配置,避免PVC删除卡住
    Kubernetes不允许删除仍被Pod挂载的PVC,因此需要通过Argo CD同步波浪控制执行顺序:先缩Deployment到0,等所有关联Pod完全删除后,再执行PVC删除动作。
    你原来的Deployment缩0patch里,给Deployment的metadata追加注解即可:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: # 匹配你要停服的Deployment
      annotations:
        # 缩容动作优先执行
        argocd.argoproj.io/sync-wave: "-1"
    spec:
      replicas: 0
    
  3. 验证逻辑
    • 停服:在开发环境overlay的kustomization.yaml中引用stopApp.yaml提交Git,Argo CD会自动触发同步:先把所有Deployment副本数置0,等待Pod全部销毁后,自动删除所有指定PVC,完成全资源清空。
    • 恢复:注释掉kustomization.yaml中引用stopApp.yaml的配置行提交Git,Argo CD会自动把Deployment副本数恢复为base中定义的数值,同时重新创建所有PVC,完成服务重启。

注意事项

  • 提前确认集群使用的StorageClass回收策略:如果回收策略为Delete,删除PVC会同时删除底层存储卷数据,操作前务必确认停服场景允许数据清空;如果回收策略为Retain,PVC删除后PV和底层数据会保留,重建PVC时需要提前配置静态绑定规则才能关联原有PV。
  • 不要给需要删除的PVC加argocd.argoproj.io/sync-options: Prune=false注解,否则Argo CD会跳过该资源的修剪动作,PVC不会被自动删除。
  • 如果你当前Argo CD没有开启自动修剪,同步时Argo CD会展示待删除的PVC资源列表,手动确认同步即可完成删除,逻辑完全一致。
  • 如果你使用的Kustomize版本低于4.0,不支持顶层$patch: delete语法,可以把删除标记移到PVC注解里,写法如下:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: dummy-data
      annotations:
        kustomize.config.k8s.io/patch-strategic-merge: delete
        argocd.argoproj.io/sync-wave: "0"
    

内容的提问来源于stack exchange,提问作者ismi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:42:58