第2章 Puppet安装与配置
第1章介绍了Puppet是什么,以及Puppet的作用及优势。通过学习Puppet组织结构、工作原理、工作流程、数据流走向逐步掌握Puppet的工作原理。从本章起我们将开始接触Puppet。
首先介绍Puppet对各操作系统平台的支持,以及Ruby语言的支持,并简述Puppet的安装步骤。其次讲解Puppet在主流Linux操作系统平台的安装方法,在被称为“最完美操作系统”的MAC平台上的安装。详细详解Puppet在主流Linux、MAC平台上的使用方法,并创建File资源来应用实践。以及在Windows平台的安装、使用方法、支持。最后介绍如何升级Puppet,升级时的注意事项。
2.1 Puppet对各系统平台的支持
我们先来看下Puppet主流版本(2.6、2.7、3.0)对各操作系统平台的支持。
Puppet主流版本支持的Linux版本如下:
(1)Linux
□ Red Hat Enterprise Linux 4及更高版本
□ CentOS,version 4及更高版本
□ Scientific Linux 4及更高版本
□ Oracle Linux 4及更高版本
□ Debian,version 5(Lenny)及更高版本
□ Ubuntu,version 8.04LTS及更高版本
□ Fedora 15及更高版本
□ SUSE Linux Enterprise Server 11及更高版本
□ Gentoo Linux
□ Mandriva Corporate Server 4
□ ArchLinux
(2)BSD
Puppet主流版本支持的BSD版本如下:
□ FreeBSD 4.7及更高版本
□ OpenBSD 4.1及更高版本
(3)Other Unix
Puppet主流版本支持的Other UNIX版本如下:
□ Mac OS X 10.5及更高版本(Puppet 2.7以前的版本只支持Mac OS X 10.4)
□ Oracle Solaris 10及更高版本
□ AIX 5.3及更高版本
□ HP-UX
(4)Windows
Puppet主流版本支持的Windows版本如下:
□ Windows Server 2003and 2008(Puppet 2.7.6及更高版本)
□ Windows 7(Puppet 2.7.6以上更高的版本)
2.2 Puppet对Ruby的支持
在安装Puppet前,首先要先确认已经正确安装了Ruby。Puppet可以运行在Ruby不同版本之上,并且已经支持Ruby最新版1.9。介于Puppet对Ruby1.8.7的完美支持,建议读者安装Ruby 1.8.7版本。有关Puppet与Ruby的版本对应关系详细如表2-1所示。
表2-1 Puppet与Ruby版本对应关系
2.3 Puppet的安装步骤
Puppet的安装与使用可以细分8步进行,详细步骤如下:
1)安装Ruby、Ruby-libs和Ruby-shadow,用于进行用户和组管理。
2)安装Facter、Puppet和Puppet-server。
3)设置主机名、域名解析或指定hosts。
4)采用命令/etc/init.d/puppetmaster start启动server或者采用不以进程方式启动server。命令为puppet master --no-daemonize --verbose,通过此方式可以查看到相关日志与输出。
5)客户端配置文件指定Server端,运行puppet agent –test命令或直接运行puppet agent --test --server server.domain.com与master交互完成签名认证。
6)在Server上配置节点信息,告诉客户端要做什么。
7)检查语法是否正确(通常采用puppet parser validate test.pp命令进行语法检查)。
8)客户端再次运行配置(puppet agent --test)。
根据以上步骤我们可以看到,安装Puppet其实非常简单,较为复杂的是配置过程。通过第1章的学习,我们掌握了Puppet的原理,再结合以上8步安装,安装Puppet将变得非常容易。
接下来我们先学习Puppet在各操作系统平台下的安装,最后再学习如何配置。
提示
Facter(或者称之为"fact")收集关于主机的信息,来帮助定制Puppet配置。
2.4 在Linux下安装
在Linux下安装Puppet是非常容易的事,特别是在Centos 6基础上,直接配置官方源即可完成所有包的安装。安装的时候会自动安装Ruby相关依赖及其相关组件。
对于各平台系统,建议使用官方包管理方式进行安装:
1)FreeBSD、OpenBSD可以使用ports命令进行安装。
2)Gentoo使用Portage命令进行安装。
3)对于SUSE,在http://software.opensuse.org/122/en可以搜索到软件包。
4)Solaris使用Blastwave命令进行安装。
接下来本节主要讲解Puppet在RHEL、Centos、Ubuntu&Debian、Fedora、Windows系统上采用包管理器、源码及Gems工具的安装与使用方法。在编写本书的时候,Puppet的最新版本是3.0.x。Puppet 3并不完全兼容2.x以下的低版本,而且比Puppet 2性能更好,在编译catalog时效率更高。对于首次接触Puppet的读者来说,推荐使用Puppet 3。如果之前一直在使用Puppet,而现在正犹豫是否要升级,那就大可不必担心,尽快尝试一下Puppet 3吧。
说明
Puppet 3为Puppet 3.x.x版本简写。Puppet 2为Puppet 2.x.x版本简写。为了阅读方便,本书统称Puppet 3.xx和Puppet 3.0.x为Puppet 3。
提示
Puppet 3的新特征参考1.1.3节。升级Puppet时需要保持Master版本高于Agent版本,升级可参考2.8节。
2.4.1 包管理器方式安装
用Linux发行版的包管理器来安装Puppet最为简单,而且会自动处理好所有依赖。这里安装的包也是最新版本的3.0,如果需要安装较早的版本,就需要在安装时指定。目前推荐读者采用Linux发行版的包管理器进行安装。
(1)在RHEL 5和RHEL 6、Centos 5和Centos 6上安装Puppet
使用EPEL源(http://fedoraproject.org/wiki/EPEL)或PuppetLabs源(http://yum.puppetlabs.com/)直接安装。注意选择自己系统版本的Yum源。
提示
Yum(全称为Yellow dog Updater,Modified)是一个在Fedora、RedHat、SUSE及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并进行安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地多次下载和安装。
下面介绍具体的安装过程。
在安装之前需要确认自己的Ruby版本。如果系统并没有安装Ruby,可以采用如下方法进行安装:
$ sudo yum –y install ruby ruby-libs ruby-shadow #如果系统默认Yum源里没有Ruby及相关软件包,可以配置EPEL源进行安装
提示
CentOS 5.x中自带的Ruby版本是1.8.5,而在Puppet 3.0发布之后,官方源中增加了CentOS 5的Ruby 1.8.7的RPM包,并且不再支持1.8.5。所以建议在安装官方Puppet源后再安装或升级Ruby一次,或者直接采用官方Puppet源进行安装。
运行如下命令来检查Ruby的安装:
$ ruby –v ruby 1.8.7
1)根据操作系统版本配置Yum源,我们这边使用的操作系统为Centos 6x64,因此选择puppetlabs-release-6-6软件包。配置方法如下:
$sudo rpm –Uvh http://yum.puppetlabs.com/el/6Server/products/x86 64/puppetlabs-release-6-6.noarch.rpm $ sudo yum clean all
提示
Yum源的官方地址为http://yum.puppetlabs.com。Yum支持RedHat、CentOS、Fedora操作系统
2)在服务器端安装Puppet。运行如下代码会自动匹配安装Facter等相关依赖包。包括Facter。
$sudo yum install puppet-server
运行如下命令来检查Puppet的安装:
$ puppet -V 3.0.1 $ facter -v 2.0.0-rc4
3)在客户端安装Puppet。同理运行如下代码会自动匹配安装相关依赖包。包括Facter。
$sudo yum install puppet
到此在Linux系统下的Puppet安装完成。配置方法将在本章第2.7小节讲解。接下来我们看下Puppet在Fedora 15和Fedora 16的安装方法。
(2)在Fedora上安装Puppet
在Fedora上安装Puppet也非常简单,和Centos方法一样,配置好PuppetLabs官方源,采用Yum安装。注意选择自己系统版本的Yum软件包进行配置。本例采用Fedora 17。下面介绍具体的安装步骤。
1)配置Yum源,配置方法如下:
$ sudo rpm –Uvh http://yum.puppetlabs.com/fedora/f17/products/x86 64/puppetlabs-release-17-6.noarch.rpm $ sudo yum clean all
2)在服务器端安装,安装方法如下:
$sudo yum install puppet-server
3)在客户端安装,安装方法如下:
$sudo yum install puppet
安装完成后检查安装状态命令与以上一样(采用-v查看,注意puppet后是大写V)。
(3)在Debian和Ubuntu下安装Puppet
在Debian和Ubuntu下安装Puppet的方法也非常简单,只需要配置好仓库就可以了。
提示
apt-get是一条Linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。目前主要应用于Debian和Uubuntu。
注意先安装Ruby。我们也可以从PuppetLabs源(http://apt.puppetlabs.com/)来配置和安装。
1)配置puppetlabs仓库,配置方法如下:
$ sudo echo -e "deb http://apt.puppetlabs.com/ lucid main\ndeb-src http://apt.puppetlabs.com/ lucid main" >> /etc/apt/sources.list.d/puppet.list $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 4BD6EC30 $ sudo apt-get update
2)在服务器端安装,安装方法如下:
$ sudo apt-get install puppetmaster
3)在客户端安装,安装方法如下:
$ sudo apt-get install puppet
提示
此方法同样适用于操作系统:Scientific Linux 5和6、Ascendos 5和6
2.4.2 从源代码进行安装
相比以Yum方试安装Puppet,源代码安装显得较为复杂,需要按照相关依赖逐步进行。通常我们需要到相关软件下载页面下载对应平台的版本源代码文件,并逐步进行编译安装。本书以Centos 6安装为例进行讲解。
1)安装Ruby。
建议采用Yum安装好Ruby再进行Puppet源代码安装。当然都采用源代码安装也没有关系。我们首先到Ruby的下载页面(http://www.ruby-lang.org/en/downloads/)选择Ruby软件包,建议选择Ruby 1.8.7版本。
下载ruby-1.8.7-p370.tar.gz软件包,进入相应目录,进行编译安装。安装方法如下:
$ mkdir /opt/puppetlabs $ cd /opt/puppetlabs $ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p370.tar.gz $ tar zxvf ruby-1.8.7-p370.tar.gz $ cd ruby-1.8.7-p370 $ ./configure&& make $ sudo make install
2)安装Facter。
下载最新版本的facter-1.6.13.tar.gz软件包进行安装。安装方法如下:
$ wget http://downloads.puppetlabs.com/facter/facter-1.6.13.tar.gz $ tar -zxf facter-1.6.13.tgz $ cd facter-1.6.13 $ sudo ruby install.rb
3)安装Puppet。
下载最新版本的puppet-3.0.1.tar.gz软件包进行安装。安装方法如下:
$wget http://downloads.puppetlabs.com/puppet/puppet-3.0.1.tar.gz $ gzip -d -c puppet-3.0.1.tgz | tar xf – $ cd puppet-3.0.1 $ sudo ruby install.rb #默认安装在/etc/puppet目录中,如果需要指定安装目录可以使用如下命令 $ sudo ruby install.rb --destdir=/opt/puppet
运行如下命令来检查Ruby及Puppet的安装:
$ ruby –v ruby 1.8.7 $ puppet -V 3.0.1 $ facter -v 1.6.13
2.4.3 从Git版本库进行安装
如果在本地克隆了一个Git项目的版本库,就可以通过版本库的方式获取最新版本的信息。这样在下载不同版本时采用的是增量的方法,每个版本更新可以直接采用git pull命令更新至最新版。也可以选择任意版本进行安装。缺点是打包批量部署时不是非常方便。注意先安装好Ruby。
1)获取版本库到本地。
$ sudo mkdir -p /usr/src $ cd /usr/src $ sudo git clone git://github.com/puppetlabs/facter $ sudo git clone git://github.com/puppetlabs/puppet
提示
如果系统没有安装Git可以通过yum install git命令进行Git安装
2)安装Facter,命令如下:
$ sudo cd facter $ sudo ruby install.rb
3)我们可以通过git tag命令查看Git里的里程碑,并通过git checkout命令选择自己所需要的版本进行安装。本例将选择3.0.1版本进行安装,命令如下:
$ git tag … 2.7.9 3.0.0 3.0.1 3.0.1-rc1 … $ git checkout 3.0.1 HEAD is now at 1d7d7cb... Update PUPPETVERSION for 3.0.1
4)安装Puppet,命令如下:
$ ruby install.rb
2.4.4 通过Gems进行安装
和大部分基于Ruby的程序一样,Puppet和Facter也能通过RubyGems进行安装,前提是先在操作系统上安装Ruby和相应的RubyGems包。在Red Hat、CentOS、Fedora、SUSE/SLES、Debian和Ubuntu上,这个软件包的名字是RubyGems。当这个包安装好后,就能使用gem命令像下面这样来安装Puppet和Facter。默认安装的Puppet版本为3.0。
提示
RubyGems(简称Gems)是一个用于对Rails组件进行打包的Ruby打包系统。它提供一个分发Ruby程序和库的标准格式,还提供一个管理程序包安装的工具。RubyGems的功能类似于Linux下的Yum。有关细节可参考:http://baike.baidu.com/view/663386.htm。
1)安装rubygems,命令如下:
$ sudo wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.24.tgz $ cd rubygems-1.8.24 $ ruby setup.rb
2)安装Puppet,命令如下:
$ sudo gem install puppet
2.5 在Mac OS X下安装与使用
2.5.1 通过二进制发布包进行安装
Mac OS X被认为是操作系统中“高富帅”的象征,是最为人生化的操作系统之一。在Mac系统上工作是一件非常惬意的事。下面我们看看在Mac下如何安装Puppet。
1)下载二进制包。
从官方网站可以下载编译好的dmg二制包进行安装,命令如下:
http://downloads.puppetlabs.com/mac/ $ wget http://downloads.puppetlabs.com/mac/facter-1.6.13.dmg $ wget http://downloads.puppetlabs.com/mac/puppet-3.0.1.dmg
提示
.dmg是Mac磁盘镜像格式的软件发布包。
2)挂载镜像文件。
Mac的.dmg格式软件就是一个磁盘映像,双击即可完成挂载,打开后如图2-1所示。
图2-1 在MAC OS X下打开.dmg格式磁盘映像
3)安装Facter和Puppet。
图2-1显示了两个pkg文件。Puppet-3.0.1.pkg就是Puppet安装程序。分别点击扩展名为.pkg的安装程序,开始安装Facter和Puppet。需要先安装Facter,输入root密码后即可在默认安装程序目录完成安装。两个软件安装完成后效果一样。以Puppet安装为例,效果如图2-2所示。
图2-2 在Mac OS X下成功安装Puppet
2.5.2 从Git版本库进行安装
在Mac下采用Git安装puppet与在Linux下的安装方法一样,这里不再详细介绍,只简单介绍一下安装步骤。
1)创建目录来下载版本文件,命令如下:
$ sudo mkdir -p /opt/puppetlabs $ cd /opt/puppetlabs $ sudo git clone git://github.com/puppetlabs/facter $ sudo git clone git://github.com/puppetlabs/puppet
2)安装Facter,命令如下:
$ cd facter $ sudo ruby install.rb
3)安装Puppet,命令如下:
$ cd puppet $ sudo ruby install.rb
4)确认Puppet版本,命令如下:
$ puppet -V 3.0.1
2.5.3 从Ports仓库进行安装
在Mac下面除了可以用dmg、pkg来安装软件外,还可以利用MacPorts比较方便地安装其他应用程序,跟BSD中的Ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装软件。
MacPorts的官方网址:http://www.macports.org。
从MacPorts官方网址下载对应Mac系统的软件包进行安装。
1)在Mac OS X Lion系统下安装MacPorts,命令如下:
https://distfiles.macports.org/MacPorts/MacPorts-2.1.2-10.8-MountainLion.pkg #安装过程省略。双击即可完成安装
2)使用port命令安装Puppet。查找ports仓库源中Puppet的安装包,使用port命令进行在线安装。如果查询到多个版本的Puppet,必须指定版本才可以。这里安装Puppet时只支持2.7.6版本。
$ port search puppet #用于查找ports仓库提供安装的Puppet版本 Warning: port definitions are more than two weeks old, consider using selfupdate puppet @2.7.6 (sysutils) Puppet is a configuration management solution. $ sudo port install puppet #进行安装操作
至此,我们已经讲完了Puppet在主流Linux下的安装方法,但并没有讲到如何去配置使用Puppet。我们将在2.6节集中讲解,因此它们的配置与使用方法是相同的。
2.6 配置Puppet
在前2.4节和2.5节中我们讲到了Puppet在各Linux操作系统和Mac操作系统上的安装,接下来我们将讲如何配置Puppet,并且配置一个简单的File资源进行测试。默认安装好的Puppet可以直接启动使用。
1)服务的启用方法如下:
$ /etc/init.d/puppetmaster #服务端 {start|stop|status|restart|reload|force-reload|condrestart|genconfig} $ /etc/init.d/puppet #客户端 {start|stop|status|restart|reload|force-reload|condrestart|once|genconfig}
提示
如果安装完Puppet后没有相应的配置文件,需要参考1.7小节创建核心配置文件。
2)设置主机名和指定hosts。分别向Puppet-Master和Puppet-Agent添加如下配置文件:
#Master $ sudo hostname agent.domain.com #Agent $ sudo hostname puppet.domain.com #两端分别添加 $ sudo vim /etc/hosts 192.168.1.22 agent.domain.com 192.168.1.2 puppet.domain.com
提示
可以采用DNS来管理主机信息,笔者将在第8章详细讲解主机管理。
3)配置防火墙。如果Puppet-Master开启了防火墙,需要做如下配置:
#Puppet 会监听8140端口,因此我们需要开放8140端口 iptables -A INPUT -p tcp --dport 8140 -j ACCEPT or iptables -A INPUT -p tcp –s 10.10.0.0/24 --dport 8140 -j ACCEPT
4)配置主机配置文件。
修改site.pp增加输出文件配置,在这里我们定义了一个File资源。
$ sudo vim /etc/puppet/manifests/site.pp node default { file { "/tmp/puppettest1.txt": content => "Hello,First Puppet test"; } }
5)客户端发起验证,命令如下:
$ puppet agent --server puppet.domain.com --test Info: Creating a new SSL key for agent.domain.com Info: Creating a new SSL certificate request for agent.domain.com Info: Certificate Request fingerprint (SHA256): 78:1D:CF:9E:F2:37:6C:33:C0:13:52:7C:C9:25:ED:0D:49:14:09:94:8C:9D:6A:62:A8:AB:9D:23:9B:0A:14:8C Exiting; no certificate found and waitforcert is disabled
在上面的代码中我们使用了两个参数来运行Puppet agent,第一个参数--server指定了需要连接的Puppet master的名字或地址。
提示
如果不使用--server参数指定Puppet master服务器,Puppet Agent会默认寻找一个名为"puppet"的主机,所以需要为Puppet master创建一个别名(CNAME)。
客户端必须要能够解析需要连接到的主机名。这就是为什么我们要在步骤2)时配置主机名并指定hosts的原因。如果我们没有指--server参数,也能在客户端的配置文件/etc/puppet/puppet.conf的main段指定这一参数,具体如下:
[main] server=puppet.example.com
第二个参数--test使Puppet客户端运行时只是测试模式。如果想在前台输出日志到标准输出,可以使用参数--no-daemonize。在默认情况下,Puppet客户端是以守护进程的方式运行的。如果想在客户端输出详细的日志,可以使用参数--verbose。如果认为还不够,再加上--debug参数就能提供更加详细的输出,这在解决问题的时候非常有用。
在第5步中可以看到我们发起的连接的输出。Agent发起了一个证书验证请求并且使用一个私钥来加密连接。Puppet使用SSL证书来验证Master和Agent之间的连接。Agent向Master发出证书验证请求,然后等待Master签名并返回证书。
现在Agent依然在运行并等待已被签名的证书。在证书到达或退出之前,Agent会持续每两分钟检查一次是否存在被签名的证书。
提示
可以使用--waitforcert参数改变Puppet agent的等待时间。可以按秒指定,如果指定为0,则表示不等待证书(在这种情况下Agent会自动退出)。
6)服务端完成验证。为了完成连接并对Agent进行验证,我们需要对Agent发送到Master的证书进行签名,可以通过使用Master上的puppet cert命令(--list参数)查看等待被签名的证书,使用sign参数对等待被签名的证书进行行签名。如果请求验证主机比较多可以使用--all参数给所有主机签署认证。
$ puppet cert --list agent.domain.com $ puppet cert sign agent.domain.com Signed certificate request for agent.domain.com Removing file Puppet::SSL::CertificateRequest agent.domain.com at '/var/lib/puppet/ssl/ca/requests/agent.domain.com.pem'
7)客户端再次运行配置。
我们已经通过步骤4)为agent.domain.com主机配置了一个File资源。我们还可以再次运行puppet agent命令配置File资源,代码如下代码:
$ sudo puppet agent --server puppet.domain.com --test Info: Caching certificate for agent.domain.com Info: Caching certificate_revocation_list for ca Info: Retrieving plugin Info: Caching catalog for agent.domain.com Info: Applying configuration version '1351506299' Info: Creating state file /var/lib/puppet/state/state.yaml
8)验证配置,命令如下:
$ more /tmp/puppettest1.txt Hello,First puppet test
很多读者在进行签名验证时很容易遇到一些疑惑,为此笔者增加有关签名验证的说明,以帮助大家解决一些常见的签名故障。
客户端重新签名时需要删除`hostname`.pem证书文件。操作命令如下:
Find /var/lib/puppet/ssl/ -iname 'hostname'.pem -exec /bin/rm –rf {}
如果偷懒可以删除ssl整个目录,操作命令如下:
$ sudo rm –rf /var/lib/puppet/ssl
服务端重新签名同样需要删除签名相关文件,操作命令如下:
$ sudo find $(puppet master --configprint ssldir) -name "$(puppet master --configprint certname).pem" –delete
如果需要删除某台客户端的认证信息,可以使用如下命令:
$ sudo puppet cert --clean {node certname}
同时需要在客户端删除ssl目录。
提示
Puppet命令与帮助命令的使用方法有所区别,特别是在Puppet 3.0与Puppet 2.6以下版本中。相关内容讲在“第二部分基础篇”中详细讲解。
2.7 在Windows下安装与使用
Puppet对Windows提供了友好的支持,在3.0版本中进行了功能加强,不过Puppet在Windows下的功能全面性略逊于在Linux下。在2.6.3小节我们还会详细讲解。
Puppet所支持的Windows操作系统有:
□ Windows Server 2003和Windows Server 2003R2
□ Windows Server 2008和Windows Server 2008R2
□ Windows 7
2.7.1 包管理器方式安装
1)从官方网址(http://downloads.puppetlabs.com/windows)下载Windows下编译好的msi软件包。
2)双击运行puppet-3.0.1.msi,会出现如图2-3所示的安装向导。
图2-3 双击运行puppet-3.0.1.msi后的安装向导
3)勾选接受同步授权协议,如图2-4所示。
图2-4 同意授权协议
4)选择安装的路径与Master主机名,如图2-5所示。
图2-5 选择安装路径与Master主机名
5)完成安装后我们就可以依次选择"开始—>所有程序—>Puppet",打开图2-6,右键选择Run as administrator。
□ Run Facter
□ Run Puppet Agent
□ Start Command Pormpt with Puppet(类似Unix命令行工具)
图2-6 在Wndows下打开Puppet command
提示
Start Command Pormpt with Puppet是Puppetlabs给我们提供在Windows操作更为方便的一个工具
6)我们需要先运行Run Facter,再打开Start Command Pormpt with Puppet。由于笔者习惯命令行操作,因此采用这种方式。我们可以在这里查看相应的帮助:运行Puppet help即可。相关命令操作与在Linux中一样。
2.7.2 在Windows下使用Puppet
对于习惯在命令行界面操作的系统管理员来说,在Windows使用Puppet总归不是那么顺手,不过Puppetlabs为我们提供了相对便利的Command命令提示符工具。笔者将使用Command方式在Windows Server 2008下完成所有认证、配置等操作。
1)客户端发起认证请求,命令如下:
C:\Program Files (x86)\Puppet Labs\Puppet\bin>puppet agent --server puppet.domain.com
2)在服务端完成认证,命令如下:
先使用cert list查看当前未签署的主机认证请求,再使用puppet cert sign命令签署。
$ puppet cert list #查看客户端请求认证列表 "win-102qi54ri1o" (SHA256) D6:57:20:50:B6:50:AA:A4:00:4D:0C:B6:64:5A:CF:B2:C8:45:A1:D4:46:BD:E3:AD:A9:C5:64:C2:86:FE:CD:D8 $ puppet cert sign win-102qi54ri1o #向客户端颁发签名 Signed certificate request for win-102qi54ri1o Removing file Puppet::SSL::CertificateRequest win-102qi54ri1o at '/var/lib/puppet/ssl/ca/requests/win-102qi54ri1o.pem'
3)在服务端配置客户端信息。我们需要在site.pp增加这台windows客户端配置,并为客户端配置file资源。在C盘创建内容为"Hello,I am Liuyu,I come from LinuxTone.org!"的readme.txt文件。
$ sudo vim /etc/puppet/manifests/site.pp #编辑site.pp文件,增加win节点主机 import "nodes/win-102qi54ri1o.pp" $ sudo vim /etc/puppet/manifests/nodes/win-102qi54ri1o.pp #创建win节点主机信息,配置File资源 node 'win-102qi54ri1o' { file { "C:/Readme.txt": ensure => present, content => "Hello,I am Liuyu,I come from LinuxTone.org!", } }
4)在客户端运行配置。
在运行配置前,可以先使用--noop参数。Puppet将会自行检测语法与代码验证。即执行相应的代码变更但并不实际运行。命令运行显示信息如下。如果出现Finished说明运行成功,配置没有错误。
C:\Program Files (x86)\Puppet Labs\Puppet\bin>puppet agent --server puppet.domain.com --test --noop Info: Retrieving plugin Info: Caching catalog for win-102qi54ri1o Info: Applying configuration version '1351582640' /Stage[main]//Node[win-102qi54ri1o]/File[C:/Readme.txt]/ensure: current_value ab sent, should be present (noop) Node[win-102qi54ri1o]: Would have triggered 'refresh' from 1 events Class[Main]: Would have triggered 'refresh' from 1 events Stage[main]: Would have triggered 'refresh' from 1 events Finished catalog run in 0.16 seconds # 去掉noop参数,使其运行生效 C:\Program Files (x86)\Puppet Labs\Puppet\bin>puppet agent --server puppet.domain.com --test Info: Retrieving plugin Info: Caching catalog for win-102qi54ri1o Info: Applying configuration version '1351582825' /Stage[main]//Node[win-102qi54ri1o]/File[C:/Readme.txt]/ensure: created Finished catalog run in 0.12 seconds
5)检查配置是否生效。我们可以看得到在C盘成功创建了文件Readme.txt,其内容为:"Hello,I am Liuyu,I come from LinuxTone.org!",如图2-8所示。
图2-7 确认客户端执行结果
2.7.3 Puppet在Windows下的功能
(1)Puppet在Windows上可安装的版本
在Windows上可安装Puppet 2.6以上版本。Puppet 3.0对Windows的支持更为友好,增加了新的功能。
(2)Puppet对Windows系统提供的命令支持
□ Puppet Agent配置文件及启用服务。如果需要连接*UNIX的Master,则需要Puppet 2.7版本以上。
□ Puppet Apply配置本地节点信息。
□ Puppet resource资源操作,配置操作系统相关。
□ Puppet inspect检查相报告。
(3)Puppet对Windows所提供的资源类型支持
Puppet支持Windows提供的如下资源类型:
□ file
□ user
□ group
□ scheduled_task(Windows专属资源类型)
□ package
□ service
□ exec
□ host
2.8 如何升级
笔者建议在升级Puppet前阅读官方提供的Release_Notes(http://projects.puppetlabs.com/projects/puppet/wiki/Release_Notes)文档,了解官方对于版本间区别的描述。不建议直接跳级升级。例如。现在是Puppet 2.6,不建议直接升级至Puppet 3.0,需要升级至Puppet 2.7过渡一段时间,待稳定后再升级到Puppet 3.0。升级时需要先升级Master并启用测试进程,再升级Agent。通过版本的过渡避免版本之间的不明故障。升级大体可以分如下8步:
1)为Master安装新版本。建议采用源代码安装。使用命令ruby install.rb --destdir=newdir参数指定安装目录。
2)Master启动时采用新的端口(puppet master --no-daemonize --verbose --port 8141),相当于两个Master同时提供服务。
3)将Agent配置指定到Master 8141端口。
4)运行无故障后,升级Agent至最新版本。修改Agent配置指定到8141端口。
5)反复确认是否有故障,查看日志等,看是否按预期完成。
6)将Master进行系统升级。取消之前的测试进程。
其实升级非常简单,通常不会发生太大的问题。如果觉得以上步骤过于繁琐,可以直接升级Master,让原有Agent运行一段时间,在确保没有问题后,直接采用Yum升级Puppet即可。
2.9 本章小结
本章详细介绍了Puppet在各种操作系统上的安装和配置,使读者对Puppet的的了解得以加深。读者可以根据自己的需求选择不同的方法进行安装。在介绍完Puppet安装后,通过创建简单的File资源学习了Puppet基本使用方法,详细讲解了签名验证。下一章我们将通过创建相关的实例带领读者逐步学习构建Puppet的配置。