external-snapshotter快照删除策略详解:Delete还是Retain?一文避免存储资源泄漏

发布时间:2026/8/22 16:01:48

external-snapshotter快照删除策略详解:Delete还是Retain?一文避免存储资源泄漏
external-snapshotter快照删除策略详解Delete还是Retain一文避免存储资源泄漏【免费下载链接】external-snapshotterSidecar container that watches Kubernetes Snapshot CRD objects and triggers CreateSnapshot/DeleteSnapshot against a CSI endpoint.项目地址: https://gitcode.com/gh_mirrors/ex/external-snapshotter在 Kubernetes 中使用 CSI 存储快照时external-snapshotter是负责监听 VolumeSnapshot 对象并驱动 CSI 驱动创建/删除快照的核心组件。其中deletionPolicy删除策略是决定快照命运的关键字段选错Delete或Retain轻则数据无法回收重则底层存储被幽灵快照占满。本文将带你彻底搞懂这两种策略的差异、配置位置和源码执行流程帮你一文避开存储资源泄漏的坑。一、先搞清楚external-snapshotter 是怎么删快照的external-snapshotter 由两个组件协同工作见 README.md 和 deploy/kubernetes/ 部署清单snapshot-controller集群级控制器监听VolumeSnapshot对象负责创建/删除VolumeSnapshotContent对象csi-snapshotter sidecar与 CSI 驱动同 Pod 部署监听VolumeSnapshotContent对象真正调用 CSI 的CreateSnapshot/DeleteSnapshot接口操作底层存储。当你执行删除快照操作时真正调用 CSIDeleteSnapshot的时机完全由VolumeSnapshotContent.spec.deletionPolicy这个字段决定。二、Delete vs Retain一张表看懂两种策略策略的定义位于 client/apis/volumesnapshot/v1/types.go 第 445~457 行只有两个合法值策略删除 VolumeSnapshot 后VolumeSnapshotContent 对象底层物理快照Delete✅ 自动级联删除被删除通过 CSIDeleteSnapshot删除Retain⛔ 保留保留变成孤儿保留在存储系统中简单类比Delete删了 Kubernetes 对象存储上的快照跟着一起删资源自动回收省心Retain删了 Kubernetes 对象但快照留在原地需要管理员手动到存储侧清理——适合跨集群迁移、灾备归档等场景。 这正是资源泄漏的高发区用了Retain却忘了手动清理物理快照会一直占用存储容量。三、在哪里设置 deletionPolicy1️⃣ 动态快照写在 VolumeSnapshotClass 里对于通过 PVC 动态创建的快照策略由集群级资源VolumeSnapshotClass.deletionPolicy指定示例见 examples/kubernetes/snapshotclass-v1.yamlapiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-hostpath-snapclass-v1 driver: hostpath.csi.k8s.io deletionPolicy: Delete快照创建时sidecar 会把 Class 中的策略自动抄写到VolumeSnapshotContent.spec.deletionPolicy源码见 pkg/common-controller/snapshot_controller.go 第 757 行。因此动态快照不需要也不应该手动改 Content 的策略。2️⃣ 预置快照必须手动填写如果是把集群外已存在的快照导入Kubernetes即预先创建VolumeSnapshotContentsource.snapshotHandle指向已有快照则必须在创建时手动指定deletionPolicy——因为此时没有 Class 可以继承字段说明见 client/apis/volumesnapshot/v1/types.go 第 312~323 行。⚠️ 常见错误预置快照忘写deletionPolicy: Delete结果用了Retain快照内容对象永远删不掉存储越堆越多。四、源码视角控制器到底怎么执行删除snapshot-controller 侧pkg/common-controller/snapshot_controller.go 第 260~274 行删除VolumeSnapshot时控制器找到绑定的 Content只按一条规则判断是否级联删除 Content 对象deleteContent (content.Spec.DeletionPolicy crdv1.VolumeSnapshotContentDelete)如果是Retain则只摘除 Snapshot 自身的 finalizerContent 对象原样保留。csi-snapshotter sidecar 侧pkg/sidecar-controller/snapshot_controller.go 第 61~86 行Content 对象被标记删除时sidecar 分两条路走Delete 策略且快照尚未删除 → 调用 CSIDeleteSnapshot删除物理快照实现位于 pkg/sidecar-controller/csi_handler.go 第 94 行起成功后清除snapshotHandle再移除 finalizerRetain 策略或物理快照已删→跳过 CSI 调用直接移除 finalizer 让 Content 对象消失物理快照留在存储系统里。卷组快照同理VolumeGroupSnapshotClass与VolumeGroupSnapshotContent也带有deletionPolicy字段定义见 client/apis/volumegroupsnapshot/v1/types.go 第 188~198、278~292 行。注意属于卷组快照的单个VolumeSnapshot不允许单独删除只能整体删除组快照策略执行逻辑见 pkg/common-controller/groupsnapshot_controller_helper.go。五、新手最容易踩的 3 个坑 ️Retain 快照没人管删除 VolumeSnapshot 后Content 和物理快照都还在。建议删除前用kubectl get volumesnapshotcontent巡检或建立定期清理孤儿 Content 的运维流程。Retain 的快照想复活这正是 Retain 的价值可以新建一个VolumeSnapshot通过spec.source.volumeSnapshotContentName重新绑定原有 Content 继续使用见 examples/kubernetes/snapshot-v1.yaml 与 examples/kubernetes/restore.yaml 中的用法。用快照恢复 PVC 时急删快照删除流程中有保护逻辑若快照正在被用于恢复 PVC控制器会发出SnapshotDeletePending事件并重试见 pkg/common-controller/snapshot_controller.go 第 288~292 行此时不要手动强删等恢复完成即可。六、Delete 还是 Retain选择指南 ✅场景推荐策略日常开发/测试快照随用随删Delete备份归档、跨集群迁移、灾备快照Retain快照可能被多个环境复用Retain用完手动清理预置快照导入管理员完全可控按需指定默认建议 Retain 防误删一句话总结生产环境想要省心就让VolumeSnapshotClass里写deletionPolicy: Delete让 external-snapshotter 自动级联清理只有明确需要保留物理快照的场景才用Retain并且一定要配套手动清理机制——这是避免存储资源泄漏的黄金法则。想深入了解 CRD 的完整字段定义可以查阅 client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml控制器单测中也有大量策略分支用例例如 pkg/common-controller/snapshot_delete_test.go 和 pkg/sidecar-controller/snapshot_delete_test.go值得对照阅读。【免费下载链接】external-snapshotterSidecar container that watches Kubernetes Snapshot CRD objects and triggers CreateSnapshot/DeleteSnapshot against a CSI endpoint.项目地址: https://gitcode.com/gh_mirrors/ex/external-snapshotter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

