运行时将环境variables传递给kubernetes

在使用vanilla docker,compose或swarm时,我可以通过“-add-env FOO = bar”作为Docker cli参数来为运行时的容器定义一个env var值。 但是,在kubernetes中,我只看到如何在容器规范部分的.yml文件中强调值。

任何人都可以指出我如何在运行时传递它? (即使用“kubectl apply …”时传递一个env var)

谢谢! 真的很感谢任何帮助!

最好的祝福,

我假设“运行时”实际上是指当调用kubectl create / apply时的意思。 不,这是不可能的。

你想要做的是可能通过一些模板引擎运行你的清单。 你可以做的最简单的事情就是通过像cat manifest | sed 's/PLACEHOLDER/VALUE/'这样的sed来pipe你的模板 cat manifest | sed 's/PLACEHOLDER/VALUE/'应用到kubectl中,所以你可以在manifest中使用占位符string来正确定义ENV,这个占位符string在被推送到kubectl之前被replace。 一个更先进的解决scheme,我通常会build议,是熟悉掌舵图表,你可以例如运行helm upgrade my-release --reuse-vars --set my.var=value

使用您select的模板语言非常简单。 比如用erb你可以做erb deployment.erb.yaml | kubectl apply -f - erb deployment.erb.yaml | kubectl apply -f -

对于大多数简单的用例,您可以使用envsubst: cat deployment.yaml | envsubst | kubectl apply -f - cat deployment.yaml | envsubst | kubectl apply -f -