K8s 必备:kubectl patch 命令详解

news/2025/9/18 18:15:36/文章来源:https://www.cnblogs.com/ydswin/p/19099353

K8s 必备:kubectl patch 命令详解

精准高效的Kubernetes资源更新技巧

一、为什么需要kubectl patch?

在日常Kubernetes运维工作中,我们经常需要对集群中的资源进行修改。虽然kubectl applykubectl edit都很常用,但它们都存在一些局限性:

  • kubectl apply:需要提供完整的配置文件
  • kubectl edit:需要交互式编辑整个资源定义

kubectl patch命令允许我们只提供需要更改的部分内容,实现对Kubernetes资源的精准局部更新,大大提高了运维效率。

二、三种patch策略详解

1. Strategic Merge Patch(策略合并补丁,默认)

这是Kubernetes特有的一种智能补丁方式,根据字段的patchStrategypatchMergeKey标签来决定如何合并字段。

实战示例:向Deployment添加新容器

# 创建示例Deployment
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: patch-demo
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginx-containerimage: nginx
EOF# 添加redis容器
kubectl patch deployment patch-demo --patch '{"spec": {"template": {"spec": {"containers": [{"name": "redis-container","image": "redis"}]}}}
}'

智能数组合并机制:对于Pod的containers字段,Kubernetes使用name作为键来智能合并:

  • 如果patch中指定了已存在的容器名,则更新该容器
  • 如果是新的容器名,则添加到容器列表中

2. JSON Merge Patch(JSON合并补丁)

遵循RFC 7386标准,规则简单:

  • 存在的字段则替换(字段值为null则表示删除)
  • 不存在的字段则保持原样

实战示例:调整Deployment副本数

# 将副本数调整为5
kubectl patch deployment --type merge patch-demo --patch '{"spec": {"replicas": 5}
}'

注意事项:JSON Merge Patch会替换整个数组,不适合精细操作数组字段。

3. JSON Patch(JSON补丁)

遵循RFC 6902标准,通过明确的指令进行操作,支持6种操作:

  • add:添加字段
  • remove:删除字段
  • replace:替换字段
  • move:移动字段值
  • copy:复制字段值
  • test:测试字段值

实战示例:精确更新特定字段

# 使用JSON Patch精确操作
kubectl patch deployment --type json patch-demo --patch '[{"op": "replace","path": "/spec/replicas","value": 3}
]'

三、三种策略对比与选择

特性 Strategic Merge Patch JSON Merge Patch JSON Patch
数组处理 智能合并(按name等key) 整体替换 精确操作(按索引)
适用资源 Kubernetes原生资源 任何JSON资源 任何JSON资源
控制精度
语法复杂度
推荐场景 日常K8s资源操作 简单字段更新 需要精确控制

四、实战技巧与最佳实践

1. 使用patch文件

对于复杂的patch操作,建议使用patch文件:

# update-replicas.yaml
spec:replicas: 5
kubectl patch deployment patch-demo --patch-file update-replicas.yaml

2. dry-run预览效果

执行前使用--dry-run预览更改效果:

kubectl patch deployment patch-demo --patch '...' --dry-run=client -o yaml

3. 处理特殊字段

某些字段需要使用$retainKeys策略:

# 正确更新Deployment策略
kubectl patch deployment patch-demo --patch '{"spec": {"strategy": {"$retainKeys": ["type"],"type": "Recreate"}}
}'

4. 查看字段patch策略

可以通过Kubernetes API文档查看字段的patch策略,决定使用哪种patch方式:

# 查看Deployment的API定义
kubectl explain deployment.spec.strategy

五、常见应用场景

1. 快速更新容器镜像

kubectl patch deployment my-app --type json --patch '[{"op": "replace","path": "/spec/template/spec/containers/0/image","value": "my-app:v2.0.0"
}]'

2. 调整资源配额

kubectl patch deployment my-app --patch '{"spec": {"template": {"spec": {"containers": [{"name": "app","resources": {"limits": {"cpu": "1000m","memory": "1Gi"}}}]}}}
}'

3. 添加或更新标签/注解

# 添加注解
kubectl patch deployment my-app --type json --patch '[{"op": "add","path": "/metadata/annotations/deployed-by","value": "kubernetes-admin"
}]'

六、总结

kubectl patch是Kubernetes运维中一个强大而灵活的工具,特别适用于:

  • 精准更新:只需要修改部分字段,无需处理完整资源配置
  • 自动化脚本:在CI/CD流水线中自动更新特定配置
  • 高效操作:减少传输的数据量,提高更新效率

根据实际需求选择合适的patch策略:

  • 日常操作:推荐使用默认的Strategic Merge Patch
  • 简单字段更新:可使用JSON Merge Patch
  • 需要精确控制:使用JSON Patch

掌握kubectl patch命令,让你的Kubernetes资源管理更加精准和高效!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/907333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:如何管理好上网行为,8个上网行为管控措施分享,让上网井然有序

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:AI Ping:精准可靠的大模型服务性能评测平台

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

