【发布时间】:2015-11-03 08:47:32
【问题描述】:
我们正在将我们的 ruby 微服务迁移到 kubernetes,并且我们曾经在 config/application.yml 中保存特定于环境的配置。使用 kubernetes,您可以为每个服务创建特定于环境的文件,例如config/kubernetes/production.yml等
虽然 kubernetes pod 配置文件能够保存环境变量,但您似乎无法真正在其中保存结构化数据。
例如,在application.yml 我们有
development: &development
process:
notifier:
type: 'terminal-notifier'
...
production: &production
process:
notifier:
type: 'airbrake'
api_key: 'xxxx'
host: 'xxx.xxx.com'
...
在 kubernetes 中继续这种做法并在 application.yml 中分解环境是否合理,或者 kubernetes 是否有其他一些最佳做法来为 pod 提供结构化配置?
请注意,在迁移所有服务之前,我们基本上必须保持这样的配置:
kubernetes_staging:
<<: *staging
...
【问题讨论】:
-
拥有一个 config/application.yml 文件是否可行,并将其放入您的 docker 映像中,并为所有类型的 pod 使用相同的映像,然后通过改变来控制要使用的环境rails 的
-e参数?比如:.spec.container[].command: ["rails" "server" "-e", "production"] -
这基本上就是我们现在正在做的事情。我们通过设置
RUN_ENV环境变量来指定kubernetes 配置中的参数。所以我认为最好的做法是坚持使用 Rails 方式? -
我对 Rails 没有任何经验,所以我不能说。
-
我们正在计划一个名为“ConfigData”的功能,它允许您将文件存储在 apiserver 上并将它们挂载到您的容器中。那是github.com/kubernetes/kubernetes/pull/6477 的问题,认为它很长。我们还讨论了一些更简单的事情,例如:github.com/kubernetes/kubernetes/issues/13610 -- 如果这些问题看起来有用,请随时 +1
-
感谢 Eric 的建议和主题。看来我们已经在遵循最佳实践(基本上正如您所提到的 - config/application.yml 中的一个文件)。这些线程看起来很有趣,我会仔细阅读它们并考虑是否值得放弃当前的方法