Linux puppet的安装配置部署

一、puppet简介

    puppet是一个为实现数据中心自动化管理而设计的配置管理软件,能够管理IT基础设施的整个生命周期:供应(provisioning)配置(configuration)、联动(orchestration)及报告(reporting)。puppet基于C/S架构,类似于zabbiz,有master与agent节点之分。它是一个开源的(谈不上真正的开源,因为有商业版与社区版之分)、新一代的、集中化的配置管理工具,由ruby语言研发,它拥有自己的配置语言(PCL,puppet configuration language)。

    puppet能够把IT日常的系统管理代码化,而代码可重用,这样可以减少运维人员的工作量,而且能快速、大规模部署服务器。在puppet的世界有其自己的哲学思想:在IT系统管理中,puppet只关注结果,不关心过程!这名话怎样理解,比如puppet的master端向各agent下达把nginx这个包安装上并启动服务,puppet的agent端面只向master端报告软件是否安装完成,服务是否已启动,puppet不关心软件是怎样安装上的,服务是怎样启动的,它只关心结果。


二、puppet工作原理

1、puppet有两种工作方式,一种是独立工作方式(standalon),另一种是master-agent的方式,这里主要介绍C/S方式。

Linux puppet的安装配置部署

简述:


manifest:字面意思是清单,在这里指被puppet代码化的各种资源,是一种用PCL编写的代码;

catalog:表示把各种manifest编译后生成的可执行代码,也叫伪代码;

apply:生成catalog后puppet就可以把代码进行运用,在运用时也要先对伪代码进行检测,检测后才执行。


a)、agent向主机请求catalog代码,在请求时要带上自己的主机名与facts,facts里包含了agent服务器自身的一些系统特征,比如操作系统是什么,是哪个版本,cpu是什么型号,内存有多大等信息;

b)、master接收到agent的请求后开始查询此节点包含的清单,把这些资源找出后编译成catalog,再发送给agent;

c)、agent收到catalog后就开始应用代码,并把执行的状态结果生成报告返还给master;

d)、master接收报告并记录日志。

2、puppet认证机制

puppet有其自己的证书管理机制,agent与master间的通信是需要得到master的认证,证书存放在/var/lib/puppet/ssl/。

在master/agent首次启用的过程:

a)、master启动时会为自己生成key,并签署证书,让自己成为一个ca;

b)、agent首次启动要为自己生成key,生成证书签署请求,并将证书请求发送给master请求签署;

c)、master收到agent的证书签署请求后,由管理员先验证请求是否合法,而后对证书签署请求作出签署或不签署。


三、puppet的安装

     puppet既然是C/S架构,那安装包就有master安装包与agent安装包之分。以下的安装及测试都是基于CentOS 6.4_x86_64的系统进行,在epel源也包含了puppet的软件包,所以我以yum安装为例,大家可以通过puppet官方给的yum源进行安装,官方的yum软件版本比较新,官网yum地址http://yum.puppetlabs.com/el/6.5/products/x86_64/,也可以使用epel的源安装,我推荐安装的版本是puppet 2.7.25或者3.6.2,目前puppet开源社区提供四个版本分支:

      puppet 0.22.1--->0.25.5     puppet早期分支,目前官网已经不再提供技术支持;

      puppet 2.6.0 --->2.6.18     目前正在维护的安全分支,已经停止开发;

      puppet 2.7.0 --->2.7.26     目前正在维护的安全版本分支,也是比较流行的版本分支;

      puppet 3.0.0 --->3.8.*      当前开发中的版本分支。

所以我推荐使用epel yum源来进行安装,yum提供的版本目前是2.7.26,安装puppet依赖ruby facter,yum安装会解决这些依赖。

1、首先安装epel源

RHEL/CentOS/SL Linux 6.x 下安装 EPEL6 yum源:

32位系统选择:
rpm -ivh http://download4.fedora.redhat.com/pub/epel/6/i386/epel-release-6-8.noarch.rpm
64位系统选择:
rpm -ivh http://download4.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2、puppet master端的安装

yum install puppet-server -y

3、puppet agent端的安装

yum install puppet -y


四、puppet子命令介绍

直接点击标题即可查看


五、puppet的主机认证


先来介绍一下我这里的环境,系统都是CentOS 6.4_x86_64,主机名及IP规划如下:

Master:
monitor.comratings.com        10.0.0.14
Agent:
***.comratings.com        10.0.0.41

1.1 域名解析配置

确保两主机的“/etc/hosts”文件中有以下配置:


# cat /etc/hosts

10.0.0.14    monitor.comratings.com
10.0.0.41    ***.comratings.com

注:在puppet的环境中一旦安装好puppet后,如果修改了主机名,那agent与master间的通信会有问题,因为它们之间的通信是需要证书,而证书又包含了主机的信息。

    先在前台启动puppet来观察一下,puppet服务端在首次的启动时会发生什么,所用到的命令是puppet,此命令的使用格式为“puppet <subcommand> [options] <action> [options]”,因这是master,所以子命令就是master,用“puppet help master”就可以查看master子命令的使用方法。

# puppet master -v --no-daemonize

Linux puppet的安装配置部署

 

    仔细观察上边的输出,在服务端启动时,puppet会自己创建一个ca,并为自己颁发一个证书,接下来它就可以接受agent端面的证书签署请求了,一旦服务端给agent签署证书签署请求,那agent就可以到master来请求catalog了。

puppet的证书管理的目录是在"/var/lib/puppet/ssl/":

Linux puppet的安装配置部署

