我想将base/foo.yaml应用于我的所有环境,它部分看起来像这样
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "volume", "secret": {"secretName": "my-secret"}}}
- {"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"mountPath": "/connections", "name": "volume"}}
Run Code Online (Sandbox Code Playgroud)
现在我还想添加特定于环境的补丁,因此运行eg后我的最终目标kubectl kustomize accept应该是
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "volume", "secret": {"secretName": "my-secret"}}}
- {"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"mountPath": "/connections", "name": "volume"}}
- {"op": "add", "path": "/spec/template/spec/containers/0/env/-", "value": {"name": "MY_ENVIRONMENT", "value": "accept"}}
Run Code Online (Sandbox Code Playgroud)
或者
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "volume", "secret": {"secretName": "my-secret"}}}
- {"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"mountPath": "/connections", "name": "volume"}}
- patch: |-
- {"op": "add", "path": "/spec/template/spec/containers/0/env/-", "value": {"name": "MY_ENVIRONMENT", "value": "accept"}}
Run Code Online (Sandbox Code Playgroud)
我将如何设置我的 kustomize 配置来完成此任务?到目前为止我已经尝试过以下操作:
kustomize.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
patchesStrategicMerge:
- foo.yaml
Run Code Online (Sandbox Code Playgroud)
接受/foo.yaml
Kubernetes:
deploymentPatches:
- patch: |-
- {"op": "add", "path": "/spec/template/spec/containers/0/env/-", "value": {"name": "MY_ENVIRONMENT", "value": "accept"}}
Run Code Online (Sandbox Code Playgroud)
Eir*_*k H 16
我遇到的问题在战略合并补丁文档中有解释;
在标准 JSON 合并补丁中,JSON 对象始终被合并,但列表始终被替换。通常这不是我们想要的。
为了解决这个问题,Strategy Merge Patch 使用 API 对象的 go struct 标签来确定哪些列表应该合并,哪些列表不应该合并。
这就是为什么它可以使用patchesStrategicMerge.
但是,我尝试附加项目的对象和列表并未以这种方式设置,因此只是被替换。
由于我无法更改设置,因此我的解决方案是求助于patchesJson6902.
补丁.yaml
- op: add
path: /spec/Kubernetes/deploymentPatches/-
value:
patch: |-
- op: add
path: /spec/template/spec/containers/0/env/-
value:
name: MY_ENVIRONMENT
value: accept
Run Code Online (Sandbox Code Playgroud)
自定义.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
patchesJson6902:
- target:
group: mygroup
version: v1
kind: myobject
name: myname
path: patch.yaml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20193 次 |
| 最近记录: |