最近更新时间:2024.01.19 14:39:13
首次发布时间:2023.12.13 19:07:12
jsonpatch
是通用的覆写语法,适用于指定路径整体覆写字段的场景,资源覆盖面广但覆写颗粒度较粗。本文为您介绍jsonpatch
覆写语法的整体语义和典型使用示例。
jsonpatch
覆写语法由 path、operator、value 三部分组成,整体语法介绍如下:
jsonpatch
中的path
表示目标覆写字段的路径。jsonpatch
中的operator
表示支持的操作,包括:add、remove、replace。
jsonpatch
中的value
表示目标覆写字段的值。operator 操作针对有存量字段、无存量字段、空值时的覆写规则如下:
说明
✔️表示允许操作、❌表示报错、- 表示不涉及,其余文字说明表示较复杂的行为。
operator | 有存量字段 | 无存量字段 | 新值允许为空 |
---|---|---|---|
add | 整体替换 | ✔️ | ✔️ |
replace | 整体替换 | ✔️ | ✔️ |
remove | 整体删除 | ❌ | - |
remove
整体删除字段时,若操作对象并无存量内容,将会报错。/
字符不需要转义,但实际修改字段中的 /
需要转义为 ~1
。例如:/metadata/annotations/service.beta.kubernetes.io/volcengine-loadbalancer-name
转义后为 /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-name
此差异化策略示例表示替换镜像地址,适用于容器镜像地址存放位置不同的场景。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: OverridePolicy metadata: name: dp-override namespace: default spec: overrideRules: - targetClusters: #clusters: #- ClusterID-01 clusterSelector: cluster.dcp.volcengine.com/cluster-provider: Vke overriders: jsonpatch: - path: "/spec/template/spec/containers/0/image" operator: replace value: "nginx:latest"
此差异化策略示例表示添加多个注解(annotation),适用于通过注解实现定制化需求的场景。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: OverridePolicy metadata: name: volc-service-override namespace: default spec: overrideRules: - overriders: jsonpatch: - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-name value: test-svc - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-subnet-id value: subnet-rrfc0aqw0yrkv0x58dutf68 - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-address-type value: PUBLIC - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-isp-type value: BGP - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-eip-billing-type value: "2" - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-bandwidth value: "25" - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-ip-version value: ipv4 - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-spec value: small_1
此差异化策略示例表示将/data/example
目录下的字段删除,适用于字段存在多余的场景。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: OverridePolicy metadata: name: service-override namespace: default spec: overrideRules: - overriders: jsonpatch: - operator: remove path: /data/example