配置自动化和集中管理与Puppet Ubuntu
作者:肯特布雷德
基于http://reductivelabs.com/trac/puppet/wiki/InstallationGuide
介绍
这是一个关于如何在一台机器上安装Puppet(Puppetmaster)的服务器组件的一步一步的教程,另一个是Puppet客户端(puppetd)。 然后,我们进行一个简单的测试,以确保Puppet正常工作。
如果您不熟悉Puppet,它是一种配置自动化工具,可让您集中管理网络上运行的各种* nix风格。 Puppet支持您的系统的重要方面的中央管理,例如:文件,软件包,用户,服务,cron,mount等。有关更完整的说明,请访问还原实验室 。
背景
这个安装是在Ubuntu 6.06 LTS服务器上执行的,但应该适用于大多数Debian / Ubuntu的风格,稍作修改。
在撰写本文时,现在可以在Feisty中找到Ubuntu的Puppet包。 在Unstable中查找当前的Debian软件包。
在本教程中,我们将使用example.com作为我们的域名。 服务器将被给予主机名“Puppet”和IP 192.168.10.1。 客户端主机名为“pclient”,IP为192.168.10.2。
网络要求
如果您的网络上未设置DNS,请验证服务器和客户端上的主机文件是否包含两台计算机的条目。 对于这种情况,以下条目将添加到/ etc / hosts。 使用您喜欢的文本编辑器添加反映您自己的网络设置的行,类似于下面的行。
192.168.10.1 puppet.example.com puppet 192.168.10.2 pclient.example.com pclient
服务器端口8140运行。确保两台机器之间没有防火墙阻塞端口8140。
Apt设置
我们需要的许多包都在Universe存储库中。 如果以下行在“sources.list”中未被取消注释,请使用您喜欢的文本编辑器,在服务器上找到并取消注释它们。
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe # deb http://security.ubuntu.com/ubuntu dapper-security universe
由于我们使用的是早期版本的Ubuntu,可以配置apt来轻松地从Feisty抓取Puppet包。 根据需要调整资源以反映您的操作系统版本。 如果您不熟悉本节中的步骤,请参阅Apt-Howto中的3.10部分。
打开“sources.list”并添加以下两行。
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe deb http://security.ubuntu.com/ubuntu feisty-security universe
更新源列表。
puppet:# apt-get update
**执行与上述“pclient”相同的步骤。 **
接下来,让我们配置apt从Feisty中提取我们Puppet设置所需的软件包,但允许所有其他软件包来自Dapper存储库。 将以下行添加到“首选项”文件。
在服务器上:
puppet:# vim /etc/apt/preferences
Package: * Pin: release a=dapper Pin-Priority: 700 Package: facter Pin: release a=feisty Pin-Priority: 500 Package: puppet Pin: release a=feisty Pin-Priority: 500 Package: puppetmaster Pin: release a=feisty Pin-Priority: 500
在客户端上
pclient:# vim /etc/apt/preferences
Package: * Pin: release a=dapper Pin-Priority: 700 Package: facter Pin: release a=feisty Pin-Priority: 500 Package: puppet Pin: release a=feisty Pin-Priority: 500
3.软件要求
为了准备我们的Puppet安装,我们需要在服务器和客户端上安装几个库和软件包。 在撰写本文时,如果此集合没有首先安装,则会依次循环。
puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
4.客户端安装
从Feisty安装Puppet和细菌。
pclient:# apt-get -t feisty install facter puppet
5.服务器安装
安装Puppet,木匠和Puppet master。 后安装脚本将尝试启动服务器并出现错误提示。 别担心 我们将在第6步中创建清单。
puppet:# apt-get -t feisty install facter puppet puppetmaster
.....
Starting puppet configuration management tool master server
Manifest /etc/puppet/manifests/site.pp must exist [fail]
服务器准备
服务器(puppetmasterd)需要一个清单才能运行。 让我们写一个清单,告诉Puppet在客户端上创建一个文件“/ tmp / testfile”。
puppet:# vim /etc/puppet/manifests/site.pp
# Create "/tmp/testfile" if it doesn't exist. class test_class { file { "/tmp/testfile": ensure => present, mode => 644, owner => root, group => root } } # tell puppet on which client to run the class node pclient { include test_class }
现在启动Puppet服务器。
puppet:# /etc/init.d/puppetmaster start
客户准备
默认情况下,客户端将使用主机名“puppet”连接到网络上的服务器。 如果您的服务器的主机名不是“puppet”,则需要将伪指令插入到puppetd配置文件“puppetd.conf”中。 即使我们不需要在这种情况下,我们将这样做为了演示目的。
使用您喜欢的文本编辑器打开“/etc/puppet/puppetd.conf”,并将“server = puppet.example.com”添加到现有文件中,如下例所示。
pclient:# vim /etc/puppet/puppetd.conf
[puppetd] server = puppet.example.com # Make sure all log messages are sent to the right directory # This directory must be writable by the puppet user logdir=/var/log/puppet vardir=/var/lib/puppet rundir=/var/run
7.签名密钥
为了使两个系统能够安全地通信,我们需要创建签名的SSL证书。 您应该同时登录到服务器和客户端机器进行下一步。
在客户端运行。
pclient:# puppetd --server puppet.example.com --waitforcert 60 --test
您应该看到以下消息。
err: No certificate; running with reduced functionality.
info: Creating a new certificate request for pclient.example.con
info: Requesting certificate
warning: peer certificate won't be verified in this SSL session
notice: Did not receive certificate
接下来,在服务器端运行以下命令来验证客户端正在等待证书签名。
puppet:# puppetca --list
pclient.example.con
然后签署证书。
puppet:# puppetca --sign pclient.example.com
Signed pclient.example.com
如果一切顺利,您应该在pclient上看到这个消息。
info: Requesting certificate
warning: peer certificate won't be verified in this SSL session
notice: Ignoring --listen on onetime run
info: Caching configuration at /etc/puppet/localconfig.yaml
notice: Starting configuration run
notice: //pclient/test_class/File[/tmp/testfile]/ensure: created
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished configuration run in 0.11 seconds
8.测试
检查并确保文件已创建。
pclient:# ls -l /tmp/testfile
-rw-r--r-- 1 root root 0 2007-02-18 18:28 /tmp/testfile
对于测试,可以编辑清单并指示Puppet修改文件模式。 更改行,“mode => 644”,“to”mode => 600,“
puppet:# vim /etc/puppet/manifests/site.pp
# Create "/tmp/testfile" if it doesn't exist. class test_class { file { "/tmp/testfile": ensure => present, mode => 600, owner => root, group => root } } # tell puppet on which client to run the class node pclient { include test_class }
在客户端运行puppetd在详细模式(-v),只有一次(-o)。
pclient:# puppetd -v -o
您应该看到以下消息,其中指出/ tmp / testfile从模式644更改为600。
notice: Ignoring --listen on onetime run
info: Config is up to date
notice: Starting configuration run
notice: //pclient/test_class/File[/tmp/testfile]/mode: mode changed '644' to '600'
notice: Finished configuration run in 0.26 seconds
验证工作是否正确完成。
pclient:# ls -l /tmp/testfile
-rw------- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9.结论
恭喜,测试完成,您有一个工作的Puppet设置。 您的下一步是创建一个功能清单,测试一些,然后在客户端启动puppetd守护进程。 默认情况下,Puppetd会每30分钟自动轮询服务器。
pclient:# /etc/init.d/puppet start
有关更多信息,请访问还原实验室 。 对于友好的知识帮助,请加入Puppet用户,或者通过#puppet在irc.freenode.net下载。