![我们可以使用像 puppet 这样的工具获得类似 git 的功能吗?](https://linux22.com/image/621101/%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%83%8F%20puppet%20%E8%BF%99%E6%A0%B7%E7%9A%84%E5%B7%A5%E5%85%B7%E8%8E%B7%E5%BE%97%E7%B1%BB%E4%BC%BC%20git%20%E7%9A%84%E5%8A%9F%E8%83%BD%E5%90%97%EF%BC%9F.png)
我正在考虑一种方便的方法来跟踪我的 vps 配置并一键(或多或少一次)部署它们。
我一直在阅读和研究不同的配置部署工具,其中 puppet 似乎是最受欢迎的,但最终还是回到了原点。
尽管 Puppet 提供的功能很吸引我而且我可能会使用它,但我似乎找不到轻松完成简单事情的方法。
我必须维护和更改 /etc 中的配置文件,而我真正想要摆脱的是 ssh -> vim 或 nano,或 sftp......我希望在我的开发机器上拥有整个文件夹,并享受 sublime text 的强大功能和速度来编辑它们,然后执行 git commit、git push,-> 重新启动某些东西,然后 hopla,我们就更新了。
在木偶范式中,它看起来更像是:
file {'/tmp/test1':
ensure => file,
content => "Hi.\n",
}
最初担心 git 并不是非常适合这种部署的工具(并且不完全确定所涉及的所有风险),这促使我阅读了 puppet/chef,...
现在您如何解决这个问题,是否有生产系统可以使用 git/git-deploy/etckeeper 来离线编辑您的 /etc 配置?
答案1
诸如此类的工具puppet
旨在使配置处于正确状态。诸如此类的工具git
旨在跟踪文件的版本。这两项任务都被称为配置管理,这可能会引起混淆。在下文中,我将使用版本控制来指代诸如此类的工具git
,使用声明式配置管理来指代诸如此类的工具puppet
。我假设您不需要跟踪配置管理工具安装了哪个版本的组件。这在重现错误时很重要。配置管理工具可以跟踪版本,并且可以使用版本控制工具来存储清单。
声明式配置管理允许您指定所需的配置以及如何实现该配置。定义所需的配置并启动该工具后,它将采取指定的操作来安装和配置所需的组件。建议您使用版本控制工具来维护此配置。
编辑:运行自动配置时,重要的是以不提示配置值的模式运行包管理器。(Ubuntu/Debian 可以使用预种子文件来覆盖默认配置值。)如果包管理器更新中的文件,您将需要评估更改,并且可能需要调整声明性配置。(Ubuntu/Debian 将通过在文件名中添加类似或 的/etc
扩展名来跟踪替换。)我在升级 O/S 版本后扫描更改,这通常会产生许多配置文件更改。.dpkg-old
.dpkg-new
有多种方法可用于更新 中的配置文件/etc
。我使用过三种方法: - 使用平台的配置工具更新文件(Ubuntu/Debian 对此有预配置机制); - 使用声明式配置管理工具编辑配置文件;以及 - 从中央存储库复制配置文件。
每个系统都会有少量特定于主机的配置文件。这些文件包括与主机命名、静态网络配置等相关的文件。如果您通过编辑文件来更新文件,则可以添加声明式配置管理工具无法纠正的本地更改。
版本控制工具会跟踪文件内容的变化。通常,它们需要手动提交操作,因此管理的文件可能与受控版本明显不同步。跟踪变化需要纪律。
我用来确保原子更改的方法是使用版本控制工具为我的声明性配置管理工具提供配置。 - 我在自己的工作目录中编辑配置。更改完成后,我将验证更改并提交它们。 - 主服务器通过更新其配置开始其进程。(较大的安装可能有两个或更多分支和主服务器,允许将更改推送到一小组服务器进行测试。) - 客户端从主服务器提取其配置更改。 - 声明性配置管理工具将正在运行的配置与其配置进行比较并应用任何所需的更改。