本文由秀依林枫提供友情赞助,首发于烂泥行天下

有关服务器的自动化管理,这方面以前没有接触过。打算这段时间把这块知识给补上。

现在服务器自动化管理软件,使用最多也最火的就是puppet了。

那么我们今天的主角也就是puppet。分以下几个步骤来介绍:

1、 puppet是什么

2、 puppet优点

3、 安装准备工作

4、 环境准备

5、 源码安装puppet

6、 RPM安装puppet

7、 puppet证书授权

8、 puppet资源

一、puppet是什么

puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。

puppet把这些系统实体称之为资源,puppet设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

puppet依赖于C/S(客户端/服务器)的部署架构。它需要在puppet服务器上安装puppet-server软件包(以下简称master),在需要管理的目标主机上安装puppet客户端软件(以下简称agent)。

当agent连接上master后,定义在master端的配置文件会被编译,然后在agent上运行。每个agent默认30分钟会连接一次master,确认配置信息的更新情况。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将agent通过crontab(任务计划)来管理,这样会更加灵活一些。

二、puppet优点

puppet的语法允许你创建一个单独的脚本,用来在你所有的目标主机上建立一个用户。所有的目标主机会依次使用适合本地系统的语法来解释和执行这个模块。如果这个配置是在Red Hat服务器上执行的话,建立用户使用useradd命令,如果这个配置是在FreddBSD服务器上执行的话,则使用adduser命令。

puppet另外一个卓越的地方就是它的灵活性。源于开源软件的天性,你可以自由地获得puppet的源代码。如果你遇到问题并且有能力处理的话,你可以修改或加强puppet的代码使其适用于你的环境,然后解决这个问题。

puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置能够快速简单地添加至puppet的安装程序中。

三、安装准备工作

本次实验OS为centos 6.5 64bit,服务端为:192.168.199.247,客户端为192.168.199.248。

在正式实验之前,我们有几个事情需要先进行处理。

3.1 主机时间同步

为了减少在实验过程中不必要的麻烦,我们需要对所有主机(包括服务器和客户端)进行时间同步。即服务器与客户端的时间相差不能超过秒级。

使用以下命令进行时间同步,如下:

ntpdate timekeeper.isi.edu

如果在进行时间同步时,出现如下错误:

21 Jan 17:20:45 ntpdate[2720]: the NTP socket is in use, exiting

请关闭主机的ntpd服务,然后再进行时间同步。

/etc/init.d/ntpd stop

3.2 修改主机名

因为安装 puppet 时会把主机名写入证书,同时客户端和服务端之间通信需要这个证书。所以需要修改服务器与客户端的主机名。

修改主机名。如下:

hostname s.ilanni.com

执行此命令,可以使主机的主机名立即生效。但是服务器重启后,此修改就会失效。

要是主机名永久生效的话,需要修改/etc/sysconfig/network文件。如下:

cat /etc/sysconfig/network

本次实验,我们就不搭建DNS服务器,直接通过修改服务端与客户端的hosts文件来达到各自解析域名的目的。如下:

cat /etc/hosts

192.168.199.247 s.ilanni.com

192.168.199.248 c.ilanni.com

3.3 关闭iptables和selinux

我们现在所有的实验都是在关闭iptables和selinux下进行的。

/etc/init.d/iptables status

cat /etc/selinux/config

四、环境准备

puppet的安装可以分为源码安装和RPM安装,但是无论哪一种安装方法,我们都需要在安装之前对其进行几点需要说明。

4.1 puppet安装说明

1、由于puppet是采用ruby语言开发,所以无论是源码还是RPM方式安装puppet,我们都必须要先安装ruby语言环境

2、puppet从2.7版本以后,就需要hiera的支持。所以也必须安装hiera。

3、在前面章节中,我们说明了puppet是一个配置管理系统,而管理的资源,都是系统的实体。但是这些实体,是如何来的呢?这就需要我们安装另外一个资源收集软件—facter。

facter主要用来收集主机的一些信息,比如:CPU、主机IP等。facter把这些收集的信息发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。

facter也是ruby语言开发的,这个我们可以在facter的安装文档中可以查看到,如下:

cat README.md

4.2 安装ruby

ruby的安装比较简单,我们在此使用是yum进行安装。如下:

yum -y install ruby

ruby安装完毕后,我们来查看其生成的文件。如下:

rpm -ql ruby

我们可以查看ruby的帮助信息,如下:

ruby -h

除此之外,我们还要安装ruby-rdoc这个软件包。该软件包主要用于查看ruby的帮助文档。如下:

