skaffold - Skaffold Kustomize 将外部环境变量传递到 kustomization.yaml
问题描述
有没有办法可以将外部环境变量从Skaffold
.
假设我在下面有一个自定义文件
resources:
- ./deployment.yaml
- ./service.yaml
images:
- name: abc
newName: <external environment>
newTag: <external environment>
我有使用图像名称和标签导出的环境,并希望kustomization.yaml
在执行时传递skaffold deploy
或dev
有没有办法做到这一点,或者是否有任何解决方案或解决方法可以将外部环境变量传递到kustomization.yaml
?
我知道我实际上可以使用kustomize edit set image
但很丑,因为我需要设置旧的图像名称,我尽量避免。我想要一个更简单的解决方案。我找不到任何说kustomize
可以使用系统中的环境变量的地方,例如docker-compose
使用${VAR}
或尝试访问系统环境变量时使用的环境skaffold
变量{{.VAR}}
解决方案
基本上,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
将其替换为通过管道输入的文本中的每个先前export
ed 变量,然后再次通过管道输出到kubectl apply -f
,这次将应用它与尾随-
(这将使它从标准输入读取 yaml)