Kubernetes 如何处理不同于全局设置名称空间的名称空间?

Kubernetes 如何处理不同于全局设置名称空间的名称空间?,kubernetes,kustomize,Kubernetes,Kustomize,让我们假设上述情况。问题在于r2中指定的对象。yaml将放在ns1中,即使ns2在metadata.namespace中被明确引用 我该怎么处理这件事?或者我该如何解决这个问题(因为我假设有多个选项)?我研究了这个问题,并提出了一个想法 apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: ns1 resources: - r1a.yaml - r1b.yaml - r1c.yaml

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


我该怎么处理这件事?或者我该如何解决这个问题(因为我假设有多个选项)?

我研究了这个问题,并提出了一个想法

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
您需要有两个目录,在此设置中是:
base
prod
。在
base
目录中,您应该使用基本yaml和
kustomization.yaml
文件。在我的场景中,我有6个yaml:
nginx/1/2/3/4.yaml
基于,和
nginx5.yaml
看起来相同,但有额外的
spec.namespace:nginx

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
base
目录中:

├── 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
和5个带有nginx的YAML

Prod
目录中:

├── 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个文件
kustomization.yaml
patch.yaml

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

resources:
- nginx1.yaml
- nginx2.yaml
- nginx3.yaml
- nginx4.yaml
- nginx5.yaml
当您将使用
kustomize build.
prod
目录中时,所有
nginx部署/-2/-3/-4
将位于
命名空间:ns1
中,
nginx-deployment-5
将位于
命名空间:nginx

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
有用的链接


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