yum -y install ruby-rdoc

以上就是和ruby有关的软件包,安装完毕后,我们开始来安装facter。

4.3 安装facter

facter我们可以从puppet官网下载,如下:

http://downloads.puppetlabs.com/facter/

注意:facter也可以通过yum进行安装,在此我们使用的是源码安装。

下载facter最新的版本,如下:

wget http://downloads.puppetlabs.com/facter/facter-2.3.0.tar.gz

解压facter软件包,如下:

tar -xf facter-2.3.0.tar.gz

开始安装facter,如下:

ruby install.rb或者./install.rb

facter安装完毕后,我们来查看下facter的使用帮助。如下:

facter -h

如果想查看facter详细帮助信息,我们也可以man下facter。如下:

man facter

如果安装没有问题的话,我们在执行facter命令后,会显示facter收集的相关信息。如下:

facter

4.4 安装hiera

hiera主要用于控制一些agent经常变化的数值,在puppet2.7以后的版本必须要安装。如果不安装的话,我们在安装puppet时,系统会提示如下错误:

Could not load hiera; cannot install

但是在安装hiera之前,我们必须安装额外的yum源,否则系统会提示找不到该软件包。

该yum源,我们可以puppet官网查看到。如下:

https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives

按照puppet官网的方法进行安装。如下:

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

yum源配置完毕后,我们现在来安装hiera。如下:

yum -y install hiera

以上安装完毕后,我们就可以正式安装puppet。

五、 源码安装puppet

puppet服务端与客户端的源码安装使用的是同一个软件包,安装步骤一样,只是在配置文件方面有细微的差别。

在下载puppet源码之前,我们还要在master端和agent端创建puppet运行时使用的用户puppet。master端如果不创建的话,master在启动时,会报如下错误:

创建puppet用户,如下:

useradd -M -s /sbin/nologin puppet

cat /etc/passwd |grep puppet

注意:puppet服务端是以puppet用户运行的,而puppet客户端是root用户运行。

这样做的目的是:master在服务端以普通用户运行安全性比较高,而agent在客户端以root用户运行,是因为master在创建用户、修改系统文件等资源时,需要具有最高权限。

5.1 puppet源码安装

puppet的源码包,我们可以从puppet官网下载。目前puppet最新版为3.7.3.如下:

http://downloads.puppetlabs.com/puppet/

下载puppet软件包。如下:

wget http://downloads.puppetlabs.com/puppet/puppet-3.7.3.tar.gz

解压puppet软件包,如下:

tar -xf puppet-3.7.3.tar.gz

puppet的安装方法与facter的安装一样,如下:

ruby install.rb或者./install.rb

puppet安装完毕后,我们来查看下其帮助信息,如下:

puppet help

查看puppet的安装位置如下:

ll /etc/puppet/

以上就是puppet的安装,安装完毕后。我们现在来配置puppet。

5.2 master端配置

puppet安装完毕后,我们来配置下master端。把puppet源码包ext/redhat/目录下的puppet.conf文件复制到puppet的安装目录/etc/puppet/下,如下:

cp ext/redhat/puppet.conf /etc/puppet/

vi /etc/puppet/puppet.conf

server = s.ilanni.com

certname = s.ilanni.com

pluginsync = false

其中s.ilanni.com表示puppet服务器的主机名。

pluginsync = false表示关闭模块中的插件功能

配置文件修改完毕后,我们现在来配置master端的启动脚本。

复制puppet源码包ext/redhat/目录下的server.init文件到/etc/init.d/下,并重命名为puppetmaster。然后赋予puppetmaster可执行权限。如下:

cp ext/redhat/server.init /etc/init.d/puppetmaster

chmod u+x /etc/init.d/puppetmaster

注意:master端启动,我们也可以通过puppet master命令来启动。如下:

puppet master

netstat -tunlp |grep "8140"

ps aux |grep puppet

其实puppetmaster启动脚本就是使用puppet master命令启动的,如下:

cat /etc/init.d/puppetmaster

把puppetmaster加入到开机启动项。如下:

chkconfig --add puppetmaster

chkconfig puppetmaster on

chkconfig |grep puppetmaster

以上都配置完毕后,我们来启动puppet服务,如下:

/etc/init.d/puppetmaster start

ps aux |grep puppet

netstat -tunlp

通过上图,我们可以很puppet服务使用TCP协议的8140端口,而且运行时使用puppet用户。

puppet服务端配置完毕后,我们现在来配置puppet客户端。

