首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人能解释一下“patchesStrategicMerge”吗

有人能解释一下“patchesStrategicMerge”吗
EN

Stack Overflow用户
提问于 2022-02-17 20:47:09
回答 1查看 9K关注 0票数 8

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

kustomization.yaml

代码语言:javascript
运行
复制
resources:
- a.yaml

patchesStrategicMerge:
- b.yaml
- c.yaml

我经历了这个: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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 21:27:48

这很方便,您可以继承某些基础,并希望将部分更改应用到所述基中。这样,您就可以拥有一个源YAML文件,并在此基础上执行不同的自定义,而不必重新创建整个资源。这是库斯托姆的一个关键卖点。

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

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

代码语言:javascript
运行
复制
mylist:
 - name: foo
 - name: bar
 - name: baz

您如何更改列表中的某一项?使用标准的合并修补程序,只能替换整个列表。但是,使用策略合并修补程序,您可以基于某些属性针对列表中的一个元素,在这种情况下,只有名称才有意义,因为它是唯一的属性。

代码语言:javascript
运行
复制
mylist:
 - $patch: delete
   name: foo

在上面的示例中,我使用策略合并修补程序删除列表中具有foo名称的项。

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

代码语言:javascript
运行
复制
sample
├── base
│   ├── kustomization.yaml
│   └── pod.yaml
└── layers
    └── dev
        ├── kustomization.yaml
        └── patch.yaml

在基地里,是我完整的吊舱定义。在这些层中,我可以为不同的环境创建多个层,在这种情况下,我只有一个用于dev。

如果我用干式运行执行基地本身,我就会得到这个。

代码语言:javascript
运行
复制
kubectl apply -k sample/base --dry-run=client -o yaml
代码语言:javascript
运行
复制
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如下所示。

代码语言:javascript
运行
复制
bases:
  - ../../base
patchesStrategicMerge:
  - patch.yaml

这个补丁看起来是这样的。我想为侧服务器启用调试日志记录。在此之前,我使用merge指令更改其参数,而不更改图像。我还想保留nginx容器。

代码语言:javascript
运行
复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - $patch: merge
      name: sidecar
      args: [log-level, debug]
代码语言:javascript
运行
复制
kubectl apply -k sample/layers/dev/ --dry-run=client -o yaml
代码语言:javascript
运行
复制
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没有多大意义,它只是为了说明策略合并补丁。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71165168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档