centos6下puppet3.x安装和部署

puppet安装和部署html

1 puppet是什么

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

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

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

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

2 puppet优势

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

    puppet另一个卓越的地方就是它的灵活性。源于开源软件的天性,你能够自由地得到puppet源代码。若是你遇到问题而且有能力处理的话,你能够修改或增强puppet的代码使其适用于你的环境,而后解决这个问题。centos

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

3 安装准备工做

本次实验OS为centos 6,服务端为:192.168.180.97,客户端为192.168.180.98ruby

3.1 主机时间同步

    为了减小在实验过程当中没必要要的麻烦,咱们须要对全部主机(包括服务器和客户端)进行时间同步。即服务器与客户端的时间相差不能超过秒级。bash

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

ntpdate 192.168.186.1
#或者用chron*
yum install chron*
#修改服务器为192.168.186.1,allow全部:0.0.0.0/0
vim /etc/chron*
/etc/init.d/chron* start
chkconfig chron* on

3.2 修改主机名和Hosts

    由于安装 puppet 时会把主机名写入证书,同时客户端和服务端之间通讯须要这个证书。若是主机没有设置主机名,则须要修改服务器与客户端的主机名。

修改主机名。以下:

vim /etc/sysconfig/network
hostname p-server\p-client
vim /etc/hosts
192.168.180.97 p-server
192.168.180.98 p-client
reboot

3.3 关闭iptablesselinux

咱们如今全部的实验都是在关闭iptables和selinux下进行的。

/etc/init.d/iptables stop
chkconfig iptables off
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

4 环境准备

    puppet的安装能够分为源码安装和RPM安装,可是不管哪种安装方法,咱们都须要在安装以前对其进行几点须要说明。

4.1  puppet安装说明

    因为puppet是采用ruby语言开发,因此不管是源码仍是RPM方式安装puppet,咱们都必需要先安装ruby语言环境

puppet从2.7版本之后,就须要hiera的支持。因此也必须安装hiera。

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

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

4.2 安装ruby

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

yum -y install ruby ruby-rdoc
#咱们能够查看ruby的帮助信息,以下:
ruby -h

4.3 安装facter(server&client都装)

facter咱们能够从puppet官网下载,以下:

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

 

注意:facter也能够经过yum进行安装,在此咱们使用的是源码安装。

下载facter 2.4.6(3.x的版本应该是其余软件了无法用),以下:

wget http://downloads.puppetlabs.com/facter/facter-2.4.6.tar.gz
tar -zxvf facter-2.4.6.tar.gz
ruby install.rb或者./install.rb
#facter安装完毕后,咱们来查看下facter的使用帮助。以下:
facter -h

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

5 源码安装puppet

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

在下载puppet源码以前,咱们还要在master端和agent端建立puppet运行时使用的用户puppet。

建立puppet用户,以下:

useradd -M -s /sbin/nologin puppet

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

这样作的目的是:master在服务端以普通用户运行安全性比较高,而agent在客户端以root用户运行,是由于master在建立用户、修改系统文件等资源时,须要具备最高权限。

5.1 puppet源码安装(server&client都装)

    puppet的源码包,咱们能够从puppet官网下载。目前puppet最新版为3.8.7(4.x版本太新,虽说性能提高3-4被,但网上截止发帖日都没有太多参考教程暂不研究),以下:

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

下载puppet软件包。以下:

wget http://downloads.puppetlabs.com/puppet/puppet-3.8.7.tar.gz
tar -zxvf puppet-3.8.7.tar.gz
ruby install.rb或者./install.rb

查看puppet的安装位置:/etc/puppet/

5.2 server端配置

puppet安装完毕后,咱们来配置下server端:

cp ext/redhat/puppet.conf /etc/puppet/
vim /etc/puppet/puppet.conf
server = p-server
certname = p-server
pluginsync = false

其中:

p-server表示puppet服务器的主机名。

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

配置文件修改完毕后,咱们如今来配置server端的启动脚本,以下:

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"
tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN      26486/ruby 
#把puppetmaster加入到开机启动项。
chkconfig --add puppetmaster
chkconfig puppetmaster on

5.3 agent端配置

agent端的配置,以下:。

cp ext/redhat/puppet.conf /etc/puppet/
cat /etc/puppet/puppet.conf
server = p-server
pluginsync = false

其中:

p-server表示puppet服务器的主机名。

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

 

agent端启动,咱们能够经过puppet agent命令来启动。以下:

puppet agent
ps aux |grep puppet
root     23854  0.0  1.5 162220 61932 ?        Ss   11:49   0:06 /usr/bin/ruby /usr/bin/puppet agent

经过上图,咱们也能够看出agent端运行时使用的用户为root,而不是puppet用户。

 

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

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

6 puppet证书受权

咱们知道puppet为了安全,采用ssl隧道通讯,所以须要申请证书来验证。

6.1  server端证书初始化

当server端第一次启动的时候,能够查看/var/log/message日志文件中,有相似以下的信息:

