有人可以解释一下“patchesStrategicMerge”吗

kis*_*ore 21 yaml kubernetes kubernetes-helm kustomize

patchesStrategicMerge我在 kustomization.yaml 文件中看到,但没有清楚地了解它,比如它的需要是什么或者我们为什么需要它?

自定义.yaml

resources:
- a.yaml

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

我经历过这个: https: //kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#customizinghttps://github.com/kubernetes/community/blob/master/contributors/devel/sig- api-machinery/strategic-merge-patch.md

The*_*ool 36

当您从某个基础继承并希望对所述基础应用部分更改时,这会很方便。这样,您就可以拥有一个源 YAML 文件并基于它执行不同的自定义,而无需重新创建整个资源。这是kustomize的一个关键卖点。

\n

其目的Strategic Merge Patch是能够部分修补丰富的对象,而不是完全替换它们。

\n

想象一下你有一个对象列表。

\n
mylist:\n - name: foo\n - name: bar\n - name: baz\n
Run Code Online (Sandbox Code Playgroud)\n

您如何更改列表中的一项?使用标准合并补丁,您只能替换整个列表。但通过战略合并补丁,您可以根据某些属性定位列表中的一个元素,在这种情况下,只有名称才有意义,因为它是唯一的属性。

\n
mylist:\n - $patch: delete\n   name: foo\n
Run Code Online (Sandbox Code Playgroud)\n

在上面的示例中,我使用策略合并补丁来删除列表中名为 foo 的项目。

\n

这是另一个例子,假设我有以下项目结构。

\n
sample\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pod.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 layers\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dev\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 patch.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

在底部,是我的完整 Pod 定义。在图层中,我可以为不同的环境创建多个图层,在本例中我只有一个用于开发。

\n

基本文件夹中的 kustomization.yaml 如下所示。

\n
resources:\n - pod.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

如果我通过试运行来执行基础本身,我就会得到这个。

\n
mylist:\n - $patch: delete\n   name: foo\n
Run Code Online (Sandbox Code Playgroud)\n
sample\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pod.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 layers\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dev\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 patch.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

dev 文件夹中的 kustomization.yaml 如下所示。

\n
resources:\n - pod.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

补丁看起来像这样。我想为 sidecar 启用调试日志记录。因此,我使用合并指令来更改其参数而不更改图像。我还想保留 nginx 容器。

\n
kubectl apply -k sample/base --dry-run=client -o yaml\n
Run Code Online (Sandbox Code Playgroud)\n
apiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\n  namespace: default\nspec:\n  containers:\n  - image: nginx\n    name: nginx\n  - command:\n    - sleep\n    - infinity\n  - image: busybox\n    name: sidecar\n
Run Code Online (Sandbox Code Playgroud)\n
bases:\n  - ../../base\npatchesStrategicMerge:\n  - patch.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

注意:命令和参数没有多大意义,只是为了说明战略合并补丁。

\n