5.3 agent端配置

agent端的配置,只需要把puppet.conf文件复制到puppet的安装目录/etc/puppet/下即可,如下:。

cp ext/redhat/puppet.conf /etc/puppet/

cat /etc/puppet/puppet.conf

server = s.ilanni.com

pluginsync = false

其中s.ilanni.com表示puppet服务器的主机名。

pluginsync = false表示关闭模块中的插件功能

agent端启动,我们可以通过puppet agent命令来启动。如下:

puppet agent

ps aux |grep puppet

通过上图,我们也可以看出agent端运行时使用的用户为root,而不是puppet用户。

注意:agent端我们使用puppet agent命令来进行各种管理,包括证书的申请、资源的同步,我们都是通过这个命令进行的。

agent可以以两种方式运行:第一种方式是命令接参数连接master,第二种是以守护进程的形式在系统后台运行,默认每30分钟连接一次master,但是这样并不灵活。我们一般是使用第一种方式,并配合crontab使用。

六、 RPM安装puppet

RPM方式安装puppet比较简单,我们只需yum安装即可。如下:

6.1 puppet安装准备工作

在使用RPM安装之前,我们要先配置额外的yum源,否则系统会提示找不到puppet软件包。如下:

yum -y install puppet-server

安装额外的yum源,我们可以在puppet的官网查找到yum源。如下:

https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives

按照puppet官网的方法进行安装。如下:

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

注意:该yum源无论是master端和agent端都需要进行配置。

6.2 master端安装与配置

现在开始yum安装master端,如下:

yum -y install puppet-server

通过上图,我们可以看到安装puppet-server是要依赖于facter、hiera和puppet三个软件包。

现在我们来查看puppet-server安装时新建的用户以及puppet服务运行时所用的用户,如下:

cat /etc/passwd

ps aux |grep puppet

通过上图,我们可以看到puppet-server在安装时确实新建用户puppet,以及在运行时使用的确实puppet用户。

查看puppet服务所使用的端口,如下:

/etc/init.d/puppetmaster start

netstat -tunlp

master端安装完毕后,我们来配置puppet服务的配置文件,其方法和源码安装方法一样。如下:

vi /etc/puppet/puppet.conf

server = s.ilanni.com

certname = s.ilanni.com

pluginsync = false

6.3 agent端安装与配置

master端安装完毕后,我们来安装agent端如下:

yum -y install puppet

RPM安装的puppet客户端与源码安装的一样,我们现在来启动puppet客户端。如下:

通过上图,我们可以看出agent端安装时也创建了puppet用户,但是puppet运行时没有使用该用户而是使用root用户。这个与源码安装的相对应。

agent端安装完毕后,我们来配置agent端的配置文件,其方法和源码安装方法一样。如下:

vi /etc/puppet/puppet.conf

server = s.ilanni.com

pluginsync = false

七、 puppet证书授权

我们知道puppet为了安全,采用ssl隧道通信,因此需要申请证书来验证。

7.1 master端证书初始化

当master端第一次启动的时候,可以查看/var/log/message日志文件中,有类似如下的信息:

tail -f /var/log/messages

Jan 23 06:39:03 localhost puppet-master[1622]: Signed certificate request for ca

Jan 23 06:39:04 localhost puppet-master[1622]: s.ilanni.com has a waiting certificate request

Jan 23 06:39:04 localhost puppet-master[1622]: Signed certificate request for s.ilanni.com

Jan 23 06:39:04 localhost puppet-master[1622]: Removing file Puppet::SSL::CertificateRequest s.ilanni.com at '/var/lib/puppet/ssl/ca/requests/s.ilanni.com.pem'

Jan 23 06:39:04 localhost puppet-master[1622]: Removing file Puppet::SSL::CertificateRequest s.ilanni.com at '/var/lib/puppet/ssl/certificate_requests/s.ilanni.com.pem'

Jan 23 06:39:04 localhost puppet-master[1634]: Reopening log files

Jan 23 06:39:04 localhost puppet-master[1634]: Starting Puppet master version 3.7.3

从日志中我们可以看出第一次启动master端时,puppet服务会在本地创建认证中心,给自己授权证书和key,这个我们可以在/var/lib/puppet/ssl看到那些证书和key。如下:

ll /var/lib/puppet/ssl

这个目录和/etc/puppet/puppet.conf文件中配置的ssldir路径有关系。

我们也可以查看master端给自己授权的证书文件,如下:

ll /var/lib/puppet/ssl/ca/signed

7.2 agent端申请证书

