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

[经验分享] 运维自动化之锋芒初露puppet class and module 以及 kick功能的实现。

[复制链接]

尚未签到

发表于 2018-8-2 11:06:48 | 显示全部楼层 |阅读模式
  Class:
  
  Class是用于通用目标的一组资源,因此,它是命名的代码块,在某位置创建后可以在全局使用。
  类似于其他编程语言中的类的功能,puppet的Class可以被继承,也可以包含子类。
  使用细节:
  1、 类的名称只能以小写字母开头,可以包含数字和下划线。
  2、 每个类都会引入一个新的变量scope,在任何时候访问类中的变量时,都得使用其完全限定名称。
  3、 在本地scope可以重新为top scope中的变量赋予一个新值。
  声明类的两种方式:
  Include “类名”
  Class  {‘类名’:}
  类的继承使用案例:
  class webserver {
  package {'httpd':
  ensure => 'installed',
  }
  }
  class webserver::proxy inherits webserver {
  file {'/etc/httpd/conf/httpd.conf':
  ensure => file,
  source => '/backup/httpd/httpd.conf',
  mode => '0644',
  owner => 'root',
  group => 'tuchao',
  require => Package['httpd'],
  }
  service {'httpd':
  ensure => running,
  subscribe => File['/etc/httpd/conf/httpd.conf'],
  }
  }
  class webserver::dynamic inherits webserver {
  file {'/etc/httpd/conf/httpd.conf':
  ensure => file,
  source => '/backup/httpd/httpd-dynamic.conf',
  mode => '0644',
  owner => 'root',
  group => 'tuchao',
  require => Package['httpd'],
  }
  service {'httpd':
  ensure => running,
  subscribe => File['/etc/httpd/conf/httpd.conf'],
  }
  }
  include webserver::dynamic
  Modules概述
  到目前为止,资源申报、定义类、声明类等所有功能都只能在一个manifest文件中实现,但这却非最有效的基于puppet管理IT基础架构的方式。实践中,
  一般需要把manifest文件分解成易于理解的结构,例如将类文件、配置文件甚至包括后面将提到的模块文件等分类存放,并且通过某种机制在必要时将它们
  整合起来。这种机制即“模块”,它有助于以结构化、层次化的方式使用puppet,而puppet则基于“模块自动装载器”完成模块装载。从另一个角度来说,模
  块实际上就是一个按约定的、预定义的结构存放了多个文件或子目录的目录,目录里的这些文件或子目录必须遵循其命名规范。
  Puppet会按此种规范在特定位置查找所需的模块文件,不过,这些特定目录也可以通过puppet的配置参数modulepath定义。
  puppet module list //列出所有的模块
  puppet master --genconfig| grep modulepath  //显示模块的查找路径
  puppet module search //搜索模块
  puppet module install //安装模块
  模块布局:
  Module Name
  manifests .//用于存放清单文件
  init.pp
  files //用于存放依赖的配置文件
  templates //用于存放模块文件
  lib //用于存放库文件
  tests //用于存放测试样本文件
  spec //用于存放各插件使用规范
  站点清单:/etc/puppet/manifests/
  site.pp
  node 'FQDN' {
  include class
  }
  puppet  master / agent 工作过程:
DSC0000.jpg

  实验一、配置一个puppet-master 控制agent端安装httpd服务。
  Puppet master端配置:
  1、安装puppet-server
  yum install puppet-server -y
  2、生成配置文件
  puppet master --genconfig > /etc/puppet/puppet.conf
  3、修改pid文件路径
  vim /etc/puppet/puppet.conf
  pidfile = $rundir/master.pid
  rundir = /var/run/puppet
  4、创建一个模块
  mkdir httpd/{manifests,files,lib,test,spec} -pv
  5、创建init.pp文件
  cd /etc/puppet/modules/httpd/manifests
  vim init.pp
  写入以下代码:
  class httpd {
  package {'httpd':
  ensure => 'installed',
  }
  user {'tuchao':
  ensure => present,
  home => '/home/tuchao',
  uid => '601',
  gid => '601',
  shell => "/bin/bash",
  managehome => true,
  require => Group['tuchao']
  }
  group {'tuchao':
  ensure => present,
  gid => '601',
  }
  }
  6、创建需要的类文件
  vim httpd_web.pp
  写入以下代码:
  class httpd::httpd_web inherits httpd {
  file {'/etc/httpd/conf/httpd.conf':
  ensure => file,
  source => 'puppet:///modules/httpd/httpd.conf',
  mode => '0644',
  owner => 'root',
  group => 'tuchao',
  require => Package['httpd'],
  }
  service {'httpd':
  ensure => running,
  subscribe => File['/etc/httpd/conf/httpd.conf'],
  }
  }
  7、创建站点清单文件,定义需要管理的节点。
  vim /etc/puppet/manifests/site.pp
  node 'server1.tuchao.com' {
  include httpd::httpd_web
  }
  node 'admin1.tuchao.com' {
  include httpd::httpd_web
  }
  node 'admin2.tuchao.com' {
  include httpd::httpd_web
  }
  8、启动puppetmaster
  /etc/init.d/puppetmaster  start
  puppet-agent端:
  1、 安装puppet
  yum install puppet -y
  2、 修改agent端配置文件,在main段中指定puppet-master主机。
  vim /etc/puppet/puppet.conf
  server = server1.tuchao.com
  3、 启动puppet服务
  service puppet start
  这时agent会发送证书签署请求给master,我们来到puppet master 端签署证书。
  puppet cert list
  puppet cert sign --all
DSC0001.jpg

  再来到agent端查看
DSC0002.jpg

  注:如果过程中出现问题可以打开debug模式查看详细信息,便于排错。
  puppet agent --verbose --no-daemonize --debug
  puppet kick 功能实现
  puppet客户端默认每30分钟跟服务器通讯一次,我们可以修改puppetmaster端配置文件中的runinterval指令的值。但是有时,我们希望服务端能给客户端紧急推送一些任务,于是就有了puppet kick(puppet 2.6以前叫puppetrun)。
  编辑客户端/etc/puppet/puppet.conf
  在[agent]后面添加
  listen = true  //这个是让puppet监听8139端口
  编辑或新建文件/etc/puppet/namespaceauth.conf,包含下面内容
  allow *.magedu.com
  编辑文件auth.conf
  path /run
  auth any
  method save
  allow puppet.magedu.com
  来到master端执行 puppet kick -a --host=admin2.tuchao.com 即可完成推送。
  故障总结:
  下面总结一个小问题,如果一个已经与puppet master端完成证书签署的节点更换了主机名,出现无法连接puppet-master开启debug模式报如下错误:
DSC0003.jpg

  根据上面的提示,我们在master端执行:
  puppet cert clean admin2.tuchao.com  //清除原主机名相对应的证书。
  在agent端执行:
  rm -f /var/lib/puppet/ssl/certs/admin2.tuchao.com.pem
  puppet agent -t
  只后再重启puppet即可重新完成交互公私钥对,完成证书签署。

运维网声明 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-545273-1-1.html 上篇帖子: Puppet整合SVN(二):SVN整合Apache 下篇帖子: 在CentOS6.1上安装puppet最新版本puppet-3.6.2版本问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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