排除kustomization.yaml中的资源



我有一个kustosize基,我想在不编辑它的情况下重用它。不幸的是,它创建了一个我不想创建的命名空间。我想在编译清单时简单地将该资源从考虑中删除,并为我的资源添加一个资源,因为我无法修补命名空间来更改名称。

这能做到吗?怎样

您可以通过使用这样的战略合并补丁的删除指令来省略特定的资源。

文件夹结构

$ tree .
.
├── base
│   ├── kustomization.yaml
│   └── namespace.yaml
└── overlays
├── dev
│   └── kustomization.yaml
└── prod
├── delete-ns-b.yaml
└── kustomization.yaml

文件内容

$ cat base/kustomization.yaml
resources:
- namespace.yaml
$  cat base/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: ns-a
---
apiVersion: v1
kind: Namespace
metadata:
name: ns-b
$ cat overlays/dev/kustomization.yaml
bases:
- ../../base
$ cat overlays/prod/delete-ns-b.yaml
$patch: delete
apiVersion: v1
kind: Namespace
metadata:
name: ns-b
$ cat overlays/prod/kustomization.yaml
bases:
- ../../base
patches:
- path: delete-ns-b.yaml

kustomize 的行为

$ kustomize build overlays/dev
apiVersion: v1
kind: Namespace
metadata:
name: ns-a
---
apiVersion: v1
kind: Namespace
metadata:
name: ns-b
$ kustomize build overlays/prod
apiVersion: v1
kind: Namespace
metadata:
name: ns-a

在本例中,我们在基本文件夹中有两个名称空间。在dev中,kustoize生成2个名称空间,因为没有补丁。但是,在prod中,kustoize只生成一个命名空间,因为delete补丁删除了命名空间ns-b。

我发现我对不能更改命名空间名称的理解是错误的。使用补丁功能,您实际上可以更改资源的名称,包括名称空间。

这就是我最终使用的:

patches:
- target:
kind: Namespace
name: application
patch: |-
- op: replace
path: /metadata/name
value: my-application

我遇到了这个问题,并最终采取了不同的方法来解决它。值得仔细思考您的需求,问问自己为什么希望kustomize省略资源?在我的情况下——我想这是最常见的用例——我希望kustomize省略资源,因为我不想将其应用于目标kubernetes集群,但kustomize并没有提供一种简单的方法来实现这一点。在将资源应用到集群时进行过滤,而不是在生成资源时进行过滤不是更好吗?我最终应用的解决方案是在应用到集群时按标签过滤资源。您可以在覆盖中添加排除标签,以防止应用资源。

例如

$ kustomize build . | kubectl apply -l apply-resource!=no -f -

最新更新