Skaffold Kustomize 将外部环境变量传递给 kustomization.yaml

Skaffold Kustomize Passing External Environment Variable into kustomization.yaml

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

传递给 kustomization.yaml

假设我下面有一个 kustomization 文件

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

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

我导出了带有图像名称和标签的环境,并希望在执行 skaffold deploydev

时传递到 kustomization.yaml

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

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

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

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

  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 通过管道输入的文本中的变量,然后再次通过管道输出到 kubectl apply -f,这一次将使用尾随 - 应用它(这将使它从标准输入读取 yaml)