kubectl 用--patch动态修改k8s的资源

用diff格式修改

kubectl 命令中使用 --patch 参数是一种对 Kubernetes 资源进行部分更新的便捷方法。当你想要动态地修改资源(例如自定义资源定义 CRD 实例)的某些字段而无需获取和编辑整个资源定义时,这个方法尤其有用。

下面是使用 kubectl patch 命令来更新 CRD 实例的 spec 的一个示例:

假设你有一个名为 “my-crd” 的自定义资源定义,它定义了种类 “MyResource”,且你想要修改或者添加一个名为 “example” 的实例,特定地,更新 spec 下的某个字段,你可以使用以下命令:

kubectl patch myresource example --type=merge --patch='
{"spec": {"newField": "newValue"}
}'

在这个命令中:

  • myresource 是 CRD 的资源类型(不是 CRD 的绝对名称)。在实际场景中,请使用你具体的资源类型。
  • example 是 CRD 实例的名字。
  • --type=merge 指定更新策略,merge 是通常用来更新 map 或者 struct 类型字段的策略。
  • --patch 后面跟着一段 JSON 字符串,说明了要做的变更。这里,我们将 spec 下的 newField 字段的值设为了 “newValue”。如果字段已经存在,它的值将被这个新的值覆盖;如果字段不存在,它将被添加进去。

确保你使用的 patch 中的 JSON 格式与你的 CRD 中的 spec 部分结构是相匹配的。如果字段结构有嵌套,请使用嵌套的 JSON 对象来表达这些变更。

你还可以使用 YAML 格式进行 patch 操作,以下是使用 YAML 的等价命令:

kubectl patch myresource example --type=merge --patch='
spec:newField: newValue
'

请确保这个命令在一个 shell 中作为单行运行,或者正确处理多行输入。不同的 shell 环境可能需要不同的语法来处理换行。

在实践中请把 MyResourceexamplenewFieldnewValue 替换为你实际的 CRD 名称、CRD 实例名称以及你希望添加或修改的字段名称和值。

用JSON格式修改

当在 kubectl patch 命令中使用 --type=json 时,这表示你正在采用 JSON Patch 的方式来更新资源。JSON Patch 是一种类似于 diff 的格式,它描述了如何修改 JSON 文档的一系列操作。JSON Patch 允许你执行的操作不仅仅局限于替换操作(如 merge 类型),它还可以执行添加、删除、移动、复制和测试操作。

以下是如何使用 JSON Patch (--type=json) 来为 Kubernetes 资源的 spec 添加新值的示例:

kubectl patch myresource example --type=json --patch='
[{"op": "add","path": "/spec/newField","value": "newValue"}
]'

在这个例子中:

  • myresource 是你的自定义资源的类型。
  • example 是你想要修改的资源的名字。
  • --type=json 指定我们正在使用 JSON Patch。
  • --patch 后面是一个 JSON 数组,每个元素都是一个操作对象。
  • op 表示操作类型,比如 addremovereplace 等。
  • path 是资源中要操作的 JSON 路径。请注意,所有层级之间必须以 / 分隔,并且路径中不能有空格。如果字段或数组的名称包含斜杠字符 /,则使用 ~1 替换。
  • value 是你想要添加或设置的新值。

关于 op 的其他常用操作类型有:

  • replace:替换现有字段的值。如果使用 replace 操作,路径应该是已存在的字段的完整路径。
  • remove:删除一个字段。路径是要移除的字段的完整路径。
  • add:添加一个新字段。如果字段已经存在,则 op 应为 replace

