4

假设我们在一个文件夹中有许多 Kubernetes 配置文件kubernetes,我们希望将它们全部应用:

kubectl apply -f kubernetes -n MyNamespace

其中一些文件包含需要首先替换的环境变量(Kubernetes 中没有模板)。例如,一些部署 yaml 包含如下内容:

image: myregistry.com/myrepo:$TAG

对于单个 yaml 文件,这可以通过使用 envsubst 来完成,如下所示

envsubst < deploy.yml | kubectl apply -f -

对所有 yaml 文件进行这些替换的最佳方法是什么?

(遍历文件夹中的文件并按envsubst上述方式调用是一种选择,但我怀疑最好将整个文件夹传递给kubectl而不是单个文件)

4

2 回答 2

6

您可以让envsubst从标准输入读取多个文件的内容,就好像它正在< deploy.yaml使用进程替换<(..)功能bash或使用普通 ol'读取一个文件cat

envsubst < <(cat *.yaml) | kubectl apply -f -

或者

cat *.yaml | envsubst - | kubectl apply -f -
于 2021-01-13T16:26:14.530 回答
4

这有效:

for f in *.yaml; do envsubst < $f | kubectl apply -f -; done
于 2021-01-14T00:39:54.763 回答