在厨师环境菜谱管理应用程序配置(Managing application configuration

2019-10-20 08:32发布

我是新来的厨师和一直在努力寻找如何在环境菜谱[源#1]配置应用程序配置的最佳实践。

环境食谱我的工作应该做到以下几点:

  • 通过创建目录,用户等的特定用于仅此部署准备的自定义应用程序部署的节点。
  • 添加特定的应用程序部署初始化和监控脚本。
  • 定义应用程序的配置设置。

这最后的责任一直是一个特别难啃的骨头。

应用程序部署的示例配置文件可能如下所示:

{
    "server": {
        "port": 9090
    },
    "session": {
        "proxy": false,
        "expires": 100
    },
    "redis": [{
        "port": 9031,
        "host": "rds01.prd.example.com"
    }, {
        "port": 9031,
        "host": "rds02.prd.example.com"
    }],
    "ldapConfig": {
        "url": "ldap://example.inc:389",
        "adminDn": "CN=Admin,CN=Users,DC=example,DC=inc",
        "adminUsername": "user",
        "adminPassword": "secret",
        "searchBase": "OU=BigCustomer,OU=customers,DC=example,DC=inc",
        "searchFilter": "(example=*)"
    },
    "log4js": {
        "appenders": [
            {
                "category": "[all]",
                "type": "file",
                "filename": "./logs/myapp.log"
            }
        ],
        "levels": {
            "[all]": "ERROR"
        }
    },
    "otherService": {
        "basePath" : "http://api.prd.example.com:1234/otherService",
        "smokeTestVariable" : "testVar"
    }
}

此部署配置文件的某些部分比其他人更稳定。 虽然这可能取决于应用程序和设置而异,如端口号,用户名的事情,我宁愿保持相同的不同环境中为了简单起见。

让我来分类的配置设置:

性能稳定

  • 会议
  • 服务器
  • log4js.appenders
  • ldapConfig.adminUsername
  • ldapConfig.searchFilter
  • otherService.basePath
  • redis.port

环境特定的属性

  • log4js.levels
  • otherService.smokeTestVariable

局部环境的具体性能

  • redis.host: rds01.[environment].example.com
  • otherService.basePath: http://api.[environment].example.com:1234/otherService

加密的环境特定属性

  • ldapConfig.adminPassword

问题

  1. 我应该如何创建配置文件? 一些选项:1)使用的应用程序部署本身内发货文件,2)使用一个食谱文件模板,3)使用JSON作为BLOB属性之一[来源#2],4)...等?
  2. 还有就是配置文件中的变化有很大的差异; 如何更好利用这些厨师来管理? 角色,环境,每个节点的配置,数据包,加密数据袋...? 或者我应该选择环境变量来代替?

在方法的一些关键问题:

  • 我宁愿只有1设置的配置设置的方式。
  • 更改配置文件对于开发人员来说应该是相当简单(他们在本地计算机上使用推流浪测试之前)。
  • 这些密码必须是安全的。
  • 厨师食谱是相同的git仓库的源代码进行管理。
  • 某些配置设置需要的具有很大的灵活性; 例如log4js在我的例子配置设置可能包含更多的appender s的几十个相当非结构化变量。

任何经验,将不胜感激!

来源

  1. http://blog.vialstudios.com/the-environment-cookbook-pattern/
  2. http://lists.opscode.com/sympa/arc/chef/2013-01/msg00392.html
  3. http://jtimberman.housepub.org/blog/2013/01/28/local-templates-for-application-configuration/
  4. http://realityforge.org/code/2012/11/12/reusable-cookbooks-revisited.html

Answer 1:

杰米·温莎发表了谈话,在chefconf功能更强大在解释环境菜谱模式的基本原理和用法:

  • Chefcon:谈到自包含的版本中,使用厨师
  • 幻灯片

在我看来,这种模式引入了一个关键概念是使用的想法厨师环境来控制每个应用程序实例的设置。 环境被更新,使用berkshelf ,与正在使用的应用程序中的食谱的运行时版本。

什么是不太明显的是,如果你决定要保留一个厨师环境使用单一的应用程序实例,它就变成安全的使用环境来配置应用程序的全局运行时设置。

一个例子,如果给出的berkshelf-API 的安装说明 。 在那里,你会看到生产环境(用于应用程序)正在编辑的各种运行时设置:

knife environment edit berkshelf-api-production

总之,厨师为我们提供了很多的选择。 我想提出以下建议通用:

  1. 在应用食谱捕获的默认值
  2. 为每个应用程序实例的环境中(所推荐的模式)
  3. 过度的游乐设施在环境中设置运行时属性

笔记:

  • 又见berksflow工具。 旨在使环境菜谱模式更容易实现。
  • 我有没有提到使用的角色。 这些也可以用于覆盖在运行时的属性,但可能是简单的捕捉到一个专门的厨师环境的一切。 角色似乎更适合捕捉特有的应用程序的组件的信息。


文章来源: Managing application configuration in a chef environment cookbook