Puppet简介
认识Puppet
Puppet是一个跨平台的集中化配置管理系统,它使用自有的描述语言,可管理配置文件、用户、Cron定时任务、软件包、系统服务等,Puppet把这些统称为“资源”。
Puppet的设计目标就是简化对这些资源的管理以及妥善处理资源之间的依赖关系。
国内外有很多公司都在使用Puppet,国外有Twitter、迪斯尼、Oracle/Sun、Google、RedHat等,国内有新浪、阿里巴巴、百度、腾讯、奇虎360、小米等。(《Puppet实战》刘宇著)
Puppet工作形式
- Puppet是基于Ruby语言并使用Apache协议授权的开源软件,它既能以客户端-服务端(C/S)的方式运行,也能独立运行。
- C/S方式运行时,客户端默认每30分钟会与服务端确认一次更新,以确保配置的一致性;当配置更新时,服务端也可以通知客户端实时更新配置。
- 在Puppet中,服务端叫做Master,客户端叫做Node,客户端的Puppet也叫做Agent;Node在向Master发送本机信息后,获取对应本机的配置文件(Catalog),Puppet在根据Catalog配置好后将结果反馈给Master。
在CentOS下安装Puppet
本人安装Puppet及测试的环境为CentOS 6及以上,以下内容可能仅适用于CentOS 6及以上版本。(PS:以下终端命令中,前面的 # 符号是代表的root用户命令提示符,不用输入到终端上。)
0 前期工作
0.1 使用ntp同步时间
- 由于puppet会定期进行配置的更新同步,所以会依赖于系统时间,如果各服务器系统时间有太大差距的话,同步可能会失败,所以要先同步一下服务器的时间。
- 第一种方法是通过
ntpdate time.nist.gov
命令同步,可添加定时任务进行同步,不过这种方法并不推荐,因为ntpdate
命令同步时间比较粗暴,是跳跃式的同步,可能会对服务器上的一些依赖于时间的任务会有影响。添加定时任务同步时间示例如下:# vim /etc/crontab
*/10 * * * * /usr/sbin/ntpdate time.nist.gov
- 第二种方法是通过
ntpd
服务同步时间,先配置好ntpd的配置文件:vim /etc/ntp.conf
,在其中添加:
server 1.pool.ntp.org
server 2.pool.ntp.org
server cn.pool.ntp.org prefer
如图:
之后启动ntpd
服务:# service ntpd start
(CentOS 6) 或# systemctl start ntpd.service
(CentOS 7),然后可用# ntpq -p
查看同步状态:
设置
ntpd
服务开机启动:# chkconfig ntpd on
(CentOS 6) 或# systemctl enable ntpd.service
(CentOS 7)。
0.2 关闭selinux
selinux是Linux系统的一种访问控制体系,很多时候在服务器上配置一些工具时遇到的问题都是selinux的锅,所以要省心不费力配置selinux的话,就直接关掉它吧:
# vim /etc/selinux/config
把 SELINUX=enforcing
改成 SELINUX=disabled
,如图:
重启系统,用命令# getenforce
可查看selinux的状态。
0.3 关闭防火墙或开放防火墙端口
Puppet需要用到网络同步状态,故需要开启防火墙的8140端口,或者干脆关闭防火墙。
CentOS 6:
关闭防火墙:
# service iptables stop
# chkconfig iptables off
开放8140端口:
# iptables -A INPUT -p tcp --dport 8140 -j ACCEPT
# service iptables save
CentOS 7:
关闭防火墙:
# systemctl stop firewalld.service
# systemctl disable firewalld.service
开放8140端口:
# firewall-cmd --permanent --add-port=8140/tcp --zone=public
# firewall-cmd --reload
1 安装Puppet
Puppet有很多种安装方法,本人使用的是最简单方便的yum安装,主要需要安装两个源:epel源和puppetlabs源。
1.1 安装epel源:
很简单,CentOS 6和CentOS 7都是一样的方法:
# yum install -y epel-release
1.2 安装puppetlabs源:
CentOS 6:
# rpm -Uvh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
# rpm --import http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
CentOS 7:
# rpm -Uvh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
# rpm --import http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
1.3 安装ruby
Puppet是基于ruby语言编写的,故需要先安装ruby:
# yum install -y ruby ruby-libs ruby-shadow
1.4 安装Puppet服务端和客户端
本人所用Puppet是以客户端-服务端(C/S)的方式运行,故需要分别在两台服务器上安装客户端和服务端。
服务端(master,IP: 192.168.18.130):
# yum install -y puppet puppet-server facter
客户端(agent,IP: 192.168.18.131):
# yum install -y puppet facter
1.5 配置系统
1.5.1 配置主机名
Puppet是通过主机名来识别各客户端的连接的,故需要配置好主机名,要有一定的规律,后面才好用正则表达式匹配。
CentOS6:
# hostname puppet.example.com
# vim /etc/sysconfig/network
HOSTNAME=puppet.example.com
CentOS 7:
# hostnamectl set-hostname puppet.example.com
1.5.2 配置hosts
若服务器所用主机名不是有效的域名,则需要配置hosts文件,确保服务端和客户端两边能ping通:
# vim /etc/hosts
192.168.18.130 puppetmaster.example.com puppet
192.168.18.131 node1.example.com
2 配置Puppet
yum安装的Puppet配置文件默认为/etc/puppet/puppet.conf
。
2.1 服务端:
# vim /etc/puppet/puppet.conf
[master]
pluginsync = true
reports = store
environment = production
certname = puppetmaster.example.com
如图:
2.2 客户端:
# vim /etc/puppet/puppet.conf
[agent]
certname = node1.example.com
server = puppetmaster.example.com
report = true
listen = true
如图:
由于配置了listen = true,故还需要:
# vim /etc/puppet/auth.conf
path /run
method save
auth any
allow puppetmaster.example.com
如图:
3 启动Puppet
先在服务端的/etc/puppet/manifests
中创建site.pp
文件,默认情况下,客户端连接master时会先读取此文件:
# cd /etc/puppet/manifests
# vim site.pp
notify {
"测试Puppet":
}
启动master服务:# service puppetmaster start
(CentOS 6)或# systemctl start puppetmaster.service
(CentOS 7)。不过第一次启动建议用# puppet master --verbose --no-daemonize
,这样能够看到详细的调试信息:
启动agent服务:# service puppet start
(CentOS 6)或# systemctl start puppet.service
(CentOS 7)。同样,第一次启动建议用# puppet agent --verbose --no-daemonize --debug
,这样能够看到详细的调试信息:
出现Did not receive certificate,说明master没有认证agent,返回master进行认证:
# puppet cert --list
可以查看请求认证的agent:
# puppet cert --sign node1.example.com
给agent认证签名:
返回agent可看到:
说明agent已连接master成功,并读取到“测试Puppet”这个notify资源。
4 结束语
至此,Puppet的简单搭建算是成功了,此文就仅讲到这里,后面会另开文章详细介绍Puppet的使用,如配置文件各项的意义、文件结构、资源的用法等等。