tail -f /var/log/messages
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for ca
Jun 11 11:15:25 jijilu-test puppet-master[26440]: jijilu-test has a waiting certificate request
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for jijilu-test
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/ca/requests/jijilu-test.pem'
Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/certificate_requests/jijilu-test.pem'
Jun 11 11:15:26 jijilu-test puppet-master[26486]: Reopening log files
Jun 11 11:15:26 jijilu-test puppet-master[26486]: Starting Puppet master version 3.8.1
Jun 11 11:49:17 jijilu-test puppet-master[26486]: 430-test01 has a waiting certificate request

从日志中咱们能够看出第一次启动server端时,puppet服务会在本地建立认证中心,给本身受权证书和key,这个咱们能够在/var/lib/puppet/ssl看到那些证书和key。以下:

ll /var/lib/puppet/ssl
drwxr-xr-x 5 puppet puppet 4096 Jun 11 11:15 ca
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certificate_requests
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certs
-rw-r--r-- 1 puppet puppet  958 Jun 11 11:15 crl.pem
drwxr-x--- 2 puppet puppet 4096 Jun 11 11:05 private
drwxr-x--- 2 puppet puppet 4096 Jun 11 11:06 private_keys
drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:06 public_keys

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

咱们也能够查看master端给本身受权的证书文件,以下:

ll /var/lib/puppet/ssl/ca/signed
-rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 p-server.pem

6.2  agent端申请证书

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

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

咱们如今使用puppet agent --server p-server链接master端,以下:

puppet agent --server p-server

6.3  server端受权证书

agent端申请证书完毕后,须要咱们切换到server端,使用puppet cert命令来对agent端受权证书。

有关puppet cert的使用,咱们能够查看pupper cert的帮助信息。以下:

pupper cert

如今咱们能够查看master端有哪些主机在申请证书,以下:

puppet cert list

如今咱们来给agent端受权证书,使用以下命令:

puppet cert sign p-client

 

注意:

若是实际生产环境客户端数量比较多的话,咱们能够一次性受权全部证书。以下:

puppet cert sign --all

在master端查看全部已经经过认证的agent端,以下:

puppet cert -all

# 如今咱们再来看看master端给agent端受权的证书文件,以下:

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

-rw-r--r-- 1 puppet puppet 1939 Jun 11 11:55 p-client.pem

-rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 p-server.pem

 

经过上图,咱们能够看出server端受权客户端c.ilanni.com的证书文件是p-client.pem。

6.4 查看agent端证书

在server端受权完毕后,咱们如今切换到agent端查看受权的证书文件,以下:

ll /var/lib/puppet/ssl/certs

-rw-r--r--. 1 puppet puppet 1939 Jun 11 11:57 p-client.pem

-rw-r--r--. 1 puppet puppet 1944 Jun 11 11:49 ca.pem

 

经过上图,咱们能够看出agent端的证书文件p-client.pem与server端的证书文件是同样的。

6.5 puppet证书问题

    在实际的生产环境中,可能会出现已经经过server端认证的agent端主机名被修改或者其余一些误操做,从而致使agent端没法与server端进行正常通讯。

当遇到这种状况时,咱们通常的处理方法是先删除server端和agent端的相关的认证文件,而后在agent端从新申请证书。

具体操做以下:

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

rm -fr /var/lib/puppet/ssl

  

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

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

 

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

7 puppet资源

puppet环境搭建完毕后,咱们如今开始来介绍puppet资源相关的内容。

7.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

7.2 puppet资源配置文件

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

咱们在该文件中建立须要同步到agent端的资源,以下:

# cat /etc/puppet/manifests/site.pp

