K8s的patch命令随记:修订间差异
来自三线的随记
小无编辑摘要 |
小无编辑摘要 |
||
第20行: | 第20行: | ||
===记录=== | ===记录=== | ||
==== 利用 kubectl patch 批量修改deployment strategy === | ==== 利用 kubectl patch 批量修改deployment strategy ==== | ||
*表现行为: replace | *表现行为: replace | ||
spec: | spec: |
2021年3月9日 (二) 11:47的版本
初接触k8s patch感觉是用起来较为繁琐的一个命令,遂开启本文随记一下一些常见用途
Prerequisite Notes - 前提说明
kubectl patch 其实是有三种行为表现的,分别是 [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.]
另外一种叫做「策略性合并patch」的行为表现是由kubernetes 定义的,由 patchStrategy
字段决定(在api文档可以找到此字段) 例如 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#podspec-v1-core
而利用 json patch 可以实现更为强大的增加/修改/删除行为
记录
利用 kubectl patch 批量修改deployment 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" } ]