kubectl delete 是什么
kubectl delete 删除集群里的资源对象,支持按名称、按清单文件、按标签批量三种写法。删除不是一瞬间的事:对象先被标记上删除时间戳进入终止流程,控制器清理完自己加的终结器之后,API Server 才真正移除它。理解这个流程,才能解释「删了但一直显示 Terminating」这类现象。
级联与宽限期
删除一个控制器对象时,级联策略决定它的下级对象怎么办:后台级联先删父对象再异步清子对象,前台级联等子对象删完才结束,孤立模式只删父对象保留子对象。级联删除 Pod 时,kubelet 会先发终止信号并等待宽限期,超时才强杀。这两处默认值决定了删除的实际影响范围与耗时。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,需要对目标资源有 delete 权限 |
|---|---|
| 语法 | kubectl delete <资源> <名称|清单路径> [选项] |
| 批量方式 | 按标签 -l 筛选,或按清单文件 -f 批量删除清单中的对象 |
| 级联策略 | background(默认)、foreground、orphan |
| 宽限期 | 默认沿用容器终止宽限期,可用 --grace-period 覆盖 |
| 风险等级 | 高:误删控制器会连带清空其下所有 Pod |
典型使用场景
- 清理调试 Pod:排查用的临时 Pod 用完即删,避免占用命名空间配额
- 回收测试环境:按标签批量删除整套实验对象
- 重置工作负载:需要彻底重建时删除控制器让副本全部重来
- 回收云资源:删除负载均衡类型的服务触发云侧负载均衡器回收
- 解除卡住的对象:确认终结器来源后处理异常终止状态
- 发布回退的收尾:把不再使用的旧对象从集群移除
常用示例
常用示例
kubectl delete pod web-7d9c8b6f5c-abcde # 删除单个 Pod,会被控制器重建
kubectl delete -f web.yaml # 删除清单里定义的对象
kubectl delete pods -l app=web -n test # 按标签批量删除
kubectl delete deploy web --cascade=orphan # 只删控制器,保留下面 Pod
kubectl delete pod web-x --grace-period=60 # 给足优雅退出时间
kubectl delete pod stuck-x --grace-period=0 --force # 确认后再强删
kubectl delete deploy web --dry-run=client # 先演练,确认选中的对象常用选项
| 选项 | 作用 | 使用建议 |
|---|---|---|
| --cascade=background | 默认值,先删父对象再异步清子对象 | 日常清理用它即可 |
| --cascade=foreground | 等子对象删完父对象才消失 | 需要严格顺序时使用 |
| --cascade=orphan | 只删父对象,保留子对象 | 做接管或迁移时使用 |
| --grace-period=0 --force | 跳过优雅终止立即移除对象 | 仅用于节点失联等确认过的场景 |
| --ignore-not-found | 对象不存在也不报错 | 让清理脚本可重复执行 |
| --wait | 等待删除完成后再返回 | 流水线里需要确认清理干净时使用 |
| --dry-run=client | 只打印将被删除的对象 | 误删前的最后一道保险 |
高危删除前的检查
- 先确认命名空间:删除动作错了命名空间,生产对象会当场消失
- 用 --dry-run 或先 get 列出将被选中的对象,核对标签选择器范围
- 区分「删 Pod」与「删控制器」:前者会被重建,后者才是真正下线整个应用
删除命名空间会级联删除其中所有资源,且不可撤销;执行前务必确认里面没有需要保留的对象。
想减少副本数不要用删除 Pod 的方式:控制器会立刻补回来,正确做法是调整副本数或让自动扩缩组件接管。
对象长时间停在终止状态通常意味着有终结器未被处理,或是节点失联导致 kubelet 无法上报,先弄清原因再考虑强制删除。