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方式。
简述:
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的主机认证
先来介绍一下我这里的环境,系统都是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
仔细观察上边的输出,在服务端启动时,puppet会自己创建一个ca,并为自己颁发一个证书,接下来它就可以接受agent端面的证书签署请求了,一旦服务端给agent签署证书签署请求,那agent就可以到master来请求catalog了。
puppet的证书管理的目录是在"/var/lib/puppet/ssl/":
检测服务端能正常启动后,结束掉前台运行的模式,用服务脚本的方式启动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
这时候会卡在这里,agent端在启动时会生成一个证书签署请求,存放的路径在“/var/lib/puppet/ssl/certificate_requests/,
然后我们去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
注:对不签署证书的操作很容易搞错,因为签署时所用的命令是“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
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资源详解
八、puppet案例
欢迎关注http://www.wzlinux.com:45 和http://www.wzlinux.com 。