天天看点

《Puppet实战手册》——1.7 使用cron运行Puppet

本节书摘来自异步社区《puppet实战手册》一书中的第1章,第1.7节,作者:【英】john arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

通过已有的配置,已经可以做很多事情,包括在团队中管理puppet清单,通过github同步变更,使用papply脚本在机器上手动应用配置变更。

然而,截至目前还是需要手动登录到每台机器上更新git仓库并重新运行puppet。如果每台机器可以自动更新并应用变更,就更方便了。这样,只需要将修改推送至仓库,所有机器就会在一定时间范围内自动完成配置的变更。

做到这一点最简单的方法就是使用cron作业,定期从仓库更新配置文件并在有变更时运行puppet。

准备工作

首先,需要在前面的1.4节和1.5节中设置的git仓库以及1.6节中的papply脚本。

然后,还需要创建一个ssh秘钥,每台机器使用它进行认证,从git仓库拉取变更。创建ssh秘钥可参考如下步骤。

1. 运行以下命令,创建密钥文件。

2. 打印ubuntu.pub文件的内容。

复制上面的内容并将其作为部署密钥添加至github仓库(参考github关于这部分内容的操作指南)。这样,会授权这个密钥可以从github中克隆puppet仓库。

操作步骤

具体步骤如下。

1. 移动公钥文件到puppet模块。

2. 不要将私钥放进puppet仓库(需要通过其他通道来分发私钥到那些需要检出仓库的机器中)。

3. 参照下面的内容,创建modules/puppet/files/pull-updates.sh文件。

4. 参照下面的内容,修改modules/puppet/manifests/init.pp文件。

5. 运行puppet。

6. 测试新的ssh密钥是否已经正确获得github授权。

7. 检查pull-updates脚本是否正常工作。

工作原理

到现在为止,已经实现了从被管理的服务器上通过ssh认证访问github(使用ssh代理转发),但是如果不登录到服务器并执行相关命令,服务器就不能自动拉取更新。所以,此处创建了一个新的ssh密钥对,将公钥作为部署密钥添加到github,使拥有密钥文件的服务器可以访问仓库。

将这个私钥作为ubuntu用户默认的ssh密钥。

这使得用户ubuntu可以在puppet目录运行git pull命令。此外,还增加了pull-updates脚本来执行这条命令,并在有任何配置更改时运行puppet。

将这个脚本部署到所有的puppet主机上:

最后,创建一个定期运行pull-updates的cron作业(每10分钟一次,但是可以根据自己的需求去修改)。

更多参考

恭喜,你现在拥有了一个全自动化的puppet基础设施!只要在一台新机器上检出仓库代码并应用了配置清单,这台机器就会自动的定期拉取新的变化并应用这些变更。

举一个例子,如果需要在所有机器上添加一个新用户,需要做的就是将用户添加到配置清单的工作副本中,提交并推送到github。等待10分钟,它就会自动应用到所有puppet机器上。

这是非常方便的,但是,有时人们希望能够将变更立刻应用到特定的机器,而无须等待cron作业的执行。此时,可以使用rake工作实现这个功能。在下一节中,本书将介绍如何来实现这些。

继续阅读