第二十二周微职位puppet

描述puppet的工做原理,部署一套puppet系统.node

  1. puppet的工做原理:
    python

    Puppet的目录是让管理员只集中于要管理的目标,而忽略实现的细节。Puppet便可以运行在单机上,也能够以C/S结构使用。在大规模使用puppet的状况下,一般使用C/S结构,在这种结构中puppet客户端只运行puppeclient,puppet服务端只运行puppemastershell

  2. wKioL1ninGrDofp1AAB6qiFIWnM380.png

1)      客户端puppet调用fast探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息使用SSL链接发送给服务器端
2)      服务器端的puppetmaster经过fast工具分析检测客户端的主机名,而后找到项目的主配置文件manifest里面对应的node配置,并对该部份内容进行解析,fast发送过来的信息能够做为变量处理,node牵扯到的代码才被解析,没牵扯到的不解析,解析分为语法检查,若是语法没错,继续解析,解析结果生成一个结果‘伪代码’,而后把‘伪代码’发给客户端
3)      客户端收到‘伪代码’而且执行,客户端把执行结果发给服务器
4)      服务器端把客户端的执行结果写入日志

 3.puppet工做过程当中须要注意的事项:
安全

1)      为了保证安全,Client和Master之间是基于SSL和证书的,只有经Master证书认证的Client能够与Master通讯
2)      Puppet会让系统保持在人们所指望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证SSH服务始终开启,若是文件被删除了或者ssh服务关闭了,puppet下次执行时(默认30分钟)会从新建立该文件或者启动SSH服务

  4.项目环境:ruby

wKioL1nincjgxbylAABd_IMrDis658.png

主机服务器

操做系统运维

IP地址ssh

主要软件ide

Puppetmaster工具

Centos6.5

192.168.31.83

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient1

Centos6.5

192.168.31.184

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient2

Centos6.5

192.168.31.79

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

NTP server

Centos6.5

192.168.31.224


  5.项目实施:

1)搭建puppetmaster

规划服务器主机名

在小的规模puppet环境下,通常修改/etc/hosts文件,然而在上千台服务器的环境中,咱们要搭建本身的DNS服务器来实现服务经过主机名来进行通讯,此项目咱们经过修改/etc/hosts文件来实现

wKiom1nioWuzI54KAAAHkzbcj_c976.png

 修改HOSTNAME=master.zjz.cn

wKioL1nins6xwnGIAAAJ7kPxaYo092.png

wKiom1niocihNEKTAAAGp3pZFvM969.png

添加一下几行:

wKioL1ninyuBZ1c2AACBIXlvpsk312.png

还有一种方式来修改主机名,不用重启系统的方式

2)时间同步服务器

因为facter使用SSL证书,依赖时间同步,因此须要搭建NTP服务器

1、搭建NTP Server

wKioL1nin-_T96YuAAAItdql7Ns029.png

wKiom1niotbgD4oPAAAQBuB1aqI429.png

打开ntp的配置文件添加下面两行

wKiom1niovDy4BRJAAAI4majQj0582.png

wKioL1nioDuz_mZhAAAMDj9JVw4601.png

其做用是当/etc/ntp.conf中定义的server都不可用时,将使用local时间做为NTP服务提供给NTP客户端

启动NTP服务,并设置为开机自启

wKiom1nio13hVY1iAAA7NK0MKg4995.png

2、Puppetmaster 做为NTP客户端配置

wKiom1nio52SeqTbAAAI-8QC8d0285.png

wKioL1nioOeTjK0tAAA6j9vJw_I661.png

3、安装ruby

必定按照一下前后顺序安装,先安装compat-readline5,也能够一并安装

首先新建一个挂载系统盘的目录(由于咱们安装的包,在系统盘中有,使用rpm直接安装)

wKiom1nipBHRZL04AAAJ_0xdroY378.png

挂载系统盘

wKioL1nioXexmy2-AAA1NwSxvNY334.png

切换到挂载目录的Packages目录中

wKioL1niocSh_5McAAALqD33qw4933.png

开始安装

wKioL1nioimAKPm2AAAq6Icq70U366.png

安装完成后,查看版本

wKioL1niolaRm28TAABRtu6DEWg195.png

4、Puppet、facter安装

wKiom1nipUuQq1ehAAAtjYJxyQw072.png

经过facter工具分析检测客户端传输过来的信息

安装facter

a)      解压源码包

wKioL1niovGiuqFsAABVAdMN1pU683.png

新建一个存放安装包的目录,下载源码包

wKiom1nipdGSNR-bAAAu-k02Kv8766.png