agent端在第一次连接master端时,会向master端申请证书。如果master端没有授予agent端证书,那么agent端和master端之间的连接是不会建立成功的。

此时agent端会持续等待master端授权证书,并会每隔2分钟去检查master端是否签发证书。

我们现在使用puppet agent --server s.ilanni.com连接master端,如下:

puppet agent --server s.ilanni.com

7.3 master端授权证书

agent端申请证书完毕后,需要我们切换到master端,使用puppet cert命令来对agent端授权证书。

有关puppet cert的使用,我们可以查看pupper cert的帮助信息。如下:

pupper cert

在上图中,puppet cert已经给出如何给一个agent端进行授权证书的例子。

现在我们来查看master端有哪些主机在申请证书,如下:

puppet cert list

通过上图,我们很明显的可以看到c.ilanni.com客户端正在申请证书。

现在我们来给agent端授权证书,使用如下命令:

puppet cert sign c.ilanni.com

注意:如果实际生产环境客户端数量比较多的话,我们可以一次性授权所有证书。如下:

puppet cert sign --all

在master端查看所有已经通过认证的agent端,如下:

puppet cert -all

现在我们再来看看master端给agent端授权的证书文件,如下:

ll /var/lib/puppet/ssl/ca/signed

通过上图,我们可以看出master端授权客户端c.ilanni.com的证书文件是c.ilanni.com.pem。

7.4 查看agent端证书

在master端授权完毕后,我们现在切换到agent端查看授权的证书文件,如下:

ll /var/lib/puppet/ssl/certs

通过上图,我们可以看出agent端的证书文件c.ilanni.com.pem与master端的证书文件是一样的。

7.5 puppet证书问题

在实际的生产环境中,可能会出现已经通过master端认证的agent端主机名被修改或者其他一些误操作,从而导致agent端无法与master端进行正常通信。

当遇到这种情况时,我们一般的处理方法是先删除master端和agent端的相关的认证文件,然后在agent端重新申请证书。

具体操作如下:

agent端,删除/var/lib/puppet/ssl目录,如下:

rm -fr /var/lib/puppet/ssl

master端,删除/var/lib/puppet/ssl/ca/signed目录下的证书文件,如下:

rm -fr /var/lib/puppet/ssl/ca/signed/c.ilanni.com.pem

以上操作完毕后,agent端再次申请证书即可。

八、 puppet资源

puppet环境搭建完毕后,我们现在开始来介绍puppet资源相关的内容。

8.1 puppet的资源类型及帮助

puppet的资源,我们是可以通过相关命令查看puppet支持的资源类型。

通过前面的章节,我们知道puppet是支持子命令进行查询的。如下:

puppet help ca

查看puppet支持的资源类型。如下:

puppet describe --list

也可以通过puppet resource --type命令查询,如下:

puppet resource --type

通过上图,我们可以看到puppet支持用户user、文件file、crontab等大部分的资源。

如果想查看user的资源,我们还是继续使用puppet describe user命令进行查看。如下:

puppet describe user

如果我们想查看user在puppet站点site.pp文件中的具体使用方法,可以通过如下命令进行查看:

puppet resource user

通过上图,我们可以看到puppet已经给出了user使用的例子,我们只需要按照这个例子进行操作即可。

注意:如果puppet describe帮助中没有该资源在site.pp站点中的使用详情,我们可以去到puppet resource中进行查看。

这个只是以user资源为例,如果想查看host资源的帮助,我们也可以使用类似的命令,如下:

puppet resource host

如果你不想在本机进行查看,那么也可以去puppet官网进行查看,如下:

https://docs.puppetlabs.com/references/latest/type.html

8.2 puppet资源配置文件

puppet的资源配置文件在服务端的/etc/puppet/manifests目录下,我们需要在该目录下创建一个站点文件site.pp。

我们在该文件中创建需要同步到agent端的资源,如下:

cat /etc/puppet/manifests/site.pp

node default{

file { "/tmp/test.txt":

content => "Hello,ilanni,this is puppet test!\n"}

}

以上命令表示在puppet资源配置文件冲创建一个默认节点,使用file资源,在agent端的/tmp/目录下创建test.txt,内容为:Hello,ilanni,this is puppet test!\n

注意:其中的\n表示换行。如果不加\n的话,查看该文件内容时会显示成这样:

同时site.pp文件创建完毕后,我们要先重启下master端,如下:

/etc/init.d/puppetmaster restart

现在切换到agent端同步该资源,如下:

puppet agent --test --server s.ilanni.com

