注意:有很多理论问题。
最近,我正在阅读关于Puppet(以及类似的系统)的内容,正如我所相信的,这可以使我的工作变得更加轻松。 但是,我试着 – 但不幸的是 – 不能理解我能“傀儡”的东西。 我可以想象“云”或HA群集,在更多的服务器上,相同的configuration在哪里。 但是工作站呢? 我有一个电脑(kvm的centos),一个笔记本(fedora)和个人服务器,可以(或应该)puppetized? 什么是(dis)优势? 或者在我们公司,我们有数百个服务器(主要是centos),但是每个服务器都有一点点不同。 不能决定是否有更好的configuration在一个地方(Dis)优势? 我会很高兴你的意见或与这个主题的链接。
你可以在什么程度上伪装整个环境取决于几个variables:
对所有可能被木偶化的东西进行木偶化是绝对有可能的,但是到达那里需要正确的文化,并且每个人都能接触到可以触摸木偶的设备。 有些设备基本上难以pipe理,比如工作站,而puppet比configurationpipe理引擎更适合作为分级工具。
当你pipe理大量虚拟机时,Puppet是非常棒的。 总赢,而不是很多努力到达那里。
在另一方面,你有我在上一份工作,这是200多台服务器提供130服务,只有一小部分他们这样做与多台机器。 绝对有公司(和大学)有这样的事情,但这是一个很大的努力,需要大量的买入。 它要求您的新机器部署过程的第一步不是 “安装操作系统”,而是“创build清单”。
最终,您需要在所有IT人员中解决效率文化问题。

任何在所有系统(或其中的一个子系统)中相当相似的东西,或者你可以根据一个事实基于一个事实,你可以脱身的是一个公平的游戏。
事情是真正独特的,你可能不应该打扰,应该只是从一个文件桶服务的configuration。
这两个类别中的任何一个都是一个我们不能亲密地了解自己的环境而做出的决定,所以这是你要搞清楚的。
我想其他人已经报道了为什么,所以我会采取措施如何。 我想通过理解某人可能如何使用Puppet来做你想做的事情,它会使决定更清晰。
先做基本案例
你的Apache的Puppet模块在默认情况下不应该做太多的事情。 安装Apache,将其configuration为最低标准,然后启动服务。 使这个工作在你需要支持的所有发行版上。
其次增加灵活性
我们需要添加虚拟主机。 你会得到一个系统,可以根据你的需要放置文件或从一组conf.d或vhosts.d /目录中删除它们。 与启用或configuration模块同样的事情。
使用angular色或主机组类将您的构build块绑定在一起
我认为使用Puppet的最好方法是确保它是可加性的。 使用上面的例子,我们应该有一个模块
我们应该处理这个是一个angular色或hostgroup类,而不是将我们的默认Apache模块超载到特定的主机或组。
class role::web_cust1 { include apache apache::vhost {'www.domain.com': } apache::vhost {'www.domain2.com': priority => '99', } include php include php-fpm include mysql }
再次添加。
把特殊的案件在Hiera
我非常喜欢让木偶的Hiera,把它看作木偶的数据库,存储特殊的位。 如果某个主机或主机组需要特殊设置,首先将默认模式放入模块中,这样普通用户就不需要了解它。 然后为这些特殊主机或主机组插入数据,以便Hiera可以根据需要使用它传递给Puppet。
我的用例是侦听端口。 有些服务器在它们前面有一个清漆或haproxy。 默认情况下,Puppet模块的Apache使用端口80,但是如果Hiera发现数据,它将覆盖默认值。
我目前正在从木偶合理化的系统到木偶化的过渡,并深信长期以来,木偶化是一个更好的方法。
如果你的版本控制你的Puppet清单(我们都这样做,对),你可以获得基础设施版本控制的所有好处。 你的团队成为运营工程师。 这对于同类养牛场这种特殊的一次性系统同样重要。 你会得到一个日志,logging谁改变了什么,什么时候改变了,改变了什么,以及回滚改变的能力。
就我个人而言,我也发现,迫使自己通过木偶做出每一个改变,让我更仔细地思考这个变化。 在写清单时,我比每次通常在命令行上都更加注意每个变化。
你的木偶模块也会变得更好。 你有多个Nginx模块吗? 也许这意味着你的Nginx模块不是那么好,你需要使它足够灵活来处理你所有的特殊需求。 至less将相似性抽象成一个核心的Nginx模块,你扩展为“自定义”模块。
此外,当灾难发生时,您是否有信心将所有特殊需求服务器恢复到当前状态(关于configuration)? 如果每次需要将工厂Ubuntu服务器更改为您的内部维基百科都是木马化的,那么您可以轻松地重build维基的当前状态,包括Bob在内的昨天的Tomcat内存调整。
最后,这可能很难。 如果你不花时间做正确的事,pipe理大量不同的服务器可能会导致一些黑客傀儡代码。 如果您不使用Puppet Enterprise,请考虑使用hiera和/或ENC(例如Foreman)来帮助将您的数据从您的清单中分离出来。 每天都有别的事情发生。 有一个同事开车,而你解释这是如何工作在木偶。 每个变化都会变得更容易。