龙空技术网

运维自动化工具:Puppet 应用部署(上)

删库跑路吧 496

前言:

此刻姐妹们对“centos7puppet”大概比较着重,朋友们都想要剖析一些“centos7puppet”的相关知识。那么小编在网络上汇集了一些关于“centos7puppet””的相关内容,希望兄弟们能喜欢,同学们快快来学习一下吧!

说明:由于头条篇幅有限,分上下两部分内容呈现给大家,你现在看到的是上半部分

技能目标:

· 熟悉Puppet工作原理

· 能够进行Puppet部署与应用

4.1 案例一分析

4.1.1 案例概述

作为一名系统管理员,维护服务器正常运行是最基本的职责。在管理几台到几十台服务器时,大部分管理员喜欢写自己的小工具来维护。但是随着服务器数量的增多,任务量也逐渐增加,这时就需要简洁的、强大的框架来完成系统管理任务。

为实现这一目的,引入一批工具。这批工具是"可编程"的,系统管理员只需要为这批工具写上几行"代码",它便会自动完成所有的工作, Puppet就是这批运维自动化工具中的其中一种。在一些大型互联网企业中,Puppet运维自动化工具管理着几百甚至上千台服务器,它可以针对多台服务器进行统一操作,如部署统一软件、进行统一上线维护等,而且能够快速完成上线部署,减少人力并降低人力误操作风险。

4.1.2 案例前置知识点

1.Puppet工作原理

Puppet的目的是让管理员只集中于要管理的目标,而忽略实现的细节。Puppet既可以在单机上使用,也可以以C/S结构使用。在大规模使用Puppet的情况下,通常使用C/S结构。在这种结构中Puppet客户端只运行Puppet Client,Puppet服务器端只运行Puppet Master。

Puppet管理工具的工作流程如图4.1所示。

图4.1

(1)客户端Puppet调用Facter工具(Facter是通过SSL加密收集及检测分析客户端配置信息的一个工具),Facter探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息通过SSL连接发送到服务器端。

(2)服务器端的Puppet Master 通过Facter工具分析检测客户端的主机名,然后找到项目主配置文件manifest里面对应的node配置, 并对该部分内容进行解析。Facter发送过来的信息可以作为变量处理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先进行语法检查,如果语法没错,就继续解析。解析的结果生成一个中间的"伪代码",然后把伪代码发给客户端。

(3)客户端接收到"伪代码"并且执行,客户端把执行结果发送给服务器。

(4)服务器端把客户端的执行结果写入日志。

2.Puppet工作中的注意事项

Puppet工作过程中有以下两点值得注意。

(1)为了保证安全,Client和Master之间是基于SSL和证书的,只有经Master证书认证的Client才能与Master通信。

(2)Puppet会让系统保持在人们所期望的某种状态并一直维持下去。例如检测某个文件并保证其一直存在,保证SSH服务始终开启,如果文件被删除了或者SSH服务被关闭了,Puppet下次执行时(默认30分钟),会重新创建该文件或者启动SSH服务。

4.1.3 案例环境

1. 本案例实验环境

本案例主要演示批量管理客户端SSH服务,案例实验中使用的四台服务器均采用CentOS7.3系统版本且图形化安装,要求能上互联网,Selinux和防火墙均已关闭。拓扑图如下4.2所示:

图4.2

服务器具体信息如表4-1所示。

表4-1

2. 案例需求

使用Puppet批量修改客户端SSH服务端口。

3. 案例实现思路

(1)环境准备工作;

(2)安装Puppet Master和Puppet Client;

(3)配置测试节点;

(4)客户端主动拉取和服务端主动推送。

4.2 案例一实施

4.2.1 Puppet 安装与部署

1. 规划服务器主机名

在小规模Puppet环境下,一般是修改/etc/hosts文件实现服务通过主机名进行通信,然而上千台服务器,需要搭建自己的DNS服务器来实现服务通过主机名进行通信。此实验我们通过修改/etc/hosts文件来实现。

[root@node1 ~]# hostnamectl set-hostname master.puppet.com

[root@node1 ~]# bash

[root@master ~]# hostname

master.puppet.com

另外三台服务器上分别修改主机名。

[root@node2 ~]# hostnamectl set-hostname client01.puppet.com

[root@node3 ~]# hostnamectl set-hostname client02.puppet.com