检测服务端能正常启动后,结束掉前台运行的模式,用服务脚本的方式启动puppet master

# service puppetmaster start

Starting puppetmaster:                                     [  OK  ]

# netstat -tlnp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address    Foreign Address       State       PID/Program name   
tcp     0      0    0.0.0.0:8140         0.0.0.0:*         LISTEN         937/ruby

 puppet master自己给自己颁发了一个证书,每行前的“+”号表示已签发。

# puppet cert list -all

+ "monitor.comratings.com" (81:DB:AF:32:AA:C5:7A:DB:39:5F:71:15:5F:F8:9B:B6) (alt names: "DNS:monitor.comratings.com", "DNS:puppet", "DNS:puppet.comratings.com")

agent与master通信

在agent端运行

# puppet agent -v --no-daemonize --server monitor.comratings.com

Linux puppet的安装配置部署

这时候会卡在这里,agent端在启动时会生成一个证书签署请求,存放的路径在“/var/lib/puppet/ssl/certificate_requests/,

Linux puppet的安装配置部署

然后我们去matser端查看

# puppet cert list

  "***.comratings.com" (D6:D7:33:60:05:0A:88:82:07:28:0D:80:B2:70:BE:BF)

这里有一个待签名的请求,如果对其授权签名就运行如下命令

# puppet cert sign ***.comratings.com

Linux puppet的安装配置部署

注:对不签署证书的操作很容易搞错,因为签署时所用的命令是“puppet cert sign ***.comratings.com”,在cert的帮助信息中也有"revoke"和"clean"这样的选项,给人造成了混淆。如果master因某种原因拒绝了agent的证书签署请求,当agent的故障排除后需要再次向master端发起证书签署请求,这时你再次运行“puppet agent -v --no-daemonize --server nod1.test.com”命令后agent不会有任何反应,因为之前已发送了证书签署请求,这时应该把生成的证书签署请求删除后再运行命令重新向master连接,规范的做法如下

# puppet certificate_request destroy ***.comratings.com

也可以直接去删除“/var/lib/puppet/ssl/certificate_requests/***.comratings.com.pem”这个证书签署请求文件。


六、puppet的配置

1、配置文件及目录的介绍

  配置文件的路径是/etc/puppet

 ● auth.conf 配置文件是agent访问master的权限认证文件;

 ● autosign.conf 配置文件是master对agent证书自动签名的配置文件;

 ● fileserver.conf 配置文件是master向agent同步静态文件的配置文件;

 ● mainfests/ agent入库的导航文件与逻辑文件,此目录中的文件又称为清单;

 ● module/ 基础模块目录

 ● puppet.conf 配置文件是master守护进程的主要配置文件

2、master上创建site.pp文件

    agent访问master的一切配置管理工作都由site.pp文件开始的,它的作用是告诉master寻找并载入agent的配置信息,默认情况下site.pp文件会存放在/etc/puppet/manifests目录中

# mkdir /etc/puppet/manifests

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

notify{"hello world": }

当agent访问master时会调用site.pp文件中的notify资源,将其值(hello world)在屏幕上输出,如果我们看到了屏幕的输出,这就表明agent已经成功的访问了master

Linux puppet的安装配置部署

3、puppet 配置文件常用配置参数

1)[main]用于puppet全局配置

[main]
server = monitor.comratings.com     #指定puppet服务端地址
autoflush = false     #是否实时刷新日志到磁盘
logdir = /var/log/puppet          #日志目录
rundir = /var/run/puppet        #进程文件存放目录
ssldir = $vardir/ssl   存放签名文件的配置路径

2)[master]用于服务端配置

[master]
# 监听在所有网卡
bindaddress = 0.0.0.0   
# 监听端口
masterport = 8140      
# 报告存放目录,客户端的每次执行会生成一份以日期+时间命令的yaml文件报告
reportdir = /var/lib/puppet/reports  
# 自动授权签名配置文件
autosign = true
autosign = /etc/puppet/autosign.conf

注:可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf 文件的位置没有修改)

cat > /etc/puppet/autosign.conf <<EOF

*.comratings.com

EOF

这样就会对所有来自 comratings.com 的机器的请求,都自动签名。


3)[agent]用于客户端配置

[agent]

#


4、manifests和modules目录介绍

    manifests目录中存放了配置管理代逻辑和site.pp入口文件,所有的agent访问master时优先匹配到site,pp文件中的node节点。节点与节点间有支持继承

   下面来看一下site.pp文件中定义的node节点格式

node ' web.puppet.com' {

    #省略

node ' ***.puppet.com' {

    #省略

node default {

    #省略

当agent访问master时就会匹配这些节点,并获取node节点中的配置信息,当没有匹配到相应的node节点时,就会匹配默认节点。

    modules目录又称“基础模块”目录,它由不同的目录和class类文件组成,这些目录和文件是完成一个任务的子集,最终可以通过manifests串联modules中的这些子集来完成一个完整的任务,这就是基础模块的作用,如何获取这些基础模块呢,一种是从官方获取基础模块,另一种是自己开发基础模块。



七、puppet资源详解


1puppet进阶指南——file资源详解

2、puppet进阶指南——filebucket资源详解

3、puppet进阶指南——host资源详解

4、puppet进阶指南——user资源详解

5、puppet进阶指南——package资源详解

6、puppet进阶指南——service资源详解

7、puppet进阶指南——exec资源详解



八、puppet案例


puppet案例介绍




欢迎关注http://www.wzlinux.com:45 和http://www.wzlinux.com 。