无法使用 kustomize 删除"大小限制"属性



我在模板基础文件中将emptyDir下的sizeLimit属性设置为2Gi。我想去掉sizelimit,只剩下emptyDir: {}。我一直无法实现这一点,使用定制叠加。我将在下面详细介绍我的文件夹结构和定制文件。

文件夹结构:

application
├── majorbase
│   ├── kustomization.yaml
│   └── resources
│       └── web-template.yaml
├── minorbase
│   ├── kustomization.yaml
│   └── resources
└── myoverlays
├── kustomization.yaml
└── resources
└── my-new-web.yaml

文件夹myoverlays在其定制中包含以下内容。yaml文件

bases:
- ../minorbase
patchesStrategicMerge:
- resources/my-new-web.yaml

文件夹minorbase在其定制中包含以下内容。yaml文件

bases:
- ../majorbase

文件夹majorbase在其定制中包含以下内容。yaml文件

resources:
- resources/web-template.yaml

我要编辑的部分在majorbase/template中看起来像这样。

volumes:
- name: test-vol
emptyDir:
sizeLimit: "2Gi"

上述配置需要使用下面的覆盖来更新。

volumes:
- name: test-vol
emptyDir: {}

这就是我的问题所在。每当我在覆盖层中删除sizelimit时,定制只是选择基础中提到的2Gi值。当我提到sizeLimit的不同值时,例如"1Gi"在我的overlays文件中,自定义处理更改。这种行为的原因是什么?有可能实现我在这里想要做的吗?

注意:这个答案假设是最新版本的Kustomize(我在本地运行4.5.2)。您的示例使用了已弃用的语法(例如,bases节在2.1.0版本中已弃用)。


你的问题是你正在使用strategicMerge补丁,你正在合并和空地图({})与{"sizeLimit": "26gi"}。如果你将一个空映射与任何东西合并,它是无操作的:你最终会得到"anything"

要显式删除一个元素,您有几个选择。

您可以使用$patch: replace指令(您可以在这里找到一个示例)来让Kustomize替换emptyDir元素,而不是合并内容。它看起来像:

apiVersion: v1
kind: Pod
metadata:
name: example
spec:
volumes:
- name: test-vol
emptyDir:
$patch: replace

对应的kustomization.yaml可能看起来像:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: resources/my-new-web.yaml

或者,您可以使用JSONPatch补丁,这对于显式删除字段很好:

- path: /spec/volumes/0/emptyDir/sizeLimit
op: remove

kustomization.yaml的样子:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ....//base
patches:
- target:
kind: Pod
name: example
path: resources/my-new-web.yaml

您可以在这里找到完整的可运行演示。

相关内容

  • 没有找到相关文章

最新更新