通过上图,我们可以看到agent端已经把master端的资源的同步到本地。

现在我们来查看,agent端的/tmp目录下是否有test.txt这个文件。如下:

cat /tmp/test.txt

通过上图,我们可以看到agent端确实已经同步到master端的资源。/tmp目录下确实有test.txt这个文件,而且内容也确实和master端的一样。

到此有关puppet3.7搭建与配置介绍完毕,下一篇文章我们会介绍在生产环境中,puppet同步的资源。

烂泥:puppet3.7安装与配置的更多相关文章

  1. 烂泥:CentOS安装及配置TFTP服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为什么要学习有关TFTP服务器的安装及配置呢?主要是为了后续学习有关linux系统的无人值守安装做准备. TFTP简单文件传输协议,使用UDP的69端口 ...

  2. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  3. 烂泥:centos安装及配置DHCP服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 有关DHCP服务器的配置一直打算学习,这几天终于抽出时间来专门学习这个知识点. DHCP:动态主机配置协议,在此就不多做介绍.不清楚的童鞋,可以去百度下 ...

  4. 烂泥:redis3.2.3安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自 ...

  5. 烂泥:zabbix3.0安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这个月又快过完了,最近也比较忙,没时间写文章,今天挤点时间把zabbix3.0安装与配置 ...

  6. 烂泥:Postfix邮件服务器搭建之软件安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb Postfix邮件服务器的搭建需要使用到几个软件,分别是cyrus-sasl.postf ...

  7. 烂泥:vcenter5.5无AD下的安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 公司现在的虚拟化使用的基本上都是vsphere,目前大约有7台物理机,为了更好的管理虚 ...

  8. 烂泥:学习Nagios(三): NRPE安装及配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 在前两篇文章中,我们介绍了有关nagios的安装与配置,文章为<烂泥:学习Nagios(一):Nagios安装>.<烂泥:学习Nagio ...

  9. 烂泥:虚拟化KVM安装与配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近打算把公司的服务器全部做成虚拟化,一是跟有效的利用了服务器,二也是对自己是一个学习的机会. KVM的安装与配置步骤如下: 1. 查看是否支持虚拟化 ...

随机推荐

  1. 阿里巴巴笔试整理系列 Session2 中级篇

    1知识点储备-----2笔试题总结-----3面试经验总结 知识点储备 2014年8月29日在线笔试题:20单选(40分钟内完成)+附加题(2道编程+1道问答) 1. 通过算法生成的随机数是“伪随机” ...

  2. linux下安装rzsz

    1.登陆linux,下载rzsz安装包 wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz 2.tar zxvf rzsz-3.48.t ...

  3. Volatile实现原理

    volatile 在多线程上volatile 是synchronized 轻量级实现.在多核处理器开发中保证了共享变量的"可见性".可见性是指当一个线程修改一个共享变量的时候,另外 ...

  4. bootstrap源码分析之form、navbar

    一.表单(Form) 源码文件:_form.scssmixins/_form.scss 1.按层次结构分:form-group -> form-control/input-group/form- ...

  5. Chance – 功能强大的 JavaScript 随机数生成类库

    Chance 是一个基于 JavaScript 的随机数工具类.可以生成随机数字,名称,地址,域名,邮箱,时间等等,几乎网站中使用的任何形式的内容都能够生成.这个随机数工具可以帮助减少单调的测试数据编 ...

  6. 【初探移动前端开发05】jQuery Mobile (下)

    前言 继续我们移动端的学习,今天到了List相关了. 本文例子请使用手机查看 List列表 在移动设备平台下,由于移动设备屏幕比较小,我们又是用手在上面点击的触屏方式,传统的列表模式在手机上就不太友好 ...

  7. Objective-C 快速入门--基础(一)

    1.实例变量的可见度有哪些?对访问变量有什么影响? 所谓的内部,指的是相应类的@implementation和@end之间 示例: @interface Person : NSObject { @pu ...

  8. 转 java中static{}语句块详解

    原文地址:http://blog.csdn.net/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会在类被加载的时候执 ...

  9. 图解Android触摸事件分发

    Android中触摸事件传递过程中最重要的是dispatchTouchEvent().onInterceptTouchEvent()和onTouchEvent()方法. View和Activity有d ...

  10. sqlite3 not found问题解决方法

    测试发现,有些Android手机自带sqlite3命令,有些不带.对于不带sqlite3的手机,我们可以手动将sqlite3加入系统. 执行如下命令 adb remount adb push 路径/s ...