[root@node4 ~]# hostnamectl set-hostname ntp.puppet.com

在四台服务器的/etc/hosts文件中都添加以下几行地址解析记录。

vim /etc/hosts

192.168.9.233 master.puppet.com

192.168.9.234 client01.puppet.com

192.168.9.235 client02.puppet.com

192.168.9.236 ntp.puppet.com

2. 搭建时间服务器

由于Puppet使用的SSL证书,依赖时间同步,所以需要搭建NTP服务器。

1)搭建NTP Server

[root@ntp ~]# yum install -y ntp

[root@ntp ~]# vim /etc/ntp.conf \\添加以下两行

server 127.127.1.0

fudge 127.127.1.0 stratum 8

上述配置的作用是当/etc/ntp.conf中定义的server都不可用时,将使用local时间作为NTP服务提供给NTP客户端。修改完/etc/ntp.conf文件后即可启动NTP服务。

[root@ntp ~]# systemctl start ntpd

[root@ntp ~]# systemctl enable ntpd //加入开机启动

Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

[root@ntp ~]# ntpstat //查看时间同步状态

synchronised to local net at stratum 9

time correct to within 7949 ms

polling server every 64 s

2)节点同步时间

其余三台主机都要执行时间同步操作,下面仅以在master.puppet.com主机为例进行演示。

[root@master ~]# ntpdate ntp.puppet.com

13 Jun 17:36:49 ntpdate[4761]: step time server 192.168.9.236 offset -9.317174 sec

3. 安装Puppet Master

从官网下载Puppet源puppetlabs-release-7-12.noarch.rpm,上传到master.puppet.com服务器上。

1)安装puppetlabs源

[root@master ~]# rpm -ivh puppetlabs-release-7-12.noarch.rpm

警告:puppetlabs-release-7-12.noarch.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 4bd6ec30: NOKEY

准备中... ################################# [100%]

正在升级/安装...

1:puppetlabs-release-7-12 ################################# [100%]

2)安装并启动Puppet服务端

[root@master ~]# yum install -y puppet-server

[root@master ~]# systemctl start puppetmaster

[root@master ~]# systemctl enable puppetmaster

Created symlink from /etc/systemd/system/multi-user.target.wants/puppetmaster.service to /usr/lib/systemd/system/puppetmaster.service.

4. 安装Puppet Client

两台客户端安装并配置Puppet,下面仅以client01.puppet.com为例进行操作演示。从官网下载Puppet源puppetlabs-release-7-12.noarch.rpm,上传到两台客户端服务器上。

1)安装puppetlabs源

[root@client01 ~]# rpm -ivh puppetlabs-release-7-12.noarch.rpm

警告:puppetlabs-release-7-12.noarch.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 4bd6ec30: NOKEY

准备中... ################################# [100%]

正在升级/安装...

1:puppetlabs-release-7-12 ################################# [100%]

2)客户端安装Puppet

[root@client01 ~]# yum install -y puppet

3)修改客户端配置文件

在/etc/puppet/puppet.conf文件中的[main]标题下添加"server = master.puppet.com"配置字段用于设置Puppet Master的域名。

[root@client01 ~]# vim /etc/puppet/puppet.conf

server = master.puppet.com

5. 注册

1))客户端申请注册

在两台客户端上申请注册,下面只是在client01.puppet.com上做演示。

[root@client01 ~]# puppet agent --server=master.puppet.com --no-daemonize --verbose

Info: Caching certificate for ca

Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml

Info: Creating a new SSL certificate request for client01.puppet.com

Info: Certificate Request fingerprint (SHA256): 87:BC:82:A5:5E:92:2F:F8:D6:51:1F:05:E5:A4:EE:62:FB:72:91:24:96:5D:28:C9:BD:9B:BF:72:EC:E0:C1:81

Info: Caching certificate for ca

等待一会儿可以按Ctrl+C结束,从服务器端查看到申请信息。

[root@master ~]# puppet cert --list //在master端查看申请注册的客户端

"client01.puppet.com" (SHA256) 87:BC:82:A5:5E:92:2F:F8:D6:51:1F:05:E5:A4:EE:62:FB:72:91:24:96:5D:28:C9:BD:9B:BF:72:EC:E0:C1:81

"client02.puppet.com" (SHA256) 68:3D:C2:12:6D:D2:5E:45:51:C6:96:95:27:04:4F:16:9B:6C:FC:B9:BC:2A:23:D3:41:96:CA:4C:11:53:86:2C

