2015-11-03 66 views
2

我们正在将我们的ruby微服务移动到kubernetes,并且我们用于在config/application.yml中保存特定于环境的配置。使用kubernetes,您可以为每个服务创建特定于环境的文件,例如config/kubernetes/production.yml如何使用kubernetes配置环境特定的应用程序配置

尽管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有其他最佳实践置备吊舱结构化配置?

注意,直到所有的服务都迁移,我们基本上保持配置为这样:

kubernetes_staging: 
    <<: *staging 
    ... 
+1

将它的工作有一个配置/ application.yml文件,并将它放入您的码头工人的形象,并使用相同的图像为各类吊舱,然后控制通过改变'-e'参数来使用哪个环境?例如: '.spec.container []。command:[“rails”“server”“-e”,“production”]' –

+0

这就是我们现在正在做的事情。我们通过设置“RUN_ENV”环境变量来指定kubernetes配置中的参数。所以我想用rails的方式保持最佳做法? – user1047833

+1

我对Rails没有任何经验,所以我不能说那个。 –

回答

1

你可以做到这几个方面,一个是继续做你在一个单一的文件做什么另一个是使用标签来指定要使用哪个环境的配置,另一个是使用命名空间。我个人推荐命名空间,这样你可以为每个环境分别创建.yml文件,这些文件可能会使同一个pod旋转,但是具有不同的配置,因此要执行此操作,您需要使用staging,prod等命名空间。命名空间也是让同一个kubernetes集群具有分段和生产概念的好方法。另外,您可以为某些名称空间指定权限。

下面是关于命名空间的文档https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/design/namespaces.md