设为首页 收藏本站
查看: 1590|回复: 0

[经验分享] 实现puppet的实战与应用

[复制链接]

尚未签到

发表于 2018-8-1 12:44:06 | 显示全部楼层 |阅读模式
一、puppet是什么?
  puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期:供应(ProVicioning)、配置(configuretion)、联动(orchestration)以及报告(reporting)
  puppet基于ruby语言开发,可实现自动化重复任务、快速部署关键性应用以及在本地或者在云端完成注定管理变更和快速扩展架构规模等。

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

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


四、puppet的类和模块
  (1)类的定义
  类就是命名的代码块,存放着一个或者多个资源 ;可以继承
  

类的命名方式  


  class>  

  ...puppet code...
  

  }
  

  子类的命名方式
  

  class parent_name::subclass_name inherits parent_name {
  

  }
  

  多级继承的子类
  

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定义的资源
DSC0001.jpg

  

##      五、puppet模板  

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

迭代和条件判断  

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

②步骤:  查看puppet的模块目录路径:
  puppet agent --configprint modulepath
  ![](http://i2.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=)
  创建必要的目录
  

DSC0002.jpg

  创建redis父类
DSC0003.jpg

  创建子类master
DSC0004.jpg

  拷贝redis配置文件放到files目录下并修改为redis-master.conf
DSC0005.jpg

  创建子类slave
DSC0006.jpg

  拷贝redis配置文件放到files目录下并修改为redis-slave.conf
DSC0007.jpg

  调用父类:
  puppet apply -d -v -e 'include redis'
  调用子类:
  puppet apply -d -v -e 'include redis::master'

六、实现master/agent框架
  (1)前提条件:
  ①各主机之间能互相解析(由于就几个主机,可以直接使用hosts文件,如果过多建议使用DNS服务器)
DSC0008.jpg

  标准的主机名命名方式为:
  角色名-运营商-机房名-机器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
DSC0009.jpg

  查看过后可以Ctrl+c退出
  ③启动服务
  命令:systemctl start puppetmaster.service
  ④agent主机上安装puppet安装包。
  yum install puppet -y
  ⑤启动agent端上的puppet服务
  命令:puppet agent --server 主机名 -v --no-daemonize
DSC00010.jpg

  为了每次启动都要写主机名,可以把主机名写到配置文件里
DSC00011.jpg

  ⑥master给agent签发证书
  puppet cert list      【查看待签证书】
  puppet cert sign  server2.magedu.com        【签证】
DSC00012.jpg

  ⑦在master建立站点清单,
  vim /etc/puppet/manifests/site.pp
  node 'server1.magedu.com' {
  include redis::master
  }
  sgent会主动向master请求数据
DSC00013.jpg


七、puppet kick推送功能的实现
  puppet客户端默认每30分钟向服务器申请一次,有的特殊情况需要立刻生效,则需要puppet kick将当前配置推送给客户端,立刻实现目标状态的改变。
  ①在agent端,编辑puppet配置文件
  在【agent】添加   listen = true
DSC00014.jpg

  ②在/etc/puppet/auto.conf添加一下几行
DSC00015.jpg

  ③kick推送,在服务器段运行kick子命令
  puppet help kick   【查看帮助】
  puppet kick --host server1.magedu.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544798-1-1.html 上篇帖子: Puppet的安装和初配置 下篇帖子: puppet(单机模式)-实现redis主从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表