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

时间:2021-03-30 08:14:35

标签: kubernetes kustomize

我想在 name 资源中设置 Namespace 字段,并将 namespace 资源中的 Deployment 字段替换为相同的值,例如 {{ 1}}。

这是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 对象中的 namespace 字段。

有没有办法在不使用 Deployment、'pure' sed 并且无需手动更改 kustomize 中的值的情况下更改这两个字段?

1 个答案:

答案 0 :(得分:2)

有没有办法在不使用 sed 的情况下更改两个字段,在“纯”kustomize 中并且不必手动更改 kustomization.json 中的值?< /p>

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

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

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

如果没有 manager_patch.yaml 内容,我无法测试您的配置。如果您希望更进一步,您将使用文件内容更新问题。