如何使用 kustomize 删除环境变量?

cos*_*-14 3 kubernetes kustomize

我想用 kustomize 删除容器中的一些环境变量?那可能吗?当我打补丁时,它只是添加,正如你可能知道的那样。

如果不可能,我们可以将环境变量名称和密钥名称/密钥对一起替换吗?

  containers:
    - name: container1
      env:
      - name: NAMESPACE
        valueFrom:
          secretKeyRef:
            name: x
            key: y
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助将不胜感激!谢谢!

lar*_*sks 7

如果您想NAMESPACE从清单中删除该变量,可以使用特殊$patch: delete指令来执行此操作。

如果我从这个部署开始:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example
spec:
  template:
    spec:
      containers:
        - name: example
          image: docker.io/traefik/whoami:latest
          env:
            - name: ENV_VAR_1
              valueFrom:
                secretKeyRef:
                  name: someSecret
                  key: someKeyName
            - name: ENV_VAR_2
              value: example-value
Run Code Online (Sandbox Code Playgroud)

如果我写在我的kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml

patches:
  - patch: |
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: example
      spec:
        template:
          spec:
            containers:
              - name: example
                env:
                  - name: ENV_VAR_1
                    $patch: delete
Run Code Online (Sandbox Code Playgroud)

那么输出kustomize build就是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example
spec:
  template:
    spec:
      containers:
      - env:
        - name: ENV_VAR_2
          value: example-value
        image: docker.io/traefik/whoami:latest
        name: example
Run Code Online (Sandbox Code Playgroud)

使用这样的策略性合并补丁比 Nijat 的答案等 JSONPatch 风格的补丁有优势,因为它不依赖于环境变量的定义顺序。