puppet部署及应用
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息。
工作流程
puppet客户端首先会连接到puppet服务器端,并且通过facter工具把客户端的基本配置信息发送给服务器端. 服务器端通过分析客户端的主机名,通过node 定义,找到该主机的配置代码,然后编译配置代码,把编译好的配置代码发回客户端,客户端执行代码完成配置.并且把代码执行情况反馈给puppet服务器端.
常用资源
常见的资源有notify(调试与输出),file(配置文件),package(软件安装),service(服务管理),exec(执行命令),cron(定时脚本),user(用户),group(用户组)
前期准备
准备两台Centos7虚拟机,一台用作server端,一台用作agent端,配置IP地址和hostname(要严格匹配FQDN格式),同步时间,关闭防火墙和selinux,配置ip地址和hostname映射
hostname | ip |
---|---|
puppet-master.jun.cc | 192.168.29.136 |
puppet-agent.jun.cc | 192.168.29.137 |
下载官方rpm包,并配置yum源
下载地址:http://yum.puppetlabs.com/el/7/products/x86_64/
部署puppet-master
#安装软件 [ ~]# yum install puppet-server puppet -y #启动服务 [ ~]#systemctl start puppetmaster start #查看启动情况 [ ~]# netstat -tnlp |grep 8140
修改配置文件
[ ~]# vi /etc/puppet/puppet.conf certname=puppet-master.jun.cc #定义自己签名认证的名称,即自己的主机名
部署puppet-agent
#安装软件 [ ~]# yum install puppet -y
修改配置文件
[ ~]# vi /etc/puppet/puppet.conf certname=puppet-agent.jun.cc #定义自己签名认证的名称,即自己的主机名 server=puppet-master.jun.cc #指定puppetmaster runinterval=60 #定义agent多长时间主动从master拉取一次资源
实现master和agent的认证连接
agent端尝试发送注册申请
[ ~]# puppet agent -t
master端进行认证连接
#查看认证请求 [ ~]# puppet cert --list #签发认证 [ ~]# puppet cert sign --all
agent再次发送注册申请
[ ~]# puppet agent -t #生成证书在/var/lib/puppet/ssl
应用案例
1、创建文件
#编辑配置文件 [ ~]# vi /etc/puppet/manifests/site.pp #创建一个文件 #设置部署结点 node ‘puppet-agent.jun.cc‘{ #格式:文件资源{‘title‘: 属性 => 值, } #title可自行起名 file{‘aaa‘: #指定路径 path => "/tmp/puppet.txt", #添加文件内容 content => "Hello puppet agent"; } } #agent端手动拉取资源 [ ~]# puppet agent -t #查看执行情况 [ ~]# cat /tmp/puppet.txt Hello puppet agent[ ~]#
2、创建用户kawhi和www
#编辑配置文件 [ ~]# vi /etc/puppet/manifests/site.pp node ‘puppet-agent.jun.cc‘{ user{‘abc‘: name => kawhi, #present:必须存在 ensure => present, uid => 1024; } user{‘bcd‘: name => www, ensure => present, uid => 1056; } } #等待60s,agent自动拉取资源 #查看执行情况 [ ~]# id kawhi uid=1024(kawhi) gid=1024(kawhi) 组=1024(kawhi) [ ~]# id www uid=1056(www) gid=1056(www) 组=1056(www)
3、在agent安装vsftpd
#创建软件模块目录 #manifest目录是模块的功能代码目录 #files目录是资源目录 [ ~]# mkdir -pv /etc/puppet/modules/vsftpd/{manifests,files} #编写模块核心文件 [ ~]# vi /etc/puppet/modules/vsftpd/manifests/init.pp class vsftpd{ #配置yum源 yumrepo {"Server": descr => "Server repo", #需要提前在agent端挂载资源 baseurl => "file:///media/CentOS_6.10_Final", gpgcheck => "0", enabled => "1"; } #处理包 package {"vsftpd": ensure => installed, #关联yum资源时首字母需要大写 require => Yumrepo["Server"]; } #配置服务 service {"vsftpd": #开启服务 ensure => running; } } #调用模块 #编辑配置文件 [ ~]# vi /etc/puppet/manifests/site.pp node ‘puppet-agent.jun.cc‘{ include vsftpd } #检查配置语法 [ ~]# puppet parser validate /etc/puppet/modules/vsftpd/manifests/init.pp [ ~]# puppet parser validate /etc/puppet/manifests/site.pp #agent端手动拉取资源 [ ~]# puppet agent -t #查看服务状态 [ ~]# netstat -tnlp |grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2404/vsftpd