排除 kustomization.yaml 中的资源

Jos*_*iah 8 kubernetes kustomize

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

这能做到吗?如何?

Tos*_*ita 17

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

文件夹结构

$ tree .
.
??? base
?   ??? kustomization.yaml
?   ??? namespace.yaml
??? overlays
    ??? dev
    ?   ??? kustomization.yaml
    ??? prod
        ??? delete-ns-b.yaml
        ??? kustomization.yaml
Run Code Online (Sandbox Code Playgroud)

文件内容

$ 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
patchesStrategicMerge:
  - delete-ns-b.yaml
Run Code Online (Sandbox Code Playgroud)

自定义行为

$ 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们在基本文件夹中有两个命名空间。在 dev 中,kustomize 产生了 2 个命名空间,因为没有补丁。但是,在 prod 中,kustomize 只生成一个命名空间,因为 delete patch 删除了命名空间 ns-b。


Jos*_*iah 8

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

这就是我最终使用的:

patches:
- target:
    kind: Namespace
    name: application
  patch: |-
    - op: replace
      path: /metadata/name
      value: my-application
Run Code Online (Sandbox Code Playgroud)


Ben*_*ies 8

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

例如

$ kustomize build . | kubectl apply -l apply-resource!=no -f -
Run Code Online (Sandbox Code Playgroud)

  • 这是一个快速部署的巧妙解决方案,但是它可以在使用 Flux 或 ArgoCD 的 gitop 中工作吗?我还倾向于对结果进行尽可能接近原始结果的更改,以减少过程中的混乱。对于一些简单的一次性情况,我不需要自动化和重现我的结果,这是优雅和快速的。 (2认同)