首页/云/Kubernetes 速查/kubectl --dry-run 试运行与预检
kubectl 基础56 条

kubectl --dry-run 试运行与预检

不真正落库地执行创建/更新:client 模式本地生成对象,server 模式提交 API 服务走准入校验,是改清单前的安全检查。

Kubernetes 速查云更新于 2026-10-13

命令定位

--dry-run 让请求走完整流程但不写库:client 模式在本地推导对象,不出网;server 模式把请求真实提交给 API 服务,经过准入控制、默认值填充与 RBAC 校验,只是最后不持久化。适用平台为 Kubernetes(kubectl 1.18 起 server 模式正式可用,早期版本另有 --dry-run 布尔写法)。它是改清单前后最省事的预检手段。

基本信息

适用平台Kubernetes,kubectl 1.18+ 推荐使用 --dry-run=client|server
client 模式纯本地推导,速度最快,不校验配额、命名冲突与 webhook
server 模式走真实 API 与准入链,校验 RBAC、配额、默认值,但不落库
组合用法--dry-run=client -o yaml 常用于生成初始清单模板

典型使用场景

  • 上线前预检:把新版本的清单先 server 试跑一遍,看准入与配额是否放行
  • 生成清单模板:用命令式 create 配 dry-run 导出 YAML,再改造成正式清单
  • 回归验证:发布前确认对象定义合法,避免把语法错误带到流水线中途才炸
  • 对比差异:dry-run 输出与现网对象做 diff,评估这次变更到底动了哪些字段
  • 演练删除:确认待删对象与依赖关系,避免误删命名空间里的关键资源

常用示例

常用示例
kubectl apply -f deploy.yaml --dry-run=server       # 走真实准入校验但不落库
kubectl apply -f deploy.yaml --dry-run=client -o yaml > out.yaml   # 本地展开成完整清单
kubectl create deployment web --image=nginx --dry-run=client -o yaml   # 生成模板骨架
kubectl delete pod web-x --dry-run=server            # 删除前演练匹配范围
kubectl diff -f deploy.yaml                          # 与现网对象对比,配合 dry-run 判读

两种模式差异

校验项clientserver
对象内部语法与必填字段校验校验
RBAC 权限不校验校验
ResourceQuota 与 LimitRange不校验由准入插件校验
准入 webhook(如注入 sidecar)不校验会真实调用
默认值填充结果仅少量本地推导与真实提交一致
server 模式不会产生副作用,但 webhook 的实现有差异:个别 mutating webhook 未适配 dry-run 时可能报错,此时可退回 client 模式并手动核对差异。
kubectl diff 与 server 侧 dry-run 组合使用效果最好:既能确认变更能否被接受,也能看到字段级的实际差异。

易错点

  • client dry-run 不校验配额、命名冲突与准入 webhook,重要变更必须用 server 模式复检,否则预检通过但真实 apply 失败
  • server dry-run 会调用准入 webhook,个别 webhook 未适配 dry-run 时可能报错,此时结合 diff 判断而不是直接放弃预检
  • 把 dry-run 当成「已生效」:它只做校验,不写库,通过之后仍需要一次真实的 apply
  • 只改清单不预检就提交流水线,语法或字段错误会在发布中途暴露,回滚成本远高于一次预检

数据来源与参考

  • Kubernetes 官方文档 · kubectl dry-run
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