首页/云/云与容器速查/kubectl patch 打补丁更新
Kubernetes68 条

kubectl patch 打补丁更新

命令行局部更新资源:strategic merge 适合改字段,json patch 适合精确增删数组元素,merge patch 直接替换对象;比 edit 更适合脚本化。

云与容器速查云更新于 2026-10-13

kubectl patch 是什么

patch 用一条命令做局部更新,不必准备完整 YAML:默认的合并补丁按字段合并,适合改单个值;JSON 补丁按操作路径精确增删改,适合处理数组元素;简单合并补丁则以对象为单位替换,数组会被整体覆盖。它比在线编辑更适合脚本与流水线,在 CI 里临时改镜像标签、应急扩缩容都用得上;代价是改动同样只存在于集群里,需要回写或交给声明式工具收敛。

基本信息

默认类型合并补丁(strategic),按字段与列表键合并
JSON 补丁--type=json,用 op、path、value 精确控制,遵循 JSON Patch 规范
简单合并--type=merge,数组会被整体替换,容易误删元素
从文件读取--patch-file 指定补丁文件,避免命令行转义地狱
适用版本所有受支持的 kubectl 版本,行为差异主要体现在合并语义
注意对不可变字段打补丁会被拒绝,需要改写对象结构或重建

典型使用场景

  • 应急扩缩容:临时把副本数从 2 调到 4 顶住流量
  • 流水线里更新镜像标签,完成一次简单发布
  • 精确修改数组中的某一项,如服务端口的某个字段
  • 临时加注解触发滚动更新,验证变更链路是否可用
  • 脚本里做条件更新:先判断再打补丁,避免整文件重写

使用示例

使用示例
kubectl patch deploy web -p '{"spec":{"replicas":4}}'   # 默认合并补丁改副本数
kubectl patch deploy web -p '{"spec":{"template":{"metadata":{"annotations":{"restartedAt":"2026-10-13"}}}}}'   # 触发滚动更新
kubectl patch svc web --type=json -p '[{"op":"replace","path":"/spec/ports/0/port","value":8080}]'   # 精确改数组元素
kubectl get svc web -o json | head -40   # 先看结构,确认路径下标
kubectl patch deploy web --patch-file patch.yaml   # 补丁较复杂时写到文件里

三种补丁对照

类型语义适合场景风险
合并补丁(默认)按字段与列表键合并常规字段修改列表键写错会作用到错误对象
简单合并数组整体替换简单字段设置数组元素会被清空
JSON 补丁按路径精确操作增删改数组元素路径写错时定位困难
JSON 补丁的数组下标会随位置变化:执行前先看对象结构确认路径,不要凭记忆写下标。
补丁常用于流水线临时改动,这类操作同样会让集群状态与仓库脱节:发布完成后记得回写或由声明式工具接手。

易错点

  • JSON 补丁路径写错:报错信息不指向真正的问题字段,排查耗时
  • 用简单合并补丁改数组:整个列表被替换,端口或环境变量被清空
  • 反复打补丁却不记录:集群状态与仓库不一致,重建时改动全部丢失
  • 对不可变字段打补丁:请求被拒,容易误判为权限问题
  • 命令行里补丁 JSON 转义写错:实际提交了非预期内容,还未必报错

数据来源与参考

  • Kubernetes Docs:kubectl patch
  • RFC 6902(JSON Patch)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