K8s的patch命令随记:修订间差异
小无编辑摘要 |
小无编辑摘要 |
||
第11行: | 第11行: | ||
merge指的是[https://datatracker.ietf.org/doc/html/rfc7386 JSON Merge Patch, RFC 7386],这种传递的参数也是json类型字符串,但是个人感觉这种合并策略属于是一种约定好的实现规范,直接看参数不能很好地猜出实际产生效果 | merge指的是[https://datatracker.ietf.org/doc/html/rfc7386 JSON Merge Patch, RFC 7386],这种传递的参数也是json类型字符串,但是个人感觉这种合并策略属于是一种约定好的实现规范,直接看参数不能很好地猜出实际产生效果 | ||
strategic是kubectl | strategic是kubectl patch默认的合并策略,行为表现是由kubernetes 定义的,具体合并策略效果可以从kubernetes api reference doc<sub>(<nowiki>https://kubernetes.io/docs/reference/generated/kubernetes-api/${k8s-version}</nowiki>)</sub>中查阅(patch strategy / patch merge key) | ||
参数为 <code>--type='strategic': The type of patch being provided; one of [json merge strategic]</code> | 参数为 <code>--type='strategic': The type of patch being provided; one of [json merge strategic]</code> | ||
第18行: | 第18行: | ||
For a comparison of JSON patch and JSON merge patch, see [rfc:7386 JSON Patch and JSON Merge Patch.] | For a comparison of JSON patch and JSON merge patch, see [rfc:7386 JSON Patch and JSON Merge Patch.] | ||
<u>'''而利用 json patch 可以实现更为强大的增加/修改/删除行为'''</u> | <u>'''而利用 json patch 可以实现更为强大的增加/修改/删除行为'''</u> | ||
<br /> | <br /> | ||
===简要记录=== | |||
=== | ==== 利用 kubectl patch 批量修改Deployment update strategy ==== | ||
==== 利用 kubectl patch | |||
*表现行为: replace | *表现行为: replace | ||
spec: | spec: | ||
strategy: | strategy: | ||
type: Recreate | type: Recreate | ||
rollingUpdate: null | rollingUpdate: null<br /> | ||
====利用 kubectl patch 修改 service labels==== | ====利用 kubectl patch 修改 service labels==== | ||
<nowiki>kubectl patch -n demo svc demo-svc --patch '{"metadata": {"labels":{"app": "demo-app"}}}'</nowiki> | <nowiki>kubectl patch -n demo svc demo-svc --patch '{"metadata": {"labels":{"app": "demo-app"}}}'</nowiki> | ||
* | *表现行为: append | ||
====利用 kubectl patch 和 cat 修改 deployment labels==== | ====利用 kubectl patch 和 cat 修改 deployment labels==== | ||
* | *表现行为: append | ||
[root@master44 yamls]# cat patch-labels.yaml | [root@master44 yamls]# cat patch-labels.yaml |
2023年5月6日 (六) 23:00的版本
初接触k8s patch感觉是用起来较为繁琐的一个命令,遂开启本文随记一下一些常见用途
Prerequisite Notes - 前提说明
kubectl patch 其实是有合并策略,分别是 [json merge strategic]
其中json指的是JSON Patch, RFC 6902,最明显的特征是json类型字符串,并且带有关键字 "op" 和 "path"
merge指的是JSON Merge Patch, RFC 7386,这种传递的参数也是json类型字符串,但是个人感觉这种合并策略属于是一种约定好的实现规范,直接看参数不能很好地猜出实际产生效果
strategic是kubectl patch默认的合并策略,行为表现是由kubernetes 定义的,具体合并策略效果可以从kubernetes api reference doc(https://kubernetes.io/docs/reference/generated/kubernetes-api/${k8s-version})中查阅(patch strategy / patch merge key)
参数为 --type='strategic': The type of patch being provided; one of [json merge strategic]
官方指引文档中有引用一篇文章描述 json patch 和 json merge的区别,虽然看得很让我迷惑
For a comparison of JSON patch and JSON merge patch, see [rfc:7386 JSON Patch and JSON Merge Patch.]
而利用 json patch 可以实现更为强大的增加/修改/删除行为
简要记录
利用 kubectl patch 批量修改Deployment update strategy
- 表现行为: replace
spec: strategy: type: Recreate rollingUpdate: null
利用 kubectl patch 修改 service labels
kubectl patch -n demo svc demo-svc --patch '{"metadata": {"labels":{"app": "demo-app"}}}'
- 表现行为: append
利用 kubectl patch 和 cat 修改 deployment labels
- 表现行为: append
[root@master44 yamls]# cat patch-labels.yaml metadata: labels: app: demo-app
[root@master44 yamls]# kubectl patch -n demo deployments.apps demo-app --patch "$(cat patch-labels.yaml)"
利用 json patch 移除 deployment labels
https://erosb.github.io/post/json-patch-vs-merge-patch/
[ { "op": "remove", "path": "/metadata/labels/test.label.com" }, { "op": "remove", "path": "/spec/template/metadata/labels/test.label.com" } ]
利用 json patch 移除 deployment tolertions
[root@node dir]# cat patch.json [ { "op": "remove", "path": "/spec/template/spec/tolerations" } ]
[root@node dir]# kubectl patch -n demo deployments.apps test-deployment --type=json -p="$(cat patch.json)" --dry-run=server deployment.apps/test-deployment patched