2)完成注册

在Master上将所有申请未注册的客户端进行注册。

[root@master ~]# puppet cert sign --all

Notice: Signed certificate request for client01.puppet.com

Notice: Removing file Puppet::SSL::CertificateRequest client01.puppet.com at '/var/lib/puppet/ssl/ca/requests/client01.puppet.com.pem'

Notice: Signed certificate request for client02.puppet.com

Notice: Removing file Puppet::SSL::CertificateRequest client02.puppet.com at '/var/lib/puppet/ssl/ca/requests/client02.puppet.com.pem'

注册成功后,可以通过目录去查看已经注册的客户端。

[root@master ~]# ll /var/lib/puppet/ssl/ca/signed/

总用量 12

-rw-r--r-- 1 puppet puppet 1960 6月 14 11:27 client01.puppet.com.pem

-rw-r--r-- 1 puppet puppet 1960 6月 14 11:27 client02.puppet.com.pem

-rw-r--r-- 1 puppet puppet 2037 6月 13 17:58 master.puppet.com.pem

此时客户端已经完成证书的请求与签名。

4.2.2 配置实例

为了保护Linux的SSH端口,批量修改客户端SSH端口,将默认端口22修改为9922,并实现重启工作。在Master端创建SSH模块,模块目录为ssh,模块下面有三个文件:manifests、templates和files。

· manifests里面必须要包含一个init.pp的文件,这是该模块的初始(入口)文件,导入一个模块的时候,会从init.pp开始执行。可以把所有的代码都写到init.pp里面,也可以分成多个pp文件,init再去包含其他文件,定义class类名的时候必须是ssh,这样才能实现调用。

· files目录是该模块的文件发布目录,Puppet提供一个文件分发机制,类似rsync的模块。

· templates目录包含erb模型文件,这个和file资源的template属性有关(很少用)。

1. 配置测试节点

Master需要使用的相关配置文件如下:

· 节点信息:/etc/puppet/manifests/nodes/。

· 模块信息:/etc/puppet/modules/。

1)Master上创建需要的目录

[root@master ~]# cd /etc/puppet/

[root@master puppet]# mkdir -p modules/ssh/{manifests,templates,files}

[root@master puppet]# mkdir manifests/nodes

[root@master puppet]# mkdir modules/ssh/files/ssh

[root@master puppet]# chown -R puppet modules/ //修改权限

[root@master puppet]# ll modules/ssh //查看/etc/puppet/modules/ssh目录下的结构

总用量 0

drwxr-xr-x 3 puppet root 17 6月 14 11:53 files

drwxr-xr-x 2 puppet root 6 6月 14 11:53 manifests

drwxr-xr-x 2 puppet root 6 6月 14 11:53 templates

2)创建模块配置文件install.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/install.pp

//输入以下信息(首先确定客户端安装SSH服务)

class ssh::install{

package{ "openssh":

ensure => present,

}

}

3)创建模块配置文件config.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/config.pp

//输入以下信息配置需要同步的文件

class ssh::config{

file { "/etc/ssh/sshd_config": //配置客户端需要同步的文件

ensure => present, //确定客户端此文件存在

owner =>"root", //文件所属用户

group =>"root", //文件所属组

mode =>"0600", //文件属性

source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",

//从服务器端同步文件

require => Class["ssh::install"],

//调用install.pp确定ssh已经安装

notify => Class["ssh::service"],

//如果config.pp发生变化通知service.pp

}

}

4)创建模块配置文件service.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/service.pp

class ssh::service {

service {"sshd":

ensure=>running, //确定ssh运行

hasstatus=>true, // Puppet该服务支持status命令,即类似service sshd status

hasrestart=>true, // Puppet该服务支持restart命令,即类似service sshd restart

enable=>true, //服务器是否开机启动

require=>Class["ssh::config"] //确认config.pp调用

}

}

5)创建模块主配置文件init.pp

[root@master ~]# vim /etc/puppet/modules/ssh/manifests/init.pp

class ssh{

include ssh::install,ssh::config,ssh::service //加载以上配置文件

}

此时/etc/puppet/modules/ssh/manifests目录下有四个文件。

[root@master ~]# ll /etc/puppet/modules/ssh/manifests/

总用量 16

