我似乎遇到了在多种环境中使用 puppet 的两种方法:
1) 在每个环境中安装一个 puppetmaster,并且仅在准备好在该环境中部署配方时从该环境的源代码控制更新配方。
2) 使用一个 puppetmaster 并在每个客户端的 puppet.conf 中使用一个变量来指定环境,然后在 puppetmaster 中为每个环境指定一个不同的模块路径,并且每个路径都更新到用于该环境的配方存储库的分支环境(例如开发、登台、生产)。
只运行一个 puppetmaster 似乎少了一个基础设施来保持运行,但配置中存在一些额外的复杂性。
这些方法之一或我完全缺少的东西是否有其他优点或缺点?
选项 #1 不会扩展。管理起来会很痛苦。出于这个原因,Puppet 支持环境 :)
让一个 puppetmaster 服务于多个环境,每个环境都有自己的
manifest
指令modulepath
。这是很多人使用的一种非常常见的方法。还要记住:puppetmasterd.conf
和puppet.conf
配置文件。puppetd
,您还可以使用该--environment
参数。您可以使用 --envirtment 从命令行调用 puppetd。但是,如果您想将许多服务器从一个 Env 移动到另一个 Env,那么管理起来可能会很痛苦。
foreman项目充当“外部节点”界面,并允许您从 Web 前端将环境分配给主机/主机组。然后,您可以为不同的主机设置不同的模块路径。您甚至可以从界面更改节点的环境,让您从 Dev->Prod 移动模块路径,或者您想要的任何方式。
我认为你应该看看puppet tags
使用 puppet 环境有几个缺点:
在我工作的一家公司中,我们将使用 2 台 puppetmaster 服务器——一台用于生产,一台用于其他环境。
为了便于管理多个 puppetmasters 上的 puppet 模块,您可以将模块保存在 git 等 VCS 中,并通过 capistrano 等将它们的新版本部署到 puppetmasters。
如果您需要多个环境而不是对您的 puppet 模块进行版本控制,而是根据环境(不同的变量、节点类等)向不同的节点提供不同的数据,那么还有一些选项: * 从基本“环境”继承不同环境的节点节点 * 通过 ENC(Puppet Dashboard,Foreman)为每个节点提供每个环境的参数和类集,您可以在其中为每个环境创建一个包含所需参数集的组,并将您的节点添加到其中。* 创建一个自定义事实或自定义函数返回您的环境(基于本地文件/AWS 标签/数据库查询/其他),并使用该事实在您的清单中使用条件/extlookup/hiera 提供不同的数据。