【问题标题】:Exclude Resource in kustomization.yaml在 kustomization.yaml 中排除资源
【发布时间】:2020-11-18 19:02:11
【问题描述】:

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

这可以吗?怎么样?

【问题讨论】:

  • 您能提供更多信息吗?您正在使用的教程、您的配置文件、您正在使用的环境。
  • 不是真的,这是内部的事情。我会看看如何模拟一个例子。

标签: kubernetes kustomize


【解决方案1】:

您可以像这样使用Strategic Merge Patch 的删除指令来省略特定资源。

文件夹结构

$ 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
patchesStrategicMerge:
  - delete-ns-b.yaml

自定义行为

$ 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 中,kustomize 生成 2 个命名空间,因为没有补丁。但是,在 prod 中,kustomize 只生成一个命名空间,因为删除补丁会删除命名空间 ns-b。

【讨论】:

  • Toshinori-san,谢谢你的解决方案,太棒了!
  • 我的荣幸!! :)
  • 当我用kind: CronJob 尝试这个时,我在编译的清单中得到了一堆空对象。
  • 这太棒了。它甚至可以在数组内部工作,例如,允许您删除或替换边车,而无需求助于 json6902 补丁。不过确实需要更好地记录在案
【解决方案2】:

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

这是我最终使用的:

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

【讨论】:

    【解决方案3】:

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

    例如

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

    【讨论】:

    • 这是一个用于快速部署的简洁解决方案,但它是否适用于使用 Flux 或 ArgoCD 的 gitops?我也倾向于对结果进行尽可能接近原始的更改,以减少在整个过程中的混乱。对于一些不需要自动化和重现结果的简单一次性情况,这是优雅而快速的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2020-10-10
    • 1970-01-01
    • 2023-03-05
    • 2016-04-17
    • 2017-05-28
    • 2019-04-11
    相关资源
    最近更新 更多