本文介绍了有人能解释一下战略合并的补丁吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在kustomization.yaml文件中看到了patchesStrategicMerge
,但没有弄清楚,比如它需要什么或者我们为什么需要它?
kustomization.yaml
resources:
- a.yaml
patchesStrategicMerge:
- b.yaml
- c.yaml
我经历了这个:https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#customizing和https://github.com/kubernetes/community/blob/master/contributors/devel/sig-api-machinery/strategic-merge-patch.md推荐答案
这对您从某个基址继承并希望对该基址应用部分更改非常有用。这样,您就可以拥有一个源YAML文件并基于它执行不同的定制,而不必重新创建整个资源。这是kustomize的一个关键卖点。
Strategic Merge Patch
的目的是能够部分修补丰富对象,而不是完全替换它们。
假设您有一个对象列表。
mylist:
- name: foo
- name: bar
- name: baz
如何更改列表中的一项?使用标准的合并补丁,您只能替换整个列表。但是使用战略性合并补丁,您可以根据某些属性来定位列表中的一个元素,在这种情况下,只有名称有意义,因为它是唯一的属性。
mylist:
- $patch: delete
name: foo
在上面的示例中,我使用战略合并修补程序删除了列表中名为foo的项。
这里是另一个示例,假设我有以下项目结构。
sample
├── base
│ ├── kustomization.yaml
│ └── pod.yaml
└── layers
└── dev
├── kustomization.yaml
└── patch.yaml
在底部,是我完整的Pod定义。而在层中,我可以为不同的环境创建多个层,在这种情况下,我只为dev创建了一个层。如果我使用模拟运行来执行基本本身,则会得到此结果。
kubectl apply -k sample/base --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
namespace: default
spec:
containers:
- image: nginx
name: nginx
- command:
- sleep
- infinity
image: busybox
name: sidecar
dev文件夹中的kustomization.yaml如下所示。
bases:
- ../../base
patchesStrategicMerge:
- patch.yaml
补丁是这样的。我想为侧车启用调试日志记录。因此,我使用合并指令来更改其参数,而不更改图像。我还想保留nginx容器。
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- $patch: merge
name: sidecar
args: [log-level, debug]
kubectl apply -k sample/layers/dev/ --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp
namespace: default
spec:
containers:
- args:
- log-level
- debug
command:
- sleep
- infinity
image: busybox
name: sidecar
- image: nginx
name: nginx
注意:命令和args没有多大意义,它只是为了说明战略合并修补程序。
这篇关于有人能解释一下战略合并的补丁吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!