在 kustomization.yaml 文件的 patchesJson6902 中使用变量

Use variable in a patchesJson6902 of a kustomization.yaml file

我想在 Namespace 资源中设置 name 字段,并用相同的值替换 Deployment 资源中的 namespace 字段,例如my-namespace.

这里是kustomization.json:

namespace: <NAMESPACE>
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesJson6902:
- patch: |-
    - op: replace
      path: /metadata/name
      value: <NAMESPACE>
  target:
    kind: Namespace
    name: system
    version: v1
resources:
- manager.yaml

manager.yaml

apiVersion: v1
kind: Namespace
metadata:
  labels:
    control-plane: controller-manager
  name: system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: controller-manager
  namespace: system
spec:
  selector:
    matchLabels:
      control-plane: controller-manager
  replicas: 1
  template:
    metadata:
      labels:
        control-plane: controller-manager
    spec:
      containers:
      - command:
        - /manager
        args:
        - --enable-leader-election
        image: controller:latest
        name: manager

我尝试使用 kustomize edit set namespace my-namespace && kustomize build,但它只会更改 Deployment 对象中的 namespace 字段。

有没有办法在 'pure' kustomize 中不使用 sed 并且不必手动更改 kustomization.json 中的值来更改这两个字段?

有没有一种方法可以在不使用 sed、'pure' kustomize 并且无需手动更改 kustomization.json 中的值的情况下更改这两个字段?

我设法通过以下配置实现了一些类似的效果:

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
resources:
- deployment.yaml
depyloment.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  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

这是您使用的命令的输出:

➜  kustomize kustomize edit set namespace my-namespace7 && kustomize build .  
apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace7
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: my-namespace7
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.14.2
        name: nginx
        ports:
        - containerPort: 80

这里发生的事情是,一旦您在 kustomization.yaml 中全局设置 namespace,它就会将其应用于您的目标,在我看来,这看起来是实现您想要的目标的更简单方法。

如果没有 manager_patch.yaml 内容,我无法测试您的配置。如果您想继续前进,您将使用文件内容更新问题。