FinalBurn Neo 街机模拟器完整指南:构建配置与核心功能实操

FinalBurn Neo 街机模拟器完整指南:构建配置与核心功能实操

2026/8/22 16:01:48

FinalBurn Neo 街机模拟器完整指南:构建配置与核心功能实操 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo(FBNeo)是一个多系统街机与家用机模拟器&am…

DataClawBench:构建金融数据分析AI Agent的评测基准与实践指南

DataClawBench:构建金融数据分析AI Agent的评测基准与实践指南

2026/8/22 15:51:48

1. 从“黑盒”到“白盒”:为什么我们需要一个金融数据分析的Agent基准? 最近和几个做量化分析的朋友聊天,大家不约而同地提到了一个痛点:现在市面上各种AI Agent框架和模型层出不穷,都说自己能处理金融数据、能做探索性…

Vize WASM 绑定实战:如何在浏览器里运行 Vue 编译器打造 Playground

Vize WASM 绑定实战:如何在浏览器里运行 Vue 编译器打造 Playground

2026/8/22 15:51:48

Vize WASM 绑定实战:如何在浏览器里运行 Vue 编译器打造 Playground 【免费下载链接】vize Blazing fast Vue.js Toolchain. Compiler, Linter, Type Checker, Formatter, LSP, Story System, Editor Extensions. This already passed 10k test suites, includes re…