node default{

file { "/tmp/test.txt":

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

}

 

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

 

注意:

其中的n表示换行。若是不加n的话,查看该文件内容时会显示成这样:

   Hello,calvin,this is puppet test![root@430-test01 ~]#

 

同时site.pp文件建立完毕后,咱们要先重启下server端,以下:

/etc/init.d/puppetmaster restart

 

如今切换到agent端同步该资源,以下:

puppet agent --test --server p-server

 

经过上图,咱们能够看到agent端已经把server端的资源的同步到本地。

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

cat /tmp/test.txt

 

经过上图,咱们能够看到agent端确实已经同步到server端的资源。/tmp目录下确实有test.txt这个文件,并且内容也确实和server端的同样。

到此有关puppet3.8搭建与配置介绍完毕。

8 使用配置示例

8.1 文件分发

描述:经过puppet服务端能够向被管理机(客户端)上推送文件,方法是使用file类型的source属性

 

第一步:

# vi /etc/puppet/fileserver.conf  

     [files]

path /opt/       

allow *    

# 设置文件推送到目录

# 设置准许链接到服务端的主机地址

 

第二步:vi /etc/puppet/manifests/site.pp 

File

{ "/opt/rlwrap-0.30.tar.gz":

source=> "puppet://$puppetserver/files/rlwrap-0.30.tar.gz",

}   

# 设置服务器上/opt目录下的rlwrap-0.30.tar.gz为被传送文件

#此处“$puppetserver”是Puppet Server端的名称,即hostname,在hosts文件里指定,生产环境下用内部的DNS上做解析

 

第三步:

在客户端执行更新命令

# puppet agent --test --server jijilu-test

Info: Caching catalog for 430-test01

Info: Applying configuration version '1434090440'

Notice: /Stage[main]/Main/File[/opt/rlwrap-0.30.tar.gz]/ensure: defined content as '{md5}03d8bd4996945ea32d3c7d5dc38c956e'

Notice: Finished catalog run in 0.44 seconds

 

查看/opt目录下已经同步这个文件:

# ll /opt/

total 184

drwxr-xr-x. 2 root root   4096 Jun 22  2012 rh

-rw-r--r--. 1 root root 184037 Jun 12 15:41 rlwrap-0.30.tar.gz

8.2 修改文件属性

描述:把/tmp/test.txt文件的权限改成puppet用户,并设置权限为666。

 

第一步:编辑服务端的site.pp

vi /etc/puppet/manifests/site.pp

file

{ "/tmp//tmp/test.txt ": owner => "puppet",

group => "puppet", mode => 666,

}

 

第二步:在客户端执行命令

# puppet agent --test --server jijilu-test

Info: Caching catalog for 430-test01

Info: Applying configuration version '1434095252'

Notice: /Stage[main]/Main/File[/tmp/test.txt]/owner: owner changed 'root' to 'puppet'

Notice: /Stage[main]/Main/File[/tmp/test.txt]/group: group changed 'root' to 'puppet'

Notice: /Stage[main]/Main/File[/tmp/test.txt]/mode: mode changed '0644' to '0666'

Notice: Finished catalog run in 0.03 seconds

8.3 执行SHELL命令或shell脚本

描述:经过puppet分发执行shell脚本,在客户端的opt目录下新建一目录shelldir。

 

第一步:编辑服务端的site.pp

vi /etc/puppet/manifests/site.pp 

exec { "exec-mkdir":  cwd => "/opt",     

command  => "sh /opt/lgh.sh", 

user => "root", 

path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", 

}

 

第二步:在客户端编辑上一步command路径中指定的shell脚本,例如

vi /opt/lgh.sh 

#!/bin/bash 

mkdir /opt/shelldir

 

第三步:在客户端执行命令

# puppet agent --test --server jijilu-test  

    Info: Caching catalog for 430-test01

Info: Applying configuration version '1434095394'

Notice: /Stage[main]/Main/Exec[exec-mkdir]/returns: executed successfully

Notice: Finished catalog run in 0.21 seconds

 

在/opt目录下查看shelldir目录有没有创建。

8.4 cron计划任务

描述:接上面的shell程序实例,在17:30执行/opt/lgh.sh。

 

第一步:编辑服务端的site.pp

vi /etc/puppet/manifests/site.pp 

cron { "cron-shell":

command => "sh /opt/lgh.sh",

user => "root",

minute => "30",

hour => "17"

}

第二步:在客户端执行命令

# puppet agent --test --server jijilu-test

   Info: Caching catalog for 430-test01

Info: Applying configuration version '1434095710'

Notice: /Stage[main]/Main/Cron[cron-shell]/ensure: created

Notice: Finished catalog run in 0.12 seconds

 

而后在客户端使用

# crontab -l查看效果

 

# crontab -l

# HEADER: This file was autogenerated at Fri Jun 12 15:55:11 +0800 2015 by puppet.

# HEADER: While it can still be managed manually, it is definitely not recommended.

# HEADER: Note particularly that the comments starting with 'Puppet Name' should

# HEADER: not be deleted, as doing so could cause duplicate cron jobs.

* * * * * /usr/sbin/ntpdate 10.10.1.230 >/dev/null 2>&1

# Puppet Name: cron-shell

30 17 * * * sh /opt/lgh.sh

8.5 服务检查及状态修改

   描述:能够经过puppet对一些服务进行检查。puppet是经过service命令操做的。因此,只能针对在/etc/init.d/目录下的服务

 

实例:把客户端的防火墙起来

 

第一步:编辑服务端的site.pp

vi /etc/puppet/manifests/site.pp 

service

{ iptables:

ensure => "running",

}

 

第二步:在客户端执行命令

# puppet agent --test --server jijilu-test

Info: Caching catalog for 430-test01

Info: Applying configuration version '1434095840'

Notice: /Stage[main]/Main/Service[iptables]/ensure: ensure changed 'stopped' to 'running'

Info: /Stage[main]/Main/Service[iptables]: Unscheduling refresh on Service[iptables]

Notice: Finished catalog run in 0.20 seconds

 

# /etc/init.d/iptables status

Table: filter

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          

3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          

4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain FORWARD (policy ACCEPT)

num  target     prot opt source               destination        

1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 

Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination

相关文章
相关标签/搜索