【问题标题】:Pass environment variables to kubernetes at runtime在运行时将环境变量传递给 Kubernetes
【发布时间】:2017-12-02 09:46:58
【问题描述】:

在使用 vanilla docker、compose 或 swarm 时,我可以将“--add-env FOO=bar”作为 Docker cli 参数传递,以便在运行时为容器定义 env var 值。但是,在 kubernetes 中,我只看到了如何在容器规范部分中硬核 .yml 文件中的值。

谁能指出我如何在运行时传递它? (即使用“kubectl apply ...”时传递一个环境变量)

谢谢!非常感谢任何帮助!

最好的问候,

【问题讨论】:

  • 不幸的是,正如@radek-goblin-pieczonka 提到的,Kubernetes 本身并不支持这一点。两种答案都可以做到这一点,并且有多个模板引擎,例如 Draft,但它们都非常复杂。我将第一个答案视为有效,因为它非常快。谢谢大家。

标签: docker kubernetes containers


【解决方案1】:

使用您选择的模板语言非常容易。例如,使用 erb 你可以只做erb deployment.erb.yaml | kubectl apply -f -

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

【讨论】:

    【解决方案2】:

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

    您想要做的可能是通过一些模板引擎运行您的清单。您可以做的最简单的方法是通过像cat manifest | sed 's/PLACEHOLDER/VALUE/' 这样的 sed 将模板传送到 kubectl apply 中,这样您就可以在清单中正确定义 ENV,并在将其推送到 kubectl 之前将其替换为占位符字符串。一个更高级的解决方案,我通常会建议的解决方案是熟悉 helm 图表,您可以在其中运行 helm upgrade my-release --reuse-vars --set my.var=value

    【讨论】:

    • 这令人沮丧... :(
    • 这就是为什么会有helm :) 事实上,我使用自己的 python/jinja2 解决方案有一段时间来支持很好的模板化资产,但后来切换到 helm 因为它更合理,远远超出了简单的模板
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2021-05-23
    • 2019-02-21
    • 1970-01-01
    • 2021-09-05
    • 2020-03-27
    相关资源
    最近更新 更多