您可以通过 kustomize 修补没有基础的任意资源吗?

Posted

技术标签:

【中文标题】您可以通过 kustomize 修补没有基础的任意资源吗?【英文标题】:Can you patch an arbitrary resource with no base via kustomize? 【发布时间】:2021-12-03 00:10:47 【问题描述】:

我一直在尝试修补由 kops 插件(Ebs 驱动程序)声明和应用的部署。

不幸的是,在尝试了各种修补策略后,我似乎无法修补在我的文件夹结构中没有声明基的资源。

请注意,我在顶部使用 FluxCD 进行协调,在推送补丁时看不到此资源的任何更改。

这是我想要更改的 Kops 自动生成和应用的部署的摘录:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    addon.kops.k8s.io/name: aws-ebs-csi-driver.addons.k8s.io
    addon.kops.k8s.io/version: 1.0.0-kops.1
    app.kubernetes.io/instance: aws-ebs-csi-driver
    app.kubernetes.io/managed-by: kops
    app.kubernetes.io/name: aws-ebs-csi-driver
    app.kubernetes.io/version: v1.0.0
    k8s-addon: aws-ebs-csi-driver.addons.k8s.io
    **super: unpatched**
  name: ebs-csi-controller
  namespace: kube-system

我的自定义文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: flux-system
patches:
- target:
    kind: Deployment
    name: ebs-csi-controller
    namespace: kube-system
  path: patch-ebs.yaml

以及实际的补丁-ebs.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ebs-csi-controller
  namespace: kube-system
  labels:
    super: patched

还尝试使用 Json 补丁 patch-ebs.json :

[
  "op": "replace", "path": "/metadata/labels/super", "value": "Patched"
]
运行 kustomize 构建不会产生任何输出; 创建称为资源/基础的部署文件会生成可应用的适当补丁。

这是 Kustomize 的限制,还是我错过了什么?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

Kustomize 取决于引用的资源是否包含在 resources 中,或者使用内置生成器生成,以便对其进行修补或以任何方式进行变异。

需要注意的是,您可以在 kustomization 中包含与现有 ebs-csi-controller 部署相匹配的资源,并且 Kustomize 将构建可应用于现有部署之上的资源。

【讨论】:

以上是关于您可以通过 kustomize 修补没有基础的任意资源吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于 Kubernetes 中通过 Kustomize 定制 Yaml资源文件的一些笔记

关于 Kubernetes 中通过 Kustomize 定制 Yaml资源文件的一些笔记

Kustomize 生产实战-注入监控 APM Agent

Kustomize 生产实战-注入监控 APM Agent

Kustomize 生产实战-注入监控 APM Agent

Kustomize 生产实战-注入监控 APM Agent