b)      编译安装源码包

wKiom1niphCBC7nvAABYlh2RVGE877.png

安装puppet:

(一)  解压源码包

先下载源码包

wKioL1nio5_w1FydAABE2_BuiRM801.png

wKioL1nio7TC-0w7AAAvXw5cY7M672.png

(二)  编译安装

wKiom1nips6TsAXQAABxuhnDJCI666.png

(三)  复制配置文件

wKiom1nipvaSD7f2AAB5ZvouToM660.png

(四)  修改文件属性

wKioL1nipHqijy6LAAAzXl-p-fg211.png

(五)  建立puppet主目录

wKioL1nipO_guihtAABn6UGgIfI755.png

注意:这两个目录的名称是固定的

5、Puppet服务证书请求与签名

生产环境中iptables默认是关闭的

Master端配置

wKioL1nipQ3QKHOrAAAJxGaymnI308.png

(一)  修改配置文件

在【main】标题下添加如下一行:配置服务器模块的路径

wKiom1nip_zgToFSAADVqksy-Io419.png

(二)  启动puppet主程序

wKioL1nipY2ivRtcAAAz6AbPeFQ474.png

wKiom1niqEPA8zAJAAAg1FagrVc214.png

  6.搭建puppetclient:

首先配置puppetclient1,步骤以下:

1)      规划服务器主机名

wKioL1nipjKyAfY8AAA3UG2pCdw294.png

wKiom1niqOih2sY1AAANy1Bauh4052.png

wKiom1niqOjBb9X5AAAVXjGHLrA194.png

wKioL1nipjKjOi8jAAAJrFfK9Mc675.png

添加一下几行

wKiom1niqTXgjF5UAACCJaKxZ9c384.png

确保能够经过域名ping同puppetmaster,即ping master.zjz.cn

wKioL1nipq2SAj_jAAB6GFNJqT4609.png

2)      服务器时间同步

wKioL1nipx7SgtQIAAAJzShnJbE162.png

wKiom1niqdTx97E2AABA7mykeTw308.png

3)      安装ruby

必定按照一下顺序安装,先安装compat-readline5,也能够一块儿安装

wKioL1nip3PQzAnbAACBzKjB_RI721.png

安装同master安装步骤

安装完成后检查版本

wKiom1niqkeD0e_KAABK1YdBdBU850.png

4)      Puppet、facter安装

wKioL1nip8zzJ9OZAAA08srgBqw330.png

经过facter工具分析检测客户端传输过来的信息

安装facter:

1、解压源码包

wKiom1niqtWRFr7EAABQP178AFw099.png

wKioL1niqDTTPvieAAAktOGs7Ck571.png

2、编译安装源码包

wKiom1niqyqQNHmXAABGpr_IaIQ308.png

安装puppet:

1、解压源码包

wKioL1niqKzyhOJrAAA7DZMAbvc599.png

2、编译安装源码包

wKioL1niqWDROCslAABxGkP2ue4363.png

3、复制配置文件

wKiom1niq7Tg1gyOAAArsaB2rXQ087.png

wKiom1niq7TBzhv8AAArK-vDOg8274.png

4、修改文件属性

wKioL1niqaCShFL5AAAhCsgw5wk382.png

5、Puppet服务证书请求与签名

生产环境中iptebles默认是所有关闭的

wKiom1nirISiUtDHAAAluZ3OjeA285.png

Puppetclient1和puppetclient2同样,以下操做

修改client配置文件

wKiom1nirO6R7zI-AAA5unZZ47Y495.png

在【main】标题下加上一行,设置服务器的域名

wKioL1niqlHx_bB6AADdH38cY7g713.png

Puppetclient2和puppetclient1配置过程相似,注意将主机名修改成client2

申请和注册

Client端:

分别在puppetclient1和puppetclient2上进行注册

wKioL1niqrKQm-csAABZ1ljEjPk668.png

wKioL1niqrLB7YuLAABUt8dvZqc568.png

此时能够按Ctrl+C结束,由于puppet一直在等待任务,可是已经从server查看到了申请信息

Master端

查看申请注册的客户端:

wKiom1nirZyzSTJSAABvViSFhgk837.png

将未注册的客户端进行注册

wKioL1niqy3AjfOgAABepsQw2Ng633.png

能够经过目录查看已注册的客户端

wKioL1niq2WxhbA9AAC09fBfFYk156.png

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

  七、配置实例

     1.      配置一个测试节点

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

模块信息:/etc/puppet/modules

