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信息

上一篇 下一篇

猜你喜欢

热点阅读