实现puppet的实战与应用

1、puppet是什么?

puppet是一个IT基础设施自动化管理工具,它可以帮助系统管理员管理基础设施的整个生命周期:供应(ProVicioning)、配置(configuretion)、联动(orchestration)以及报告(reporting)
puppet基于ruby语言开发,可实现自动化重复任务、快速部署关键性应用以及在本地或者在云端完成注定管理变动和快速扩展架构规模等。node

二puppet的工做原理

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

3、puppet工做的具体过程

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

4、puppet的类和模块

(1)类的定义
类就是命名的代码块,存放着一个或者多个资源 ;能够继承vim

类的命名方式

 class class_name {

   ...puppet code...

 }

 子类的命名方式

   class parent_name::subclass_name inherits parent_name {

   }

多级继承的子类ruby

class grand_name::parent_name::subclass_name inherits grand_name::parent_name {

   }

   => 在子类中覆盖父类中的资源

   +> 在子类中为父类的资源新增属性

声明类(3种方式)

include

require

class { 'class_name':

     params1 =>value1,

            params2 =>value2,

}
(2)关于类的举例
①redis模块:
redis ---------------父类
redis程序包 ------父类定义的资源1
redis服务 -------父类定义的资源2
redis::master ---------子类1
file -------子类1定义的资源服务器

redis::slave -------子类2
file --------子类2定义的资源
实现puppet的实战与应用架构

##      5、puppet模板

①语法:
<%= Ruby Expression %>替换为表达式的值,
<%= @processorcount %>
<% ruby code %>仅执行代码,不作任何替换;经常使用于条件判断或循环语句、设定变量以及在输出以前对数据进行处理;
调用模板变量:变量彻底限定名称app

迭代和条件判断

使用模板生成文件时,使用的文件属性为content
content => template('module_name/template_file_name')框架

②步骤:
    查看puppet的模块目录路径:
        puppet agent --configprint modulepath
        ![](https://s1.51cto.com/images/blog/201712/21/bc57f8d9c46cedcfeea49eb73134c4d4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
 建立必要的目录

实现puppet的实战与应用
建立redis父类
实现puppet的实战与应用
建立子类master
实现puppet的实战与应用
拷贝redis配置文件放到files目录下并修改成redis-master.conf
实现puppet的实战与应用
建立子类slave
实现puppet的实战与应用
拷贝redis配置文件放到files目录下并修改成redis-slave.conf
实现puppet的实战与应用
调用父类:
puppet apply -d -v -e 'include redis'
调用子类:
puppet apply -d -v -e 'include redis::master'ide

6、实现master/agent框架

(1)前提条件:
①各主机之间能互相解析(因为就几个主机,能够直接使用hosts文件,若是过多建议使用DNS服务器)
实现puppet的实战与应用
标准的主机名命名方式为:
角色名-运营商-机房名-机器IP.域名
例如:web-CNC-ShangHai-1.1.1.1.jungege.com
②各个节点要作到时间同步;
使用ntpdate或者chrony均可以
(2)①在master主机上安装puppet、puppet-server
yum install puppet puppet-server -y
②查看master初始化
命令:puppet master -v --no-daemonize
实现puppet的实战与应用
查看事后能够Ctrl+c退出
③启动服务
命令:systemctl start puppetmaster.service
④agent主机上安装puppet安装包。
yum install puppet -y
⑤启动agent端上的puppet服务
命令:puppet agent --server 主机名 -v --no-daemonize
实现puppet的实战与应用
为了每次启动都要写主机名,能够把主机名写到配置文件里
实现puppet的实战与应用
⑥master给agent签发证书
puppet cert list 【查看待签证书】
puppet cert sign server2.magedu.com 【签证】
实现puppet的实战与应用
⑦在master创建站点清单,
vim /etc/puppet/manifests/site.pp
node 'server1.magedu.com' {
include redis::master
}
sgent会主动向master请求数据
实现puppet的实战与应用

7、puppet kick推送功能的实现

puppet客户端默认每30分钟向服务器申请一次,有的特殊状况须要马上生效,则须要puppet kick将当前配置推送给客户端,马上实现目标状态的改变。
①在agent端,编辑puppet配置文件
在【agent】添加 listen = true
实现puppet的实战与应用
②在/etc/puppet/auto.conf添加一下几行
实现puppet的实战与应用③kick推送,在服务器段运行kick子命令puppet help kick 【查看帮助】puppet kick --host server1.magedu.com

相关文章
相关标签/搜索