请注意,JSON Patch 是一个强大但相对复杂的工具,尤其是当处理复杂的资源或需要执行多步操作时。在使用前确保你完全理解每个操作的含义和潜在的影响。提供给 --patch 的 JSON 要被包含在单引号 ‘`’ 内,并确保 JSON 本身的结构和语法是正确的。

给数组增加新的item

如果要使用 kubectl patch 来给 CRD 中的数组添加一个新元素,你需要使用 JSON Patch 格式并指定数组操作。以下是一个如何使用 kubectl 并采用 --type=json 参数向数组添加新项的示例:

kubectl patch myresource example --type=json --patch='
[{"op": "add","path": "/spec/myArray/-","value": "newValue"}
]'

在这个示例中:

  • myresource 是 CRD 的资源类型。
  • example 是 CRD 实例的名称。
  • --type=json 指明我们使用 JSON Patch 做修改。
  • --patch 参数提供 JSON 格式的修改指令。
  • /spec/myArray/- 是 JSON Patch 路径,其中 /spec/myArray 指向数组所在的位置,- 是一个特殊的符号,表示追加元素到数组的末尾。
  • "op": "add" 指定操作类型为添加。
  • "value": "newValue" 是你想要添加到数组中的新元素的值。

需要注意,如果你想要添加到数组的特定位置,可以在 path 中使用一个整数来表示数组的索引,如 /spec/myArray/1 会将新元素添加到数组的第二个位置(索引从0开始)。

如果 myArray 中的元素是复杂对象,你的 "value" 也应该是一个相应的 JSON 对象,如下所示:

kubectl patch myresource example --type=json --patch='
[{"op": "add","path": "/spec/myArray/-","value": { "field1": "value1", "field2": "value2" }}
]'

在这个修改中,我们添加了一个新的对象到 myArray 中,该对象拥有 field1field2 两个字段。

请务必确保 --patch 参数中的 JSON 字符串正确无误,并且正确反映了你的 CRD 结构。特别是在使用 shell 脚本或在命令行中,要注意 JSON 字符串的适当引用,以防止解析问题或意外的 shell 行为。

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

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

相关文章

Elasticsearch 高频面试题

Elasticsearch 初级面试题及解答 1. 什么是 Elasticsearch?它的主要用途是什么? 解答: Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它能够快速存储、搜索和分析大量数据。Elasticsearch 的主要用…

SVN学习(001 svn安装)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第1p-第p19的内容 介绍 为什么使用版本控制工具 版本控制工具的功能 版本控制简介 客户端服务器结构 c/s结构 服务端的结构: 服务程序 、版本库(存放我们上传的文件) 客户端的三个基本操作&#…

基于Java少儿编程管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

chatTTS 最强文字转语音模型本地部署!

今天本地部署了下传说中的语音合成大模型chatTTS,合成效果非常不错,比市面上其他工具合成的感情更丰富,语气更自然一些,一起来听听。 英文: React apps are made out of components. A component is a piece of the UI…

Games101 正交投影矩阵推导

目录 正交投影 投影矩阵推导 正交投影 正交投影不管是远处还是近处,都是直接挤在屏幕上就好,它没有近大远小的效果 首先,把相机放在原点上,往-z方向看,上方向是y; 这样摆放相机的好处是,把…

实际中服务器无法访问排查思路

当所有服务器突然无法被用户访问,终端用户也无法ping通服务器,这种情况非常棘手。 1.初步检查 首先,不要急于重启设备。你需要保持冷静,系统性地排查问题。尝试使用同一网段的PC访问服务器。如果可以访问,说明服务器和…

Prometheus问题合集

基础知识 1.什么是Prometheus?它的核心功能是什么? 指标收集:Prometheus通过拉取方式定期从目标系统(如服务器、容器、数据库等)收集指标数据。这些指标可以是系统的性能指标、应用程序的指标、或者是自定义的业务指…

环境搭建---nginx

nginx离线安装 下载地址:https://nginx.org/download/ 一、安装编译工具及库文件 [rootVM-20-14-centos ~]# yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel二、安装 PCRE [rootVM-20-14-centos ~]# tar -zxvf pcre-8.35.tar.gz [r…

操作数据库的SQL语句

这里有一些测试操作MySQL数据库的SQL语句,可以用来创建表、插入数据、查询数据、更新数据和删除数据: 1. 创建表 创建一个名为test_table的表,包含id、name和age三个字段。 CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR…

GPT-5:人工智能的新篇章,未来已来

目录 GPT-5:人工智能的新篇章,未来已来 引言 1.人工智能的快速发展和对现代社会的影响 2.OpenAI首席技术官米拉穆拉蒂关于GPT-5发布的消息 3.GPT-5对AI领域的潜在影响和期待 4.迎接GPT-5时代的准备 方向一:GPT-5技术突破预测 1.1 GPT-…

java中的循环

for-each循环 import java.util.ArrayList;public class RunoobTest {public static void main(String[] args) {ArrayList<String> sites new ArrayList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao")…

小抄 20240621

1 多说自己的好&#xff0c;多用积极的词汇&#xff0c;可以增强自信。 同时&#xff0c;不要说别人的不好&#xff0c;这会给自己增加一些不必要的仇人。 优秀是自己的事&#xff0c;不用建立在贬低别人的基础上。 2 你如何理解生命&#xff0c;你的生活就会是什么样的状…

YashanDB为新质生产力赋能 灌注合肥区域转型源动力

当前&#xff0c;数据要素已成为我国数字经济的“核心引擎”与“关键生产要素”&#xff0c;为全面激发数据要素的价值&#xff0c;各地区正积极探索数据要素交易平台的可行模式&#xff0c;加快在数据要素领域的布局。近日&#xff0c;深圳计算科学研究院崖山数据库系列产品受…

wireshark常用过滤命令

wireshark常用过滤命令 wireshark抓包介绍单机单点&#xff1a;单机多点&#xff1a;双机并行&#xff1a; wireshark界面认识默认布局调整布局(常用)显示FCS错误 wireshark常见列Time回包数据报对应网络模型 wireshark基本操作结束抓包再次开始抓包 **wireshark常用过滤命令**…

Android 第三方框架:网络:OkHttp:源码分析:拦截器

文章目录 涉及到的设计模式 责任链模式:ArrayList策略模式:Interceptor和XXXInterceptor源码分析API总结涉及到的设计模式 责任链模式:ArrayList ArrayList 用ArrayList作为保存顺序的数据结构 把系统提供的各种Interceptor和自定义的Interceptor放入ArrayList中 RealI…

Maven高级-证书校验

文章目录 SSL忽略配置IDEA里配置SSL忽略补充场景 SSL忽略配置 mvn -X clean install -Dmaven.resolver.transportwagon -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.validity.datestrueIDEA里配置SSL忽略 两个地…

基于豆瓣电影TOP250的可视化设计

本文要完成的目的&#xff0c;实现豆瓣电影TOP250的可视化 思路 讲解思路&#xff0c;采用倒推的方式&#xff0c; 首先确定可视化图表&#xff0c;也就是最终的效果。这样就能确定需要那些基础数据根据需要的数据进行按需爬取存储。 本篇文章完成前两步。可视化图表设计 和 …

docker0 网络更改

目录 1. 停止docker服务 2. 关闭docker默认桥接网络接口 3. 从系统删除docker0接口 4. 创建一个名为bridge0的新接口 5. 添加ip地址和子网掩码 6. 启用bridge0接口 7. &#xff08;如果没起来就执行该句&#xff09; 8. 查看ip 1. 停止docker服务 sudo service docker…

【Linux】进程间通信_2

文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 1. 进程间通信分类 管道 管道的四种情况&#xff1a; ①管道内部没有数据&#xff0c;并且具有写端的进程没有关闭写端&#xff0c;读端就要阻塞等待&#xff0c;知道管道pipe内部有数据。 ②管道内部…

linux的centos系统安装docker

文章目录 一. 安装Docker1. 安装yum-utils包2. 配置Docker yum源3. 安装 Docker CE4. 启动并设置 Docker 开机自启5. 验证Docker安装 二. 配置镜像加速器 一. 安装Docker 1. 安装yum-utils包 sudo yum install -y yum-utils2. 配置Docker yum源 官网源&#xff0c;在没有外网…