【问题标题】:How to deal with a namespace different from the globally set one?如何处理不同于全局设置的命名空间?
【发布时间】:2021-03-05 11:22:39
【问题描述】:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: ns1

resources:
  - r1a.yaml
  - r1b.yaml
  - r1c.yaml
  - r1d.yaml
  - r1e.yaml
  - r2.yaml # needs to be placed in namespace ns2

让我们假设上述情况。问题是在r2.yaml 中指定的对象将被放置在ns1 中,即使ns2metadata.namespace 中被明确引用。

我该如何处理?或者我该如何解决这个问题(因为我假设有多种选择)?

【问题讨论】:

  • 不确定这是否可行,因为 Kustomize 正在根据模板修补具有相同值的所有资源。你能详细说明你的场景吗?我会做一些测试。这将是某种自动化?
  • 你会说我描述的用例表明滥用 kustomize 吗?场景是 kustomize 已用于设置 Argo 和命名空间 argo 中的各种工作流。现在正在引入 Argo Events,它的设置应该嵌入到这个 kustomize 配置中,但是 Argo Events 需要安装到命名空间 argo-events 中。

标签: kubernetes kustomize


【解决方案1】:

我对此进行了研究,并提出了一个想法。

├── base
│   ├── [nginx.yaml]  Deployment nginx ns: default
|   ├── [nginx2.yaml]  Deployment nginx ns: default
|   ├── [nginx3.yaml]  Deployment nginx ns: default
|   ├── [nginx4.yaml]  Deployment nginx ns: default
|   ├── [nginx5.yaml]  Deployment nginx ns: nginx
│   └── [kustomization.yaml]  Kustomization 
└── prod
    ├── [kustomization.yaml]  Kustomization 
    └── [patch.yaml] patching namespace

您需要有 2 个目录,在此设置中是:baseprod。在 base 目录中,您应该使用基本 YAML 和 kustomization.yaml 文件。在我的场景中,我有 6 个 YAML:nginx/1/2/3/4.yaml 基于 Kubernetes Documentationnginx5.yaml,它们看起来相同,但有额外的 spec.namespace: nginx

base目录中:

$ cat kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- nginx1.yaml
- nginx2.yaml
- nginx3.yaml
- nginx4.yaml
- nginx5.yaml

还有 5 个带有 nginx 的 YAML。

Prod目录中:

您应该有 2 个文件。 kustomization.yamlpatch.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: ns1
bases:
- ../base
patchesJson6902:
- target:
    group: apps
    version: v1
    kind: Deployment
    name: nginx-deployment-5
  path: patch.yaml

$ cat patch.yaml
- op: replace
  path: /metadata/namespace
  value: nginx

当您在prod 目录中使用kustomize build . 时,所有nginx-deployment/-2/-3/-4 都将在namespace: ns1 中,nginx-deployment-5 将在namespace: nginx 中。

~/prod (project)$ kustomize build .
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-5
  namespace: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.2
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: ns1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.2
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
  namespace: ns1
spec:

有用的链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2013-08-11
    • 2012-05-03
    相关资源
    最近更新 更多