数学建模实战:从跳台跳水体型校正问题解析工程思维与模型构建

数学建模实战:从跳台跳水体型校正问题解析工程思维与模型构建

2026/8/22 17:01:51

1. 项目概述:从一道赛题到一套方法论那年打开“华为杯”赛题包,看到A题《跳台跳水体型校正系数的建模分析》时,我第一反应是这题出得真“刁钻”。它巧妙地把一个大众熟悉的体育项目,包装成了一个典型的、开放性的工业级数学建模问…

ChinaJoy技术观察:从游戏展到数字内容产业技术生态接口

ChinaJoy技术观察:从游戏展到数字内容产业技术生态接口

2026/8/22 17:01:51

最近在整理行业观察时,一个反复被提及的问题引起了我的思考:当我们在谈论ChinaJoy时,我们究竟在谈论什么?是那个曾经以游戏试玩、ShowGirl和硬件外设为核心的“游戏展”吗?经过对近期行业动态的梳理,特别是…

Python项目结构分析:用Contextor策略优化LLM代码理解与成本控制

Python项目结构分析:用Contextor策略优化LLM代码理解与成本控制

2026/8/22 17:01:51

你是否曾遇到过这样的场景:当你试图让一个大型语言模型(LLM)去理解一个中等规模的 Python 项目时,它要么因为上下文长度限制而“失忆”,要么为了处理整个代码库而消耗掉天价的 tokens,让成本瞬间飙升&#…

MolQuest基准:评估AI化学家在结构解析中的溯因推理能力

MolQuest基准:评估AI化学家在结构解析中的溯因推理能力

2026/8/22 17:01:51

1. 项目概述:当AI化学家遇上“福尔摩斯式”推理最近在化学信息学和AI交叉领域,一个名为MolQuest的基准测试(Benchmark)引起了不小的讨论。简单来说,它试图回答一个核心问题:我们该如何系统、客观地评估一个…

Linux服务器CPU使用率飙升排查:从工具链到火焰图的完整实战指南

Linux服务器CPU使用率飙升排查:从工具链到火焰图的完整实战指南

2026/8/22 17:01:51

1. 从一次深夜告警说起:CPU使用率飙升的现场 凌晨两点,手机突然开始震动,屏幕上弹出一条告警信息:“生产服务器CPU使用率持续超过95%,持续时间超过5分钟”。相信这是很多运维和开发工程师都经历过的“心跳时刻”。在Li…

容度升维方法论(CDEM)操作指南——从理论框架到实践路径

容度升维方法论(CDEM)操作指南——从理论框架到实践路径

2026/8/22 16:51:50

容度升维方法论(CDEM)操作指南——从理论框架到实践路径自指余行论研究中心 | 2026年一、CDEM的操作流程:四步法详解容度升维方法论(CDEM)包含四个标准操作步骤。每一步都有明确的目标、输入、输出和验证标准。第一步&…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/21 21:41:19

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

2026/8/22 0:00:52

1. 从宏观到微观:多尺度智能体控制的核心挑战在智能体(Agent)技术日益普及的今天,我们面临着一个越来越普遍的难题:如何同时管理成千上万个,甚至百万级别的智能体?无论是城市交通中的自动驾驶车…

CUBE标准:统一AI智能体评测的度量衡与架构解析

CUBE标准:统一AI智能体评测的度量衡与架构解析

2026/8/22 0:00:52

1. 项目概述:为什么我们需要一个统一的智能体评测标准?最近在折腾各种AI智能体项目,从简单的自动化脚本到复杂的多模态交互系统,我发现了一个让人头疼的共性问题:评测。每次开发完一个智能体,想看看它到底行…

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

2026/8/22 0:00:52

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…