-rw-r--r-- 1 root root 395 6月 14 13:39 config.pp

-rw-r--r-- 1 root root 67 6月 14 13:46 init.pp

-rw-r--r-- 1 root root 85 6月 14 13:34 install.pp

-rw-r--r-- 1 root root 256 6月 14 13:44 service.pp

6)建立服务器端ssh统一维护文件

复制服务器端/etc/ssh/sshd_config文件到模块默认路径。

[root@master ~]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/

[root@master ~]# chown -R puppet /etc/puppet/modules/ssh/files/ssh/

7)创建测试节点配置文件,并加载SSH。

[root@master ~]# vim /etc/puppet/manifests/nodes/ssh.pp

node 'client01.puppet.com'{

include ssh

}

node 'client02.puppet.com'{

include ssh

}

8)将测试节点载入Puppet,即修改site.pp

[root@master ~]# vim /etc/puppet/manifests/site.pp

import "nodes/ssh.pp"

9)修改服务端维护的sshd_config配置文件

[root@master ~]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config

Port 9922 //取消注释并修改为9922

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::

10)重新启动Puppet Master服务

[root@master ~]# systemctl restart puppetmaster

2. 客户端主动拉取

在其中一台client01.puppet.com客户端上执行以下操作从服务器端主动拉取配置。

[root@client01 ~]# puppet agent -t

//省略部分

+++ /tmp/puppet-file20180614-20702-1bca8ub 2018-06-14 14:31:18.773477995 +0800

@@ -14,7 +14,7 @@

# SELinux about this change.

# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER

#

-#Port 22

+Port 9922

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::

Info: Computing checksum on file /etc/ssh/sshd_config

Info: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]: Filebucketed /etc/ssh/sshd_config to puppet with sum 0440a9608de01c4fa1c1dd6301b568ec

Notice: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]/content: content changed '{md5}0440a9608de01c4fa1c1dd6301b568ec' to '{md5}1a16baba38eb0a7e8a9e971f8a9f0845'

Info: /Stage[main]/Ssh::Config/File[/etc/ssh/sshd_config]: Scheduling refresh of Class[Ssh::Service]

Info: Class[Ssh::Service]: Scheduling refresh of Service[sshd]

Notice: /Stage[main]/Ssh::Service/Service[sshd]: Triggered 'refresh' from 1 events

Info: Creating state file /var/lib/puppet/state/state.yaml

Notice: Finished catalog run in 0.52 seconds

[root@client01 ~]# cat /etc/ssh/sshd_config | grep Port

Port 9922

#GatewayPorts no

查看服务器SSH服务是否重启,端口是否生效。

[root@client01 ~]# netstat -tunlp | grep ssh

tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 20919/sshd

tcp6 0 0 :::9922 :::* LISTEN 20919/sshd

3. 服务端主动推送

当大规模部署时不可能在每台客户端都采用拉取动作,而此时用服务器推送模式反而更合理。我们在客户端client02.puppet.com上做修改。

1)修改puppet配置文件,最后一行添加如下。

[root@client02 ~]# vim /etc/puppet/puppet.conf

listen = true //使Puppet监听8139端口

2)修改验证配置文件auth.conf定义一些验证信息及访问权限,最后一行添加如下。

allow * //允许任何服务端推送

3)启动Puppet Agent客户端

[root@client02 ~]# systemctl start puppetagent

4)修改客户端client02.puppet.com的/etc/ssh/sshd_config文件,将Port 9922还原成最初始状态,然后重启sshd服务。查看还原后的/etc/ssh/sshd_config的内容如下。

[root@client02 ~]# cat /etc/ssh/sshd_config | grep Port

#Port 22

#GatewayPorts no

[root@client02 ~]# netstat -tunlp| grep ssh

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 17794/sshd

tcp6 0 0 :::22 :::* LISTEN 17794/sshd

5)向client02.puppet.com节点推送配置

[root@master ~]# puppet kick client02.puppet.com

Triggering client02.puppet.com

Getting status

status is success

client02.puppet.com finished with exit code 0

Finished

6)校验结果

此时在client02.puppet.com客户端可以查看到SSH端口已经被更改为9922。

[root@client02 ~]# cat /etc/ssh/sshd_config | grep Port

Port 9922

#GatewayPorts no

[root@client02 ~]# netstat -tunlp | grep sshd

tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN 18090/sshd

