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 Supongamos la situación anterior. El problema es que los objetos especificados en r2.yaml se ubicarían en ns1 , incluso si se hace referencia explícita a ns2 en metadata.namespace .
¿Cómo tengo que lidiar con esto? ¿O cómo puedo resolver esto (ya que supongo que hay múltiples opciones)?
He investigado esto y se me ocurrió una idea.
├── 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 Necesita tener 2 directorios, en esta configuración son: base y prod . En el directorio base , debe usar su YAML base y el archivo kustomization.yaml . En mi escenario, tengo 6 YAML: nginx/1/2/3/4.yaml basado en la documentación de Kubernetes y nginx5.yaml , que tiene el mismo aspecto pero con espacio de nombre de especificación adicional spec.namespace: nginx .
En el directorio base :
$ cat kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - nginx1.yaml - nginx2.yaml - nginx3.yaml - nginx4.yaml - nginx5.yamlY 5 YAML con nginx.
En Prod :
Debes tener 2 archivos. kustomization.yaml y patch.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 Cuando usará kustomize build . en el directorio prod , todo nginx-deployment/-2/-3/-4 estará en el espacio de namespace: ns1 y nginx-deployment-5 estará en el espacio de 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:Enlaces útiles :