k8s patch type简介
2022-02-15 本文已影响0人
wwq2020
json patch
https://datatracker.ietf.org/doc/html/rfc6902
例如
[
{
"op" : "add" ,
"path" : "/a/b" ,
"value" : "c"
}
]
op是操作,支持add,remove,replace,move,copy,test
path是资源路径
value是预期修改后的值
json patch有原子性,某个op不成功,整个patch不成功
merge patch
https://datatracker.ietf.org/doc/html/rfc7386
提交简单的Json对象到服务端,由服务端进行合并
{ "a": { "b":"c" } }
value不能为null(代表删除),无法单独更新列表中的单独元素
适用于json的简单场景
strategic merge patch
https://kubernetes.io/zh/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/
k8s自己定义的一套
根据struct中字段的patchStrategy这个tag的取值,有merge和retainKeys
type PodSpec struct {
...
Containers []Container `json:"containers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=containers"`
...
}
merge的话会根据patchMergeKey对列表进行合并,使用上比merge patch方便
retainKeys
用于保留字段,如果需要修改则在patch操作中添加$retainKeys信息