成功最有效的方法就是向有经验的人学习!

Puppet的部署与应用

1、 案例概述

作为一名系统管理员,维护服务器正常运行是最基本的职责,在管理几台到几十台服务器时,大部分管理员喜欢自己写小工具来维护,但随着服务器的数量曾多,任务量也逐渐增多,这时就需要简洁的、强大的框架来完成系统管理的任务,为了实现这一目的,我们引入了一些工具,这些工具是可编程的,系统管理员只需要为这个工具写上几行代码,它便会自动的完成所有的工作,这批工具就是运维自动化puppet,它可以针对多台服务器进行统一操作,如部署统一的软件、进行统一上线维护等,而且能快速完成上线部署,减少人力及人力误操作风险。

2、 Puppet的工作原理

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

1、puppet具体的工作原理

Puppet的部署与应用

Puppet的部署与应用

 

 

1)      客户端puppet调用fast探测出主机的一些变量,如主机名、内存大小、IP地址等。Puppet把这些信息使用SSL连接发送给服务器端

2)      服务器端的puppetmaster通过fast工具分析检测客户端的主机名,然后找到项目的主配置文件manifest里面对应的node配置,并对该部分内容进行解析,fast发送过来的信息可以作为变量处理,node牵扯到的代码才被解析,没牵扯到的不解析,解析分为语法检查,如果语法没错,继续解析,解析结果生成一个结果‘伪代码’,然后把‘伪代码’发给客户端

3)      客户端收到‘伪代码’并且执行,客户端把执行结果发给服务器

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

2、puppet工作过程中的注意事项

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

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

3、 项目环境

Puppet的部署与应用

Puppet的部署与应用

 

主机

操作系统

IP地址

主要软件

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

4、 项目实施

1、        搭建puppetmaster

1)      规划服务器主机名

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

Puppet的部署与应用

Puppet的部署与应用

修改HOSTNAME=master.zjz.cn

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

添加一下几行:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

2)      时间同步服务器

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

一、搭建NTP Server

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

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

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

Puppet的部署与应用

Puppet的部署与应用

二、Puppetmaster 作为NTP客户端配置

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

三、安装ruby

一定按照一下先后顺序安装,先安装compat-readline5,也可以一并安装

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

Puppet的部署与应用

Puppet的部署与应用

挂载系统盘

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

开始安装

Puppet的部署与应用

Puppet的部署与应用

安装完成后,查看版本

Puppet的部署与应用

Puppet的部署与应用

四、Puppet、facter安装

Puppet的部署与应用

Puppet的部署与应用

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

安装facter

a)      解压源码包

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

b)      编译安装源码包

Puppet的部署与应用

Puppet的部署与应用

安装puppet:

(一)  解压源码包

先下载源码包

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

(二)  编译安装

Puppet的部署与应用

Puppet的部署与应用

(三)  复制配置文件

Puppet的部署与应用

Puppet的部署与应用

(四)  修改文件属性

Puppet的部署与应用

Puppet的部署与应用

(五)  创建puppet主目录

Puppet的部署与应用

Puppet的部署与应用

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

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

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

Master端配置

Puppet的部署与应用

Puppet的部署与应用

(一)  修改配置文件

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

Puppet的部署与应用

Puppet的部署与应用

(二)  启动puppet主程序

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

2、        搭建puppetclient

首先配置puppetclient1,步骤如下:

1)      规划服务器主机名

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

添加一下几行

Puppet的部署与应用

Puppet的部署与应用

确保可以通过域名ping同puppetmaster,即ping master.zjz.cn

Puppet的部署与应用

Puppet的部署与应用

2)      服务器时间同步

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

3)      安装ruby

一定按照一下顺序安装,先安装compat-readline5,也可以一起安装

Puppet的部署与应用

Puppet的部署与应用

安装同master安装步骤

安装完成后检查版本

Puppet的部署与应用

Puppet的部署与应用

4)      Puppet、facter安装

Puppet的部署与应用

Puppet的部署与应用

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

安装facter:

一、解压源码包

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

二、编译安装源码包

Puppet的部署与应用

Puppet的部署与应用

安装puppet:

一、解压源码包

Puppet的部署与应用

Puppet的部署与应用

二、编译安装源码包

Puppet的部署与应用

Puppet的部署与应用

三、复制配置文件

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

四、修改文件属性

Puppet的部署与应用

Puppet的部署与应用

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

生产环境中iptebles默认是全部关闭的

Puppet的部署与应用

Puppet的部署与应用

Puppetclient1和puppetclient2一样,如下操作

修改client配置文件

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

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

申请和注册

Client端:

分别在puppetclient1和puppetclient2上进行注册

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

此时可以按Ctrl+C结束,因为puppet一直在等待任务,但是已经从server查看到了申请信息

Master端

查看申请注册的客户端:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

可以通过目录查看已注册的客户端

Puppet的部署与应用

Puppet的部署与应用

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

3、        配置实例

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)      创建需要的必要的目录

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

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

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

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

输入一下信息:

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

10)   重新启动puppet

Puppet的部署与应用

Puppet的部署与应用

2.      客户端主动拉取

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

Client端:

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

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

3.      服务器推送同步

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

Client端:

192.168.31.79(puppetclient2)端修改:

1)      修改配置文件:

Puppet的部署与应用

Puppet的部署与应用

最后一行添加如下:

Puppet的部署与应用

Puppet的部署与应用

修改auth.conf

Puppet的部署与应用

Puppet的部署与应用

最后一行添加如下:

Puppet的部署与应用

Puppet的部署与应用

2)      启动puppet客户端

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

确认启动ssh服务:

Puppet的部署与应用

Puppet的部署与应用

Master端:

3)      开始往客户端推送

Puppet的部署与应用

Puppet的部署与应用

4)      校验结果:

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

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

Puppet的部署与应用

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

Puppet的部署与应用

Puppet的部署与应用

5、 注意说明

如果分不清在那一台主机上做的操作,我们可以根据主机名来进行判断,其中puppetclient2上一开始安装的操作因为和puppetclient1上类似就是修改主机名不一样,所以安装步骤省略掉了,不会影响整体的操作

赞(0) 打赏
未经允许不得转载:陈桂林博客 » Puppet的部署与应用
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册