@sasaki
2016-04-23T00:40:36.000000Z
字数 5032
阅读 2862
Pricatice
@Title Puppet集中式配置管理系统学习使用
@Version v1.0
@Timestamp 2015-12-15 17:49
@Author Nicholas
@Mail redskirt@outlook.com
本文大部分参考自:http://dreamfire.blog.51cto.com/418026/1370853/
在制作Demo过程中也遇到一些小的bug,参考这个页面得以解决:http://www.oschina.net/question/54100_31764
关于Puppet架构及基本原理的学习,可参考:http://dongxicheng.org/cluster-managemant/puppet/
最近小组需要每人准备一份有关开源工具的分享Topic,轮到我准备的是Puppet,阅读了一些资料,部署演示了一个Demo。
注意:本实验完全采用自定义的certname名,如果不设置默认会使用系统变量hostname的值。
Puppet架构
puppet2是一个为实现数据库中心自动化管理而设计的配置管理软件。基于c/s架构。puppet的服务器端保存着所有的对客户端服务器的配置代码,在puppet里面叫做manifest。客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。
总之,Puppet把日常的系统管理任务代码化,代码化的好处是可以分享,保存,避免重复劳动,也可以快速恢复以及快速的大规模部署服务器。同时,manifest可以的根据客户端服务器的配置情况(硬件和软件)来动态生成。
在Unix/Linux系统管理的内容上面,通常就是管理软件包,用户,文件内容以及crontab等。在puppet的世界里面,这些内容都被看作是“资源”,每种资源都有对应的属性,例如软件包有安装和不安装的属性,文件有权限属性。puppet的代码主要就是由这些资源和资源的属性构成。
Puppet是一种集中式配置管理系统。
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户,CRON作业,和主机一起显然离散元素,如包装,服务和文件。
Puppet的简单陈述规范语言的能力提供了强大的classing制定了主机之间的相似之处,同时使他们能够提供尽可能具体的必要的,它依赖的先决条件和对象之间的关系清楚和明确。
文档库
puppet官网:
https://docs.puppetlabs.com/
提供两种类型文档:
当前最新版本Puppet 4.3,本文使用的Puppet 2.7。
Puppet有两种执行模式
Puppet语法
因为puppet是用ruby编写的,因此puppet的语法也和Ruby类似,都是很简单的面对对象的高级语言。
puppet把需要管理的内容抽象成为资源,每种资源有不同的属性,因此puppet语言就是描述这些资源的属性以及资源之间关系的语言。
有关语法具体可参考官方文档:
http://docs.puppetlabs.com/puppet/2.7/reference/index.html
Puppet的安装非常简便,用Yum安装即可,但是我CentOS系统默认的yum源没有Puppet相关包,使用阿里云的源(mirrors.aliyun.com)得以安装。
安装Puppet-server、puppet和facter(Master节点)
[root@master ~]# yum install puppet puppet-server facter
配置puppet.conf
注意:这个里面配置了两个certname名称,其中[master]中配置的certname是为所有节点认证用的master名称,[agent]中配置的certname是他本身agent的名称,当然不配置默认是和master的名称是一样的。
[root@master puppet]# vim /etc/puppet/puppet.conf #注释已删除
[main]
logdir = /var/log/puppet #默认日志路径
rundir = /var/run/puppet #PID存放路径
ssldir = $vardir/ssl #证书存放目录,默认为/var/lib/puppet
[agent]
cername=slave01
runinterval=3600
listen=true
[master]
certname=master
创建site.pp文件
site.pp文件是puppet读取所有模块pp文件的开始,在3.0版本以前必须设置,否则服务无法启动。
[root@master ~]# touch /etc/puppet/manifests/site.pp
启动Puppetmaster服务
[root@master puppet]# /etc/init.d/puppetmaster restart
Stopping puppetmaster: [ OK ]
Starting puppetmaster: [ OK ]
查看本地证书情况
[root@master puppet]# tree /var/lib/puppet/ssl/
/var/lib/puppet/ssl/
├── ca
│ ├── ca_crl.pem
│ ├── ca_crt.pem
│ ├── ca_key.pem
│ ├── ca_pub.pem
│ ├── inventory.txt
│ ├── private
│ │ └── ca.pass
│ ├── requests
│ ├── serial
│ └── signed
│ ├── master master.pem
│ ├── master.pem
│ └── slave01.pem
├── certificate_requests
├── certs
│ ├── ca.pem
│ ├── master master.pem
│ └── master.pem
├── crl.pem
├── private
├── private_keys
│ ├── master master.pem
│ └── master.pem
└── public_keys
├── master master.pem
└── master.pem
9 directories, 18 files
[root@master puppet]# puppet cert --list --all #带+标示已经认证成功
+ "master" (33:57:A7:AC:DC:B7:1F:92:44:F4:0F:46:38:B4:A6:58)
查看监听状态
[root@master puppet]# netstat -nlatp | grep 8140
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 6173/ruby
[root@master puppet]# lsof -i:8140
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
puppetmas 6173 puppet 5u IPv4 20819460 0t0 TCP *:8140 (LISTEN)
以slave01为例:
安装puppet和facter
[root@slave01 ~]# yum install puppet facter
配置puppet.conf
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
[agent]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
server=master #指向puppetmaster端
certname=slave01 #设置自己的certname名
通过调试模式启动节点向Puppetmaster端发起认证
[root@slave01 ~]# puppet agent --test
info: Creating a new SSL key for slave01
info: Caching certificate for ca
info: Creating a new SSL certificate request for slave01
info: Certificate Request fingerprint (md5): 4F:84:95:69:0F:FD:33:BC:90:FC:9E:A0:F4:BB:CE:8E
Exiting; no certificate found and waitforcert is disabled
服务器端确定认证
[root@master puppet]# puppet cert --list --all
"slave01" (4F:84:95:69:0F:FD:33:BC:90:FC:9E:A0:F4:BB:CE:8E)
+ "master" (C1:E5:A2:9E:07:CA:6E:CE:20:B2:A7:C3:15:51:A1:2A)
[root@master puppet]# puppet cert --sign slave01
notice: Signed certificate request for slave01
notice: Removing file Puppet::SSL::CertificateRequest slave01 at '/var/lib/puppet/ssl/ca/requests/slave01.pem'
[root@master puppet]# puppet cert --list --all #带+标示已经注册成功
+ "master" (33:57:A7:AC:DC:B7:1F:92:44:F4:0F:46:38:B4:A6:58)
+ "slave01" (B9:91:B0:C6:75:CE:DA:F5:97:51:55:3C:1F:31:D5:8C)
如果一次性认证所有节点可使用
[root@master puppet]# puppet cert --sign --all
No waiting certificate requests to sign
也可通过tree工具来查看认证的节点
[root@master puppet]# tree /var/lib/puppet/ssl/
/var/lib/puppet/ssl/
├── ca
│ ├── ca_crl.pem
│ ├── ca_crt.pem
│ ├── ca_key.pem
│ ├── ca_pub.pem
│ ├── inventory.txt
│ ├── private
│ │ └── ca.pass
│ ├── requests
│ ├── serial
│ └── signed
│ ├── master.pem #已经注册成功
│ └── slave01.pem
├── certificate_requests
├── certs
│ ├── ca.pem
│ └── master.pem
├── crl.pem
├── private
├── private_keys
│ └── master.pem
└── public_keys
└── master.pem
9 directories, 14 files
在master节点新建site.pp文件
[root@master ~]# vim /etc/puppet/manifests/site.pp
node slave01 {
file {
"/tmp/testpuppet": #在slave节点上创建该文件
content=>"good morning!\n"; #文件中打印如下内容
}
}
在slave节点中请求新配置
[root@slave01 ~]# puppetd --test --server master
info: Caching catalog for slave01
info: Applying configuration version '1450250442'
notice: Finished catalog run in 0.03 seconds
[root@slave01 ~]# cat /tmp/testpuppet #可以看到已生成该文件
good morning!