本节书摘来自异步社区《Puppet实战手册》一书中的第1章,第1.5节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.5 创建去中心化Puppet架构
有些系统分散管理时会工作得更好。
使用Puppet最常见的方法就是运行一台Puppet Master服务器,Puppet客户端连接到Puppet Master并接收各自的配置清单。然而,Puppet Master并不是必需的,可以直接在配置清单文件上运行puppet apply命令来应用变更。
ubuntu@cookbook:~/puppet$ puppet apply manifests/site.pp
Notice: Finished catalog run in 0.08 seconds
换句话说,如果能安排适当的清单文件分发至客户端上,就可以使用Puppet直接执行而不需要通过Puppet Master来控制。这将消除由于仅有一台主服务器导致的性能瓶颈,也消除了单点故障。同时,这也避免了添加新的客户端时颁发SSL签名证书的问题。
有很多方法可以将清单文件分发至客户端,但是Git(或其他版本控制系统)为此做了大量工作。用户可以在本地副本中编辑清单,然后提交至Git,并推送至中心仓库。在那里,它们会自动分发至客户端。
准备工作
如果Puppet配置清单没有存放在Git中,参考上面步骤将清单加入Git中管理。
此时,需要第二台机器来检出Puppet仓库的副本。如果使用EC2实例,则创建另一个实例,并给它取个主机名,如cookbook2。
操作步骤
具体步骤如下。
1. 在新机器上检出GitHub仓库。
ubuntu@cookbook2:~$ git clone
git@github.com:bitfield/cookbook.git puppet
Cloning into 'puppet'...
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 8 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (8/8), done.
2. 参照下面的内容,修改manifests/nodes.pp文件:
node 'cookbook', 'cookbook2' {
file { '/tmp/hello':
content => "Hello, world\n",
}
}
3. 运行以下命令:
ubuntu@cookbook2:~/puppet$ sudo puppet apply manifests/site.pp
Notice: /Stage[main]//Node[cookbook2]/File[/tmp/hello]/ensure:
defined content as '{md5}a7966bf58e23583c9a5a4059383ff850'
Notice: Finished catalog run in 0.05 seconds
工作原理
新机器上已经创建了一个Puppet仓库的副本。
ubuntu@cookbook2:~$ git clone git@github.com:bitfield/cookbook.git puppet
在运行Puppet前,必须首先在配置清单中针对cookboo2创建节点声明。
node 'cookbook', 'cookbook2' {
...
}
现在应用这些配置清单,让它们生效。
ubuntu@cookbook2:~/puppet$ sudo puppet apply manifests/site.pp
Puppet找到cookbook2的节点声明,并应用与之前用于cookbook相同的配置清单:
Notice: /Stage[main]//Node[cookbook2]/File[/tmp/hello]/ensure:
defined content as '{md5}a7966bf58e23583c9a5a4059383ff850'
更多参考
此处已经将Puppet基础设施从一台机器扩展到了另外一台,现在可以将其扩展到任意多台。只需要检出Git仓库,并执行puppet apply命令。
这是一个非常好的方法,不需要复杂的配置,也不用多余的机器作为Puppet Master,就可以将现在的机器交由Puppet管理。笔者的很多客户都已经使用了这种基于Git的基础设施,它简单、易于扩展和维护。
需要考虑的一个改进就是要让每台机器自动从GitHub拉取修改并使用Puppet应用这些修改。然后要做的就只是推送变更至GitHub,变更的内容就会在某一个时间部署至所有Puppet管理的机器。接下来,读者将在下一节看到如何做到这一点。