首页 > 解决方案 > Skaffold Kustomize 将外部环境变量传递到 kustomization.yaml

问题描述

有没有办法可以将外部环境变量从Skaffold.

假设我在下面有一个自定义文件

  resources:
    - ./deployment.yaml
    - ./service.yaml

  images:
    - name: abc
      newName: <external environment>
      newTag: <external environment>

我有使用图像名称和标签导出的环境,并希望kustomization.yaml在执行时传递skaffold deploydev

有没有办法做到这一点,或者是否有任何解决方案或解决方法可以将外部环境变量传递到kustomization.yaml

我知道我实际上可以使用kustomize edit set image但很丑,因为我需要设置旧的图像名称,我尽量避免。我想要一个更简单的解决方案。我找不到任何说kustomize可以使用系统中的环境变量的地方,例如docker-compose使用${VAR}或尝试访问系统环境变量时使用的环境skaffold变量{{.VAR}}

标签: skaffoldkustomize

解决方案


基本上,Kustomize 只能在它设计的地方解析/替换环境变量。它不是“系统范围”的功能,据我所知,它仅适用于配置映射生成器。说有解决办法

例如,如果您在 /overlays/staging 文件夹中有 kustomization.yaml

  resources:
    - ./deployment.yaml
    - ./service.yaml

  images:
    - name: abc
      newName: $IMAGE_NAME
      newTag: $IMAGE_TAG

你可以,从 bash

export $IMAGE_NAME=my-app-image
export $IMAGE_TAG=latest
kubectl kustomize overlays/staging | envsubst | kubectl apply -f -

或同等的oneliner。

诀窍是用来kubectl kustomize 生成完整的 kustomization (其中仍然包括未评估的变量名),它将在 stdout 上输出并通过管道envsubst将其替换为通过管道输入的文本中的每个先前exported 变量,然后再次通过管道输出到kubectl apply -f,这次将应用它与尾随-(这将使它从标准输入读取 yaml)


推荐阅读