首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kustomize:如何使生成器实际合并一个对象而不是复制

Kustomize:如何使生成器实际合并一个对象而不是复制
EN

Stack Overflow用户
提问于 2022-04-05 21:56:11
回答 1查看 1.8K关注 0票数 0

我使用kustomize来管理我的argocd清单。

我的结构是这样的:

代码语言:javascript
复制
argocd
├── base
│   ├── argocd-ui-ingress.yaml
│   └── kustomization.yaml
└── overlays
    └── dev
        ├── argocd-cm-patch.yaml
        ├── argocd-repo-server-ksops-patch.yaml
        ├── ksops-secret-generator.yaml
        ├── kustomization.yaml
        └── secret-argocd-notifications.yaml
    └── prod
        ├── argocd-cm-patch.yaml
        ├── argocd-repo-server-ksops-patch.yaml
        ├── ksops-secret-generator.yaml
        ├── kustomization.yaml
        └── secret-argocd-notifications.yaml

这是我的overlays/dev/kustomization.yaml文件:

代码语言:javascript
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- https://raw.githubusercontent.com/argoproj/argo-cd/v2.3.2/manifests/install.yaml
- ../../base

patchesStrategicMerge:
  - argocd-cm-patch.yaml
  - argocd-repo-server-ksops-patch.yaml

patches:
- patch: |-
    - op: add
      path: /spec/rules/0/host
      value: argocd.foo.com
    - op: add
      path: /spec/tls/0/hosts/0
      value: argocd.foo.com
  target:
    kind: Ingress
    name: argocd-ui

generators:
  - ksops-secret-generator.yaml

这是我的ksops-secret-generator.yaml文件:

代码语言:javascript
复制
# Create a local Kubernetes Secret
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
  name: ksops-secret-generator
files:
  - secret-argocd-notifications.yaml

最后,我的secret-argocd-notifications.yaml看起来是这样的:

代码语言:javascript
复制
apiVersion: v1
kind: Secret
metadata:
    name: argocd-notifications-secret
    namespace: argocd
data:
    foo: [ENC]...

因为它是一个sops-encrypted文件,所以我使用ksops插件来生成可用的秘密资源。

我目前遇到的问题是,我正在使用的远程资源(https://raw.githubusercontent.com/argoproj/argo-cd/v2.3.2/manifests/install.yaml)已经包含一个名为argocd-notifications-secret的秘密。因此,当我运行kustomize build overlays/dev --enable-alpha-plugins时,我得到了两个名为argocd-notifications-secret的秘密资源。一个来自通过ksops-secret-generator生成的本地文件,另一个包含在远程清单中。

我试图通过向本地文件中添加replace (以及merge,获得相同的结果)行为注释来解决这个问题:

代码语言:javascript
复制
    annotations:
        kustomize.config.k8s.io/behavior: replace

但以以下错误结尾:

代码语言:javascript
复制
Error: merging from generator &{0xc000d4c0a0 <nil>}: id resid.ResId{Gvk:resid.Gvk{Group:"", Version:"v1", Kind:"Secret", isClusterScoped:false}, Name:"argocd-notifications-secret", Namespace:"argocd"} does not exist; cannot merge or replace

我也不能在patchesStrategicMerge部分下添加本地文件,因为它只是添加原始的sops加密文件(根本不使用generator )。

有办法处理这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 22:14:44

很明显这都是红鲱鱼。主要问题是namespace指令,它位于argocd-notifications-secret覆盖层上。删除它之后,我重新添加了以下注释:

代码语言:javascript
复制
    annotations:
        kustomize.config.k8s.io/behavior: merge

而且起作用了。

这一快速转变的功劳是由于CNCF #argo-cd频道。线在这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71758834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档