使用 Kustomize 在 kubernetes 清单中修补列表

Art*_*cki 9 kubernetes kustomize

我想使用Kustomize修补(覆盖) kubernetes清单中的列表。我正在使用 patchStrategicMerge 方法。当我修补不在列表中的参数时,修补会按预期工作 - 仅替换 patch.yaml 中的已寻址参数,其余部分保持不变。当我修补列表时,整个列表都会被替换。

如何仅替换列表中的特定项目,并且列表中项目的资源保持不变?

我找到了这两个资源:
https://github.com/kubernetes-sigs/kustomize/issues/581
https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic -merge-patch.md
但无法做出所需的解决方案。

示例代码:orig-file.yaml

apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: alertmanager-slack-config
  namespace: system-namespace
spec:
  test: test
  other: other-stuff
  receivers:
    - name: default
      slackConfigs:
        - name: slack
          username: test-user
          channel: "#alerts"
          sendResolved: true
          apiURL:
            name: slack-webhook-url
            key: address
Run Code Online (Sandbox Code Playgroud)

补丁.yaml:

apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: alertmanager-slack-config
  namespace: system-namespace
spec:
  test: brase-yourself
  receivers:
    - name: default
      slackConfigs:
        - name: slack
          username: Karl
Run Code Online (Sandbox Code Playgroud)

自定义.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- orig-file.yaml

patchesStrategicMerge:
- patch.yaml
Run Code Online (Sandbox Code Playgroud)

我得到什么:

apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: alertmanager-slack-config
  namespace: system-namespace
spec:
  other: other-stuff
  receivers:
  - name: default
    slackConfigs:
    - name: slack
      username: Karl
  test: brase-yourself
Run Code Online (Sandbox Code Playgroud)

我想要的是:

apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: alertmanager-slack-config
  namespace: system-namespace
spec:
  other: other-stuff
  receivers:
    - name: default
      slackConfigs:
        - name: slack
          username: Karl
          channel: "#alerts"
          sendResolved: true
          apiURL:
            name: slack-webhook-url
            key: address
  test: brase-yourself
Run Code Online (Sandbox Code Playgroud)

meh*_*the 12

您可以做的是使用jsonpatch而不是patchesStrategicMerge,所以在您的情况下:

cat <<EOF >./kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- orig-file.yaml

patches:
  - path: patch.yaml
    target:
      group: monitoring.coreos.com
      version: v1alpha1
      kind: AlertmanagerConfig
      name: alertmanager-slack-config

EOF
Run Code Online (Sandbox Code Playgroud)

修补:

cat <<EOF >./patch.yaml
- op: replace
  path: /spec/receivers/0/slackConfigs/0/username
  value: Karl
EOF
Run Code Online (Sandbox Code Playgroud)