tcp6 0 0 :::9922 :::* LISTEN 18090/sshd

4.3 案例二分析

4.3.1 案例概述

如果有工作经验的朋友看到部署,第一时间会想到是将新的应用替换或者覆盖旧的应用,然后重启服务之类的。没错,这里的自动部署就是将新的应用自动覆盖旧的应用,起到一个更新的作用,主要还是利用文件拷贝的原理。

网上可能大部分自动部署的案例是将SVN和Puppet Master整合在一台服务器上。如果SVN服务器里面的代码有更新,Puppet Agent就会根据自身设置拉取更新文件的时间完成全自动部署。这样做唯一的缺点就是如果出现问题不是能很好的控制,例如由于开发人员误操作导致一个错误的文件已提交到SVN服务器上,那么Agent节点也会更新成错误的文件,而Web站点将会出现故障。所以将SVN服务器、Puppet Master服务器、发布服务器建议全部单独分开,只要保证发布服务器上的代码不会更新错误的文件,Web站点也就不会自动更新。因此,就不能用Puppet Master作为文件服务器,而是以发布服务器作为文件服务器,所以需要用到Puppet的rsync模块。

4.3.2 案例前置知识点

自动部署工作流程图如下4.3所示。

图4.3

· 开发人员手工提交更新代码到SVN服务器上。

· 开发人员使用系统账号登录到发布服务器上,手工执行与发版相对应的项目脚本。也就是从SVN服务器上检出要更新的代码到发布机上。

· 待脚本执行完后,Web测试环境的应用会根据自身设置的时间自动更新或者更新后执行一些其它动作。这里暂定五分钟。

· 开发人员和测试人员进行相关测试。

· 如果测试环境通过测试,需要发布正式环境的话,请开发人员邮件或者电话通知运维人员要发版的项目。

· 同样运维人员也是手工执行与发版相对应的项目脚本(正式环境发布脚本),发布完成后五分钟左右通知开发人员发布结束。

4.3.3 案例环境

1. 本案例实验环境

本案例主要演示版本自动部署,这里使用五台服务器,五台服务器均采用CentOS7.3系统版本且图形化安装,要求能上互联网,Selinux和防火墙均已关闭。服务器具体信息如表4-2所示。

表4-2

确保发布服务器到另外四台服务器网络都是相通的。同时确保所有服务器的时间都同步。本案例的自动部署网络环境比较适合于公司内部机房有一条SDH专线连到IDC机房,而不是通过互联网去部署,因为这样都相当于在局域网内执行动作,速度和安全性都是有可靠的。SVN服务器、发布服务器、Puppet Master都在公司内部,Web正式节点和Web测试节点都在IDC机房中。所以说自动部署也在很大程度上依赖网络环境。

2. 案例需求

使用Puppet进行项目版本发布。

3. 案例实现思路

(1)准备工作;

(2)安装Puppet软件;

(3)安装配置SVN服务器;

(4)配置Puppet服务端和客户端;

(5)Puppet部署发布服务器;

(6)发布测试和正式应用。

4.4 案例二实施

1. 准备工作

1)添加域名解析

需要修改Puppet Master、发布服务器、Web正式节点、Web测试节点、SVN服务器的hosts文件,因为Puppet都是基于域名的方式来管理节点。如果IDC机房内部有DNS管理更好,因为以后更多的项目都会自动部署。以master.puppet.com主机为例,五台服务器都增加如下解析:

[root@master ~]# vim /etc/hosts

192.168.9.233 master.puppet.com

192.168.9.234 web.puppet.com

192.168.9.235 web-test.puppet.com

192.168.9.236 ntp.puppet.com release.puppet.com

192.168.9.200 svn.puppet.com

2) 同步时间,

五台服务器都需要进行时间同步操作,下面以Master为例进行演示。

[root@master ~]# ntpdate ntp.puppet.com

14 Jun 16:02:59 ntpdate[19748]: adjust time server 192.168.9.236 offset 0.001015 sec

2. 安装Puppet

在Puppet Master、发布服务器、Web正式节点和Web测试节点都需要安装Puppet源。Puppet Master需要安装puppet-server包,而发布服务器、Web正式节点和Web测试节点都被看作是Puppet的被管理节点,也就是通常所说的Agent端。

[root@master ~]# rpm -ivh puppetlabs-release-7-12.noarch.rpm

[root@master ~]# yum install -y puppet-server

