Puppet实战
上QQ阅读APP看书,第一时间看更新

第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的配置。