金融租赁公司厂商租赁业务调研报告

厂商租赁金融租赁公司厂商租赁业务调研报告 报告摘要 本报告旨在全面、深入地分析中国金融租赁公司(下称“金租公司”)厂商租赁业务的现状、模式、市场环境、监管动态、数字化转型路径及绩效评估体系。截至2025年,厂…

普科科技PKC7030H交直流电流探头应用指南​​

普科PKC7030H探头支持DC-120MHz带宽、1%精度,30A连续电流测量,适用于高频大电流交直流混合信号测试。在现代电力电子、新能源及高速数字系统的设计与调试中,对复杂电流波形的精准测量是分析效率、优化性能与保障可靠…

从“分散”到“统一”,中控技术利用SeaTunnel构建高效数据采集框架,核心数据同步任务0故障运行!

本文将深入探讨中控技术基于 Apache SeaTunnel 构建企业级数据采集框架的实践,重点分享集群高可用配置、性能调优、容错机制及数据质量监控等方面的具体思考与方案。作者 | 崔俊乐引言:对企业而言,数据采集的核心挑…

再见 Cursor,Qoder 真香!这波要改写 AI 编程格局

如果把未来 AI 编程工具的核心竞争力用一句话总结,那就是:能不能让开发者在透明化的协作中,信任它、依赖它,并且和它一起把项目养大。作者:loonggg 真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Q…

PolarFire SoC mpfs-mmuart-interrupt 多核通信

PolarFire SoC mpfs-mmuart-interrupt 多核通信e51 :/* Clear pending software interrupt in case there was any. */clear_soft_interrupt(); set_csr(mie, MIP_MSIP);/* Raise software interrupt to wake hart…

T/B cell subtype marker - un

B cell ref: https://www.abcam.cn/primary-antibodies/b-cells-basic-immunophenotypingT cell ref: https://www.abcam.cn/primary-antibodies/t-cells-basic-immunophenotyping作者:un-define出处:https://www.cn…

SAP FICO 完全凭证替代

GGB1 这个参数是获取所有行项目的关键USING bool_data TYPE gb002_015*&---------------------------------------------------------------------* *& Form u902 *&------------------------------…

K8s Application模式下的flink任务执行精要

本文分享自天翼云开发者社区《K8s Application模式下的flink任务执行精要》,作者:l****n 构键k8s集群在这里,我们需要搭建一个K8S环境用于提供flink任务的运行时环境。在这里推荐使用kubeadm或者一些脚本工具搭建,…

从0打造一个TTS语音合成引擎:原理与实现

语音合成技术(Text-to-Speech, TTS)近年来发展迅猛,从早期机械感十足的合成音到如今几乎可以以假乱真的人声,背后是深度学习技术的巨大进步。本文将带你了解现代语音合成的基本原理,并尝试用Python实现一个简易版…

实用指南:基于边缘计算的智能管控终端充电站有序充电系统设计与实现 —— 面向实时功率调度需求

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

vim窗口垂直分屏和水平分屏对终端控制序列的微妙影响

vim窗口垂直分屏和水平分屏对终端控制序列的微妙影响intro vim本质上是在使用终端的控制序列来实现编辑功能:基本的光标移动和字符输出都是需要vim来生成终端的精确控制序列。我们甚至可以把终端本身看成一个和GUI一样…

Java基本语句-分支语句

Java基本语句-分支语句Day05 如何在API字典中寻找自己想要的Scanner类型 1.点击搜索 输入Scanner 2.字典中回显示各种类型的获取方式: nextByte()、nextShort()、nextInt()、nextLong()、nextdouble()、nextFloat()、n…

丘成桐谈AI

很多重要的科学发现,是在平凡的事情里面突然有个突破。 观念上的突破,在我看人工智能有困难做不到,现在全民学人工智能, 听起来很好听,但是师资不够, 跟数学的整个合作是刚开始, AI看见万千数据 记者:您第一次…

异常检测在网络安全中的应用 - 实践

异常检测在网络安全中的应用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

人小鼠免疫细胞maker基因 - un

人小鼠ref:https://www.abcam.cn/primary-antibodies/immune-cell-markers-poster作者:un-define出处:https://www.cnblogs.com/mmtinfo/p/19099316本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此…

HyperWorks许可配置

在工程设计和仿真领域,正确的软件许可配置是确保工作流程顺畅、提高生产效率和实现最佳投资回报的关键。HyperWorks作为业界领先的工程仿真软件,其灵活的许可配置功能为用户提供了广泛的定制选项,确保软件能够完全满…

AI --- LLM 之 模型大比拼

AI --- LLM 之 模型大比拼如何成为高级的安卓逆向分析工程师,请告诉我详细的学习路径qwen3-next-80b-a3b-thinking 成为高级安卓逆向分析工程师需要系统性学习、大量实战和持续精进。这是一条技术深度+实战经验+思维模…