首页/云/Kubernetes 速查/kubectl patch 局部修改资源
kubectl 基础56 条

kubectl patch 局部修改资源

不重写整个清单,只提交差异字段:默认 strategic merge(对象合并),也可用 --type=json 做精确路径操作。

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

命令定位

kubectl patch 对集群里已存在的资源做最小化字段修改:只提交要变的那部分,不用整份清单覆盖。适用平台是 Kubernetes(kubectl 1.14 以后一直可用),需要对目标资源所在命名空间的 patch 权限。它与 edit 的区别是不开编辑器、可脚本化;与 apply 的区别是不读本地文件,因此不会顺手改动清单里的其他字段,适合临时调参、补标签、加注解这类小改动。

基本信息

适用平台Kubernetes(kubectl 客户端,版本与集群差异不超过一个次版本)
作用对象任意 API 资源:Deployment、Service、Node、CRD 自定义资源
权限要求目标资源上的 patch 权限(RBAC verbs 含 patch)
默认补丁类型strategic(对象合并),另有 merge 与 json

典型使用场景

  • 临时扩容验证容量:把 Deployment 副本数从 2 调到 3 观察稳定性,稳定后再回写清单
  • 灰度开关:给现网工作负载补一个注解或环境变量,快速试探新参数
  • 给节点补调度标签:为专用机器补上 disktype=ssd 之类的键值
  • 批量维护:配合 -l 选择器给一批 Pod 统一加注解、去掉过期标记
  • 修改自定义资源的单个 spec 字段,而不重写整个 CR 对象

常用示例

常用示例
kubectl patch deploy web -p '{"spec":{"replicas":3}}'          # 默认 strategic 合并,只改副本数
kubectl patch svc web --type=json -p='[{"op":"replace","path":"/spec/sessionAffinity","value":"ClientIP"}]'
kubectl patch node node-1 --type=merge -p '{"metadata":{"labels":{"disktype":"ssd"}}}'
kubectl patch deploy web -p '{"spec":{"template":{"metadata":{"annotations":{"reload":"2026-10-13"}}}}}'   # 触发滚动更新
kubectl get deploy web -o yaml | grep -A3 replicas        # 改完先核对结果,再决定是否回写清单

三种补丁类型

类型合并语义数组字段如何处理
strategic(默认)按字段语义递归合并,只影响写到的键按 name 键匹配合并,同名元素合并、不同名追加
json(RFC 6902)显式 op 序列:add/remove/replace/test按下标精确定位,越界直接失败
merge(RFC 7386)简单覆盖式合并,整体替换同名键整个数组被替换,未列出的元素会丢失
JSON patch 里 replace 要求路径已存在,新增字段要用 add;写路径前先 kubectl get -o yaml 看清层级,路径写错是硬报错,不会静默忽略。
patch 只改服务端对象,不写回 Git。若集群由 CD 工具持续 apply,下一次同步可能覆盖掉临时修改,验证完记得把最终配置补进清单。

易错点

  • 列表字段用 merge patch 会整体替换:改容器 env 时若用 --type=merge,未列出的环境变量会被清掉,应改用 strategic 或 JSON patch 精确到下标
  • patch 改的是现网对象,下次 apply 可能被清单覆盖,长期配置要回写到 Git 清单,避免「改了但下次发布又变回去」
  • JSON patch 的 replace 路径不存在会直接报错,别把新增字段写成 replace
  • 对 Node、CRD 这类集群级或扩展资源打补丁前先确认字段名,写错字段在部分资源上会被静默忽略,事后很难发现配置没生效

数据来源与参考

  • Kubernetes 官方文档 · kubectl patch / Update API Objects in Place
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