最近更新时间:2023.12.13 19:07:12
首次发布时间:2023.12.13 19:07:12
封装的覆写语法是针对指定资源(包括:Image、Command、Args、Labels、Annotations 等)封装的覆写语法,资源覆盖面局限但覆写颗粒度更细。本文为您介绍封装覆写语法的整体语义和典型使用示例。
原有的 JsonPatch 覆写语法只能整体的替换字段,覆写粒度较粗,无法满足精细化覆写场景,例如:JsonPatch 覆写语法替换镜像的仓库地址时只能整体替换,不能精细化替换镜像仓库地址中的 Registry、Repository、Tag、Digest 字段。
因此,为了弥补 JsonPatch 覆写语法的局限性,针对 Image、Command、Args、Labels、Annotations 资源提供封装的覆写语法,满足指定字段统一覆盖的场景。
operator 操作针对有存量字段、无存量字段、空值时的覆写规则如下:
注意
delete
有存量字段时,只删除用户指定的值。overwrite
有存量字段时,只替换存量中已有的 key,若存量中没有 key,即使用户已经指定也会被忽略。operator | ImageOverrider | Command/Args | Labels/Annotations | ||||||
---|---|---|---|---|---|---|---|---|---|
有存量字段 | 无存量字段 | 新值允许为空 | 有存量字段 | 无存量字段 | 新值允许为空 | 有存量字段 | 无存量字段 | 新值允许为空 | |
addIfAbsent | ❌ | ✔️ | ❌ | - | - | - | ❌ | ✔️ | ❌ |
append | - | - | - | 直接追加 | ✔️ | ❌ | - | - | - |
overwrite | 整体替换 | ✔️ | ✔️ | 整体替换 | ✔️ | ✔️ | 部分替换 | ✔️ | ✔️ |
delete | 整体删除 | ✔️ | ✔️ | 部分删除 | ✔️ | ✔️ | 部分删除 | ✔️ | ✔️ |
此差异化策略表示覆写 Kubernetes 原生资源镜像仓库的各个字段。镜像仓库地址组成为:[Registry '/'] Repository [ ":" Tag ][ "@" Digest ]
,针对镜像地址资源,涉及到的覆写语法参数如下:
containerNames:可选项,表示要操作 Pod 中的 Container 名称。不指定时表示适用于所有 Container;指定时表示仅适用于目标 Container。
imageComponent:必填项,表示要操作的镜像仓库地址的哪个组成部分,可选值如下。
operator:必填项,表示要对以上目标的操作方式,详细介绍参见:覆写规则。
value:必填项,表示以上操作中需要追加或替换的值。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: # 规则组一 - targetClusters: clusters: - kubeadmiral-member-1 - kubeadmiral-member-2 clusterSelector: # 规则 overriders: # 规则组二 - targetClusters: clusters: - kubeadmiral-member-1 - kubeadmiral-member-2 # 规则 overriders: image: - containerNames: - "server-1" - "server-2" operations: - imageComponent: Registry operator: addIfAbsent value: cluster.io
此差异化策略表示覆写 CRD 资源镜像仓库的各个字段。针对镜像地址资源,涉及到的覆写语法参数如下:
imagePath:表示要进行覆写操作的资源路径,例如:/spec/template/spec/containers/0/image
。
imageComponent:同 Kubernetes 原生资源中的使用逻辑。
operator:同 Kubernetes 原生资源中的使用逻辑。
value:同 Kubernetes 原生资源中的使用逻辑。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: # 规则组一 - targetClusters: clusters: - kubeadmiral-member-1 - kubeadmiral-member-2 clusterSelector: # 规则 overriders: # 规则组二 - targetClusters: clusters: - kubeadmiral-member-1 - kubeadmiral-member-2 # 规则 overriders: image: - imagePath: "/spec/templates/0/container/image" operations: - imageComponent: Registry operator: addIfAbsent value: cluster.io - imageComponent: Repository operator: overwrite value: "over/echo-server" - imageComponent: Tag operator: delete - imageComponent: Digest operator: addIfAbsent value: "sha256:aaaaf56b44807c64d294e6c8059b479f35350b454492398225034174808d1726"
此差异化策略分别表示追加、替换、删除命令资源。针对命令资源,涉及到的覆写语法参数如下:
containerNames:可选项,表示要操作 Pod 中的 Container 名称。不指定时表示适用于所有 Container;指定时表示仅适用于目标 Container。
operator:必填项,表示要对以上目标的操作方式,详细介绍参见:覆写规则。
value:必填项,表示以上操作中需要追加或替换的值。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: - targetClusters: clusters: - kubeadmiral-member-1 overriders: command: - containerName: "server-1" operator: append value: - "/bin/sh" - "-c" - "sleep 10s" - containerName: "server-2" operator: overwrite value: - "/bin/sh" - "-c" - "sleep 10s" - containerName: "server-3" operator: delete value: - "sleep 10s"
此差异化策略表示追加参数列表资源。针对参数列表资源,涉及到的覆写语法参数如下:
containerNames:可选项,表示要操作 Pod 中的 Container 名称。不指定时表示适用于所有 Container;指定时表示仅适用于目标 Container。
operator:必填项,表示要对以上目标的操作方式,详细介绍参见:覆写规则。
value:必填项,表示以上操作中需要追加或替换的值。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: - targetClusters: clusters: - kubeadmiral-member-1 overriders: args: - containerName: "server-1" operator: append value: - "-v=4" - "--enable-profiling"
此差异化策略分别表示添加、替换、删除标签资源。针对标签资源,涉及到的覆写语法参数如下:
operator:必填项,表示要对以上目标的操作方式,详细介绍参见:覆写规则。
value:必填项,表示以上操作中需要追加或替换的值。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: - targetClusters: clusters: - kubeadmiral-member-1 overriders: labels: - operator: addIfAbsent value: app: "chat" - operator: overwrite value: version: "v1.1.0" - operator: delete value: action: ""
此差异化策略表示添加一条 Annotation。针对注解资源,涉及到的覆写语法参数如下:
operator:必填项,表示要对以上目标的操作方式,详细介绍参见:覆写规则。
value:必填项,表示以上操作中需要追加或替换的值。
apiVersion: core.kubeadmiral.io/v1alpha1 kind: ClusterOverridePolicy metadata: name: mypolicy spec: overrideRules: - targetClusters: clusters: - kubeadmiral-member-1 overriders: annotations: - operator: addIfAbsent value: imageregistry: "docker"