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

[经验分享] puppet部署与与应用

[复制链接]

尚未签到

发表于 2018-8-2 06:25:28 | 显示全部楼层 |阅读模式
  一、puppet工作原理
DSC0000.png

  Puppetclient运行时,客户端主动拉取服务器配置;
  Puppetclient不运行时,客户端被动接受服务器推送。
  
  1、工作流程
  1)客户端puppet调用facter(facter是通过ssl加密收集及检测分析客户端配置信息的一个工具),facter探测出主机的一些变量,如主机名,内存大小,ip地址等。Puppet把这些信息通过ssl连接发送到服务器器端
  2)服务器端的puppetmaster通过facter工具分析检测客户端的主机名,然后找到项目主配置文件mainfest里面对应的node配置,并对该部分内容进行解析。Facter发送过来的信息可以作为变量处理,node牵扯到的代码才解析,其他没牵涉的代码不解析,解析分为几个阶段,首先进行语法检查,如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发送给客户端。
  3)客户端接收到伪代码,并执行,客户端把执行的结果发送给服务器。
  4)服务器把客户端的执行结果写入日志。
  Puppet工作过程有以下两点值得注意:
  1)为了保证安全,client和master之间是基于ssl和证书的,只有经master证书认证的client可以与master通信。
  2)Puppet会让系统保持在人们所期望的某种状态并一直维持下去,例如:检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。
  二、案例
  环境拓扑:
DSC0001.png

  实施步骤:
  n 搭建puppetmaster
  n 搭建puppetclient
  n 配置测试节点
  n 客户端主动拉取
  n 服务器推送
  1.搭建ntp时间服务器
  由于facter使用SSL证书,依赖时间同步,所以需要搭建NTP服务器。
DSC0002.png

  安装ntp
DSC0003.png

  添加以下两行:
DSC0004.png

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

  开启ntpd服务
DSC0006.png

  开启防火墙例外
  ntpd服务使用的是udp协议,监听123端口。
  2.搭建puppetmaster
  1)规划服务器主机名
DSC0007.png

DSC0008.png

DSC0009.png

  修改主机名
DSC00010.png

DSC00011.png

  修改hosts文件,添加记录(没有DNS服务器)
  2)服务器时间同步
DSC00012.png

DSC00013.png

  3)安装ruby(puppet就是基于ruby语言开发的,所以需要安装ruby)
DSC00014.png

  需要注意:先安装compat-readline5,再安装ruby
DSC00015.png

  检查ruby版本
  4)facter、puppet安装
DSC00016.png

  (1)安装facter
  通过facter工具分析检测客户端传输过来的信息
DSC00017.png

  解压源码包
DSC00018.png

  编译安装源码包
  (2)安装puppet
DSC00019.png

  解压源码包
DSC00020.png

  编译安装源码包
DSC00021.png

  复制配置文件
DSC00022.png

  给服务的脚本文件赋予执行权限
DSC00023.png

  创建puppet主目录
  manifests:存储节点信息
  modules:模块目录,存放客户端的应用配置。
  2)puppet服务证书请求与签名
DSC00024.png

DSC00025.png

  修改主配置文件
  在[main]标题下添加一行:配置服务器模块路径
DSC00026.png

  启动puppet主程序
DSC00027.png

  puppetmaster所监听的端口为8140
DSC00028.png

  配置防火墙,添加例外。
  3.搭建puppetclient
  1)搭建puppetclient的步骤与搭建puppetmaster的基本相同,同样需要规划主机名、添加host记录、同步时间、安装ruby、安装facter、安装puppet。
DSC00029.png

DSC00030.png

  安装完puppet后,需要复制配置文件,并且赋予脚本文件的执行权限。
  注意:这里复制的服务脚本文件是client.init,重命名为puppetclient。
  2)puppet服务证书请求与签名
  修改配置文件
DSC00031.png

DSC00032.png

  修改/etc/puppet/puppet.conf,在[main]标题下添加一行:设置服务器的域名。
  申请与注册(以client1为例)
  client1端
DSC00033.png

  此时,可以按ctrl+c结束,因为puppet一直在等待任务,但是已经从server查看到了申请信息。
  master端