[root@master ~]# systemctl start puppetmaster

[root@master ~]# systemctl enable puppetmaster

[root@master ~]# netstat -antpu |grep 8140

tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 18686/ruby

Web正式节点和Web测试节点在场景一中都已经安装了Puppet,下面只是演示在发布机上进行安装Puppet。进行安装Puppet操作之前,需要提前上传下载好的puppetlabs源的rpm包。

[root@release ~]# rpm -ivh puppetlabs-release-7-12.noarch.rpm

[root@release ~]# yum install -y puppet

3. 安装配置SVN服务器

1) 在svn.puppet.com服务器上安装SVN服务

[root@svn ~]# yum install -y subversion

2) 创建目录

[root@svn ~]# mkdir -p /var/svn/html

3)创建版本库

[root@svn ~]# svnadmin create /var/svn/html/

4)查看生成文件

[root@svn ~]# ls /var/svn/html/

conf db format hooks locks README.txt

5)修改svn配置文件

[root@svn ~]# vim /var/svn/html/conf/svnserve.conf

anon-access = read //匿名用户可读

auth-access = write //授权用户可写

password-db = /var/svn/html/conf/passwd //指定账号文件

authz-db = /var/svn/html/conf/authz //指定权限文件

6)设置账号密码

[root@svn ~]# vim /var/svn/html/conf/passwd

[users]

alpha = alphapasswd

sysadmin = sysadminpasswd

7)设置权限

[root@svn ~]# vim /var/svn/html/conf/authz

[/]

sysadmin = r

alpha = rw

[web]

sysadmin = r

alpha = rw

8)启动版本库

[root@svn ~]# svnserve -d -r /var/svn/html

9)创建测试目录并测试

[root@svn ~]# cd /var/svn/html/

[root@svn html]# mkdir web

[root@svn html]# svn import web -m "init svn"

提交后的版本为 1。

4. 配置Puppet Agent

因为Puppet Master管理客户端Agent是基于SSL方式通过证书通信,所以需要在所有的Agent角色上,也就是在发布服务器、Web正式节点、Web测试节点上修改Puppet的主配置文件/etc/puppet/puppet.conf,在[main]字段中指定Puppet服务端地址。因为场景一和场景二中某些主机名已经发生改变,所以都需要重新认证。下面以发布机上为例进行演示。

[root@release ~]# vim /etc/puppet/puppet.conf

server = master.puppet.com // Puppet Master的地址

然后在所有的Agent角色上分别执行如下命令。

[root@release ~]# puppet agent --server=master.puppet.com --verbose --no-daemonize

在Master进行查看申请注册的客户端。

[root@master ~]# puppet cert --list

"release.puppet.com" (SHA256) 7C:54:CF:19:0F:E8:65:3A:74:D7:0B:AB:5F:27:AA:2E:71:F0:BE:2A:27:8E:EF:6A:AB:66:C2:2B:C0:9A:FC:05

"web-test.puppet.com" (SHA256) 6E:E6:4C:48:99:73:B4:2D:96:38:94:38:0F:B8:EF:F1:35:2B:38:9C:E1:DF:2D:78:D7:BF:FD:DD:DA:6A:CF:BE

"web.puppet.com" (SHA256) DC:46:B3:2B:DB:44:20:B6:D8:F7:BA:EC:16:E5:54:64:D2:C2:1A:AF:EC:70:95:F7:2F:09:35:EC:88:4E:DA:39

在Puppet Master执行如下命令完成注册。

[root@master ~]# puppet cert sign release.puppet.com //单个客户端

Notice: Signed certificate request for release.puppet.com

Notice: Removing file Puppet::SSL::CertificateRequest release.puppet.com at '/var/lib/puppet/ssl/ca/requests/release.puppet.com.pem'

[root@master ~]# puppet cert sign --all //所有客户端

Notice: Signed certificate request for web.puppet.com

Notice: Removing file Puppet::SSL::CertificateRequest web.puppet.com at '/var/lib/puppet/ssl/ca/requests/web.puppet.com.pem'

Notice: Signed certificate request for web-test.puppet.com

Notice: Removing file Puppet::SSL::CertificateRequest web-test.puppet.com at '/var/lib/puppet/ssl/ca/requests/web-test.puppet.com.pem'

5. 使用Puppet部署发布服务器

1)下载concat和rsync模块

