kustomization 命名空间覆盖对我不起作用

问题描述 投票:0回答:1

我的 k8s YAML 清单的组织方式如下:

.
├── app
│   ├── base
│   │   └── kustomization.yaml
|   |   └── my-configmap.yaml
|   |   └── my-namespace.yaml
|   |   └── my-deploy.yaml  
|   |   └── my-svc.yaml  
│   ├── overlay
│       └── kustomization.yaml
        └── new-namespace.yaml

===“基地”===

app/base/kustomization.yaml
是:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - my-configmap.yaml
  - my-deploy.yaml
  - my-namespace.yaml
  - my-svc.yaml

base/
目录内的每个 YAML 清单中,指定
namespace
字段。例如
my-service.yaml
指定命名空间
my-ns
:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: my-svc
  name: my-svc
  namespace: my-ns
spec:

===“叠加”===

我想使用覆盖覆盖我的对象的名称空间。

app/overlay/kustomization.yaml
是:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../base
  - new-namespace.yaml
buildMetadata:
  - managedByLabel
transformers:
  - |-
    apiVersion: builtin
    kind: NamespaceTransformer
    metadata:
      name: namespace-transformer
    namespace: xii
    setRoleBindingSubjects: allServiceAccounts

那个

app/overlay/new-namespace.yaml
是:

---
apiVersion: v1
kind: Namespace
metadata:
  name: xii

====结果====

然后,在路径

app/overlay/
下,我运行命令
kustomize build . | cat
,输出显示我的YAML清单的所有命名空间仍然使用“base”中定义的原始命名空间,而不是被overlay值覆盖
 xii

为什么?我是否误解了 Kustomization 命名空间转换器的行为?

我还尝试了更简单的方法:

我也尝试完全删除

transformers
,而是简单地在
overlay's
namespace: xii中使用
kustomizationl.yaml
,如下所示:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../base
  - new-namespace.yaml
buildMetadata:
  - managedByLabel
namespace: xii

构建时出现错误:

Error: namespace transformation produces ID conflict: [{"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{"config.kubernetes.io/origin":"path: ../base/my-namespace.yaml\n","internal.config.kubernetes.io/previousKinds":"Namespace","internal.config.kubernetes.io/previousNames":"my-ns","internal.config.kubernetes.io/previousNamespaces":"_non_namespaceable_"},"name":"xii"}} {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{"config.kubernetes.io/origin":"path: new-namespace.yaml\n"},"name":"xii"}}]
kubernetes namespaces kustomize
1个回答
0
投票

kustomization 中命名空间覆盖之间的交互是您收到错误的原因。命名空间资源本身以及 yaml 的

如果您将组件修改为标准 Kustomization 并将它们作为资源包含在 Overlays/local/kustomization.yaml 中,一切都会按预期运行:

供将来参考:

请参阅此 gitlink 并查看 namespaceTransformer 规范:

© www.soinside.com 2019 - 2024. All rights reserved.