为了保护Linux的ssh端×××破,批量修改客户端sshd端口,将端口22修改成9922,并实现重启工做

建立ssh模块,模块目录为ssh,模块下面有三个文件:mainfests、templates和files

Mainfests里面必需要包含一个init.pp文件,这是该模块的初始文件,导入一个模块的时候,会从init.pp开始执行。能够把因此的代码写到init.pp文件里面,也能够分红多个pp文件,init再去包含其余文件,定义class类名的时候必须是ssh,这样能实现调用

Files目录是该模块的文件发布目录,puppet提供一个文件的分发机制,相似rsync的模块

Templates目录包含erb模型文件,这个和file资源的template属性有关(不多用)

Master端:

1)      建立须要的必要的目录

wKiom1nirreT7v5QAACER_3nUuI798.png

此时/etc/puppet/modules/ssh/目录下结构:

wKioL1nirDHTtLvVAAC63-M9__w834.png

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

wKiom1nirzayIeJcAAAnp6nNs5U353.png

输入一下信息:

wKioL1nirLjDIzF7AAAQw9tGWJQ107.png

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

wKiom1nir6miBHfjAAAl85R4ifI587.png

输入一下信息:

wKiom1nir-TxRxrpAACTF6JCp-A702.png

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

wKiom1nisGmDuTDfAAAs4lFxtAE581.png

输入一下信息:

wKiom1nisIOQn4yrAACEUT6NGIk359.png

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

wKioL1niriSwGgA1AAAxjl-5Pzw537.png

输入一下信息:

wKioL1niriSDSaAYAAA20vJoLik809.png

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

wKiom1nisRbD0_GIAADZF4WoyVU312.png

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

因为服务器端和客户端的sshd_config文件默认同样,此时将服务器端/etc/ssh/sshd_config复制到模块默认路径

wKiom1nisU3TKmpZAABVOjEw6O0792.png

7)      建立测试节点配置文件,并将ssh加载进去

wKioL1niruSjMv8hAAAwvCQggwM740.png

输入一下信息:

wKiom1nisZqyH562AAAUTw7hz_A204.png

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

wKiom1nisdmh13w1AAArw6UAmOQ549.png

输入一下信息:

wKiom1nisgmAmwg-AAAHJzXCP9Q674.png

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

wKiom1niskajPfVRAAAp9tfbk0c092.png

wKiom1niskaQDQRhAAE5_JKIrxw997.png

10)   从新启动puppet

#] /etc/init.d/puppetmaster restart 

2.      客户端主动拉取

通常在小规模自动化集群中,如代码上线须要重启服务时,为了防止网站暂时性的没法访问的问题,每台客户端运行一次puppet agent –t命令,选择模式根据客户端集群规模的大小,根据经验,通常运维工程师puppet服务器到各客户端会创建ssh信任,而后自定义shell脚本,ssh批量让客户端执行puppet同步命令

Client端:

192.168.31.184(puppetclient1)端执行命令以下:

wKiom1nis0jBJzq7AADQKDBKOsA057.png

此时在Client端已经执行成功,验证以下:

wKiom1nis5HyJOwpAAErS33QBEE916.png

查看服务器ssh服务是否重启,端口是否生效:

wKioL1nisSuzT3dWAAAsMO7HS3o699.png

3.      服务器推送同步

当大规模部署时采用服务器推送模式

Client端:

192.168.31.79(puppetclient2)端修改:

1)      修改配置文件:

wKioL1nisXTRkE0ZAAAz0UC6wNU885.png

最后一行添加以下:

wKiom1nitCuBWQs7AAIUQSCsyMM606.png

修改auth.conf

wKiom1nitJjAF2kcAAA4ig6hfwQ341.png

最后一行添加以下:

wKiom1nitJiwFNFrAAFO78juhAg960.png

2)      启动puppet客户端

wKiom1nitP-Dc537AAAfQXf9w50956.png

查看/etc/ssh/sshd_config的内容以下:

wKioL1nisknhvnt-AAAW7DtGsO0048.png

确认启动ssh服务:

wKioL1nisrWQxLZIAAAyocylMtI033.png

Master端:

3)      开始往客户端推送

wKioL1nisrXQRiL3AACbYF-1lOU850.png

4)      校验结果:

此时Client端已经执行成功,验证以下:

wKiom1nitceDbrskAAAq4TSAvVg144.png

wKiom1nitceDeYXaAAAVheYIUHo837.png

查看服务器ssh服务是否重启,端口是否生效:

wKioL1nisxGARLOWAAAysaBOO-A300.png

相关文章
相关标签/搜索