下面开始需要在发布服务器、Puppet Master都下载安装concat和rsync模块。如果发布服务器上不下载模块,一会发布服务器上生成的rsyncd.conf文件里面会是空的,Puppet 的rsync 模块在GitHub位置 。这里是使用git,如果服务器没有安装,可以先使用yum -y install git 来安装,如不想安装git也可以下载zip压缩包,解压到相应目录。

在发布服务器、Puppet Master上执行如下命令。

[root@release ~]# yum install -y git

[root@release ~]# cd /etc/puppet/modules/

[root@release modules]# git clone && mv pupmod-concat concat

正克隆到 'pupmod-concat'...

remote: Counting objects: 116, done.

Remote: Total 116 (delta 0), reused 0 (delta 0), pack-reused 116

接收对象中: 100% (116/116), 48.07 KiB | 40.00 KiB/s, done.

处理 delta 中: 100% (26/26), done.

[root@release modules]# git clone && mv pupmod-rsync rsync

正克隆到 'pupmod-rsync'...

remote: Counting objects: 36, done.

Remote: Total 36 (delta 0), reused 0 (delta 0), pack-reused 36

Unpacking objects: 100% (36/36), done.

[root@release modules]# ll

总用量 0

drwxr-xr-x 5 root root 72 6月 14 17:09 concat

drwxr-xr-x 8 root root 118 6月 14 17:10 rsync

2) 配置Puppet Master

Puppet Master开始创建管理Agent节点目录及文件,方便以后管理。

[root@master ~]# mkdir -p /etc/puppet/manifests/nodes

[root@master ~]# vim /etc/puppet/manifests/nodes/release.puppet.com.pp

class rsync::client inherits rsync {

}

node 'release.puppet.com' {

include 'rsync::server'

rsync::server::global { 'global':

address => '192.168.9.236'

}

rsync::server::section { 'web':

comment => 'This is formal file path',

path => '/var/www/html/web',

hosts_allow => '192.168.9.234'

}

rsync::server::section { 'web_test':

comment => 'This is test file path',

path => '/var/www/html/web_test',

hosts_allow => '192.168.9.235'

}

}

3)创建site.pp配置文件

在site.pp配置文件中定义 Puppet 相关的变量和默认配置,是Puppet最先读取的文件。

[root@master ~]# vim /etc/puppet/manifests/site.pp

import "nodes/release.puppet.com.pp"

4)自动配置发布服务器

[root@release ~]# puppet agent --server=master.puppet.com --test -v

Info: Retrieving pluginfacts

Info: Retrieving plugin

Info: Caching catalog for release.puppet.com

Info: /Stage[main]/Rsync/Tidy[/etc/rsync]: File does not exist

Info: Applying configuration version '1528969467'

Notice: /Stage[main]/Rsync/File[/etc/rsync]/ensure: created

Notice:

//省略部分

Notice: /Stage[main]/Rsync::Server/Service[rsync]/ensure: ensure changed 'stopped' to 'running'

Info: /Stage[main]/Rsync::Server/Service[rsync]: Unscheduling refresh on Service[rsync]

Notice: Finished catalog run in 8.25 seconds

查看发布服务器的/etc目录,发现已经自动生成rsyncd.conf文件,但是rsync服务是未启动的。自动生成的/etc/rsyncd.conf文件内容如下。

[root@release ~]# cat /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

syslog facility = daemon

port = 873

address = 192.168.9.236

[web]

comment = This is formal file path

path = /var/www/html/web

use chroot = false

max connections = 0

max verbosity = 1

lock file = /var/run/rsyncd.lock

read only = true

write only = false

list = false

uid = root

gid = root

outgoing chmod = o-w

ignore nonreadable = true

transfer logging = true

log format = "%o %h [%a] %m (%u) %f %l"

dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war

hosts allow = 192.168.9.234

hosts deny = *

[web_test]

comment = This is test file path

path = /var/www/html/web_test

use chroot = false

max connections = 0

max verbosity = 1

lock file = /var/run/rsyncd.lock

read only = true

write only = false

list = false

uid = root

gid = root

outgoing chmod = o-w

ignore nonreadable = true

transfer logging = true

log format = "%o %h [%a] %m (%u) %f %l"

dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.jar *.pdf *.sar *.war

hosts allow = 192.168.9.235

hosts deny = *

标签: #centos7puppet