我的任务是设计和实施基础设施的配置管理 (Chef),其中生产服务器完全分段并隔离在跳转箱后面。
---------------------------------
| Production | Staging, Test, Dev |
---------------------------------
将文件放入生产环境的唯一方法是使用 sftp 连接。只有两个人有能力直接进入生产环境。可以例外,允许严格控制的自动化系统(如 jenkins)将文件复制到生产环境中。
通常情况下,我建议在云中设置单个 Chef 服务器,但生产服务器无法进行外部访问。(无需费很大力气就能说服一些非常不情愿的人)。
我看到的一个解决方案是使用两个 Chef 服务器
---------------------------------------
| chef-production | chef-local |
| Production | Staging, Test, Dev |
---------------------------------------
使用两个 Chef 服务器存在一些问题,我不知道如何克服。
- 我如何才能使生产和本地服务器的菜谱保持同步?
- 我们如何才能将新的生产节点添加到生产 chef 服务器,而不需要管理员运行 knife 命令?
- 我们如何才能更改生产中的数据包?
我愿意接受其他建议。我正在考虑不使用 chef 服务器,而是使用chef-zero
或chef-solo
。我的理解是,当使用多个环境时,这不是最佳解决方案。
答案1
我讨厌这种不信任的环境,但我明白;你必须处理业务需求......
您可以使用针对您的食谱的 CI/CD 管道来解决保持食谱同步的问题,这样它们就会自动部署到两个 Chef 服务器。您可能希望广泛利用食谱固定之类的功能,但提供更新(即使它们没有被积极使用)并不成问题。 副厨师是我公司开源的一个工具,用于帮助人们开始自动测试食谱并上传到 Chef Server。它必须进行修改才能满足多个 Chef Server 的情况,但大部分功能都已经存在。
由于 Chef12 同时具有“组织”和“基于角色的访问控制”(RBAC)功能(每个功能以前仅在付费产品中可用),您可以建立权限,以便只有指定的人员可以修改生产环境,或者生产是同一 Chef 服务器内的单独组织。
向 Prod Chef 服务器添加新节点需要某种引导。具体细节将因您的环境而异,但如果您拥有该环境本地的安装程序,则可以在从 VM 模板启动或部署时将其设置为一次性运行的作业。如果您有通过 API 启动 VM 的工具,那么将其扩展到添加引导命令应该不会太糟糕。(毕竟,Chef 是一个 API 驱动的系统。)
您关于数据包的问题太广泛了,不适合在这里回答。
请记住,拥有多个 chef-server 需要有单独的knife
配置,因此您必须记住为每个服务器传递一个配置标志,或者包装命令以knife
关联配置文件。当然,除非您有足够的自动化能力,永远不需要knife
。
Chef-Zero
适用于本地测试,您可以使用Chef-Solo
,但需要搜索。它对于管理产品盒来说真的没有什么意义。
有些公司Chef-Solo
以“按需运行”的方式将其用于非测试环境。就我个人而言,我不喜欢这种方式。我喜欢Solo
用于本地测试(例如使用 Vagrant),或者如果您要设置系统以使其不可变。如果您要拥有长期运行的服务器(大部分是无状态的,并且经常被拆除),标准 Chef-Server 将帮助您防止配置随时间推移而变化。