DSC00034.png

  查看申请注册的客户端
DSC00035.png

DSC00036.png

  将未注册的客户端进行注册
DSC00037.png

  通过目录/var/lib/puppet/ssl/ca/signed/可以查看到已经注册的客户端
  此时,客户端已经完成了证书的请求与签名。
  4.配置实例
  批量修改客户端的sshd端口,将端口22修改为9922,并实现重启工作。
  1)配置一个测试节点
  ■ 节点信息:/etc/puppet/manifests/nodes
  ■ 模块信息:/etc/puppet/modules
  (1)创建需要的必要目录
DSC00038.png

DSC00039.png

DSC00040.png

  创建ssh模块,模块目录为ssh,模块下面有三个文件:manifests、templates、files
  manifests:包含一个init.pp文件,这是该模块的初始(入口)文件,导入一个模块的时候会从init.pp开始执行。可以把所有的代码都写进init.pp里面,也可以分成多个pp文件,init再去包含其他文件,定义class类命名的时候必须是ssh,这样能实现调用。
  files:是该模块的文件发布目录,puppet提供一个文件发布机制,类似于rsync的模块。
  templates:包含erb模块文件、这个和file资源的templates属性有关(很少使用)。
DSC00041.png

  修改权限
  (2)创建模块配置文件install.pp
DSC00042.png

DSC00043.png

  以上信息确保客户端安装ssh软件
  (3)创建模块配置文件config.pp
DSC00044.png

DSC00045.png

  file{ "/etc/ssh/sshd_config":          //配置客户端需要同步的文件
  ensure => present,                   //确定客户端此文件存在
  owner => "root",                     //文件所属用户
  group => "root",                     //文件所属组
  mode => "0600",                      //文件权限
  source=> "puppet://$puppetserver/modules/ssh/ssh/sshd_config",
  //从服务器同步文件的路径

  require =>>
  notify =>>  }
  这个文件的内容主要是定义,发布的配置文件权限以及调用ssh::install检查client是否安装了ssh服务,以及调用ssh::service重新启动sshd服务。
  (4)创建模块配置文件service.pp
DSC00046.png

DSC00047.png

  ensure =>running,//确定sshd运行
  hasstatus=>true,//puppet该服务支持status命令,即类似service  sshd  status命令
  hasrestart=>true,//puppet该服务支持status命令,即类似service  sshd  restart命令
  enable=>true,//服务是否开机启动
  require=>Class["ssh::config"]      //确认config.pp调用
  (5)创建模块主配置文件init.pp
DSC00048.png

DSC00049.png

  (6)建立服务器端ssh统一维护文件
DSC00050.png

  一般服务器和客户机的sshd_config文件默认一样,所以这里直接将服务器端/etc/ssh/sshd_config复制到模块默认路径。
  (7)创建节点配置文件,将ssh加载进去。
DSC00051.png

DSC00052.png

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

DSC00054.png

  (9)修改服务器维护的sshd_config配置文件
DSC00055.png

DSC00056.png

  (10)重新启动puppet
DSC00057.png

  2)客户端主动拉取
  Client端
DSC00058.png

  在客户端输入上述命令,来主动拉取。
  适用于小规模的自动化集群中
DSC00059.png

  检查客户端sshd服务端口号,改为了9922
  3)服务器推送同步
  Client端
  (1)修改配置文件
DSC00060.png

DSC00061.png

  在最后一行添加,使puppet监听8139端口。
DSC00062.png

DSC00063.png

  在最后一行添加,允许任何服务端推送。
  auth.conf是验证配置文件,定义一些验证信息及访问权限
  (2)启动puppet客户端
DSC00064.png

  同样,防火墙要开启8139端口的例外。
  (3)服务器推送
  为了测试方便,这里又把ssh的端口改为了8822
DSC00065.png

  puppet kick 后面可以接客户端的主机名,可以使用”puppet kick --help”来查看帮助信息。
  puppet kick --all:将同步推送到所有客户端
  (4)校验结果
DSC00066.png

  在客户端,再次检查sshd服务的端口,发现变为了8822。

运维网声明 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-544958-1-1.html 上篇帖子: PUPPET简单安装配置 下篇帖子: puppet ENC 配置说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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