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

[经验分享] puppet资料收集

[复制链接]

尚未签到

发表于 2018-8-3 07:09:34 | 显示全部楼层 |阅读模式
  auth.conf       #定义puppet master的acl文件
  fileserver.conf   #定义puppet master文件服务器的配置文件
  manifests        #puppet脚本主文件目录,site.pp文件必须存在
  modules            #puppet模块目录
  puppet.conf     #puppet主配置文件
  ssl                     #存放ssl证书的目录
  Puppet常用资源:  常用的资源主要有以下几个:
  file:主要负责管理文件
  package:软件包的安装管理
  service:系统服务的管理
  cron:配置自动任务计划
  exec:远程执行运行命令
  puppet模块安装:
  git clone --recursive https://github.com/example42/puppet-modules-nextgen.git  //下载模块,包括了常用的模块
  To update your local copy with the upstream version:
  cd /etc/puppet/modules # Or the directory where's you local copy
  git pull origin master
  git submodule init
  git submodule update
  If you want to force an update on each submodule, even if not tracked on the main repo:
  git submodule foreach git pull origin master
  The above commands (excluded the first cd and included the last) are done by the script:
  Example42-tools/sync.sh
  At times you may need to resync git modules urls. You can do that with:
  git submodule sync
  puppet module search apache  //s搜索模块
  puppet module install puppetlabs-apache --version 0.0.2  //安装
  puppet module install --module_repository http://dev-forge.example.com puppetlabs-apache //安装
  puppet module list   //列出已有的模块
  puppet module uninstall puppetlabs-apache  //删除模块
  puppet module upgrade puppetlabs-apache --version 0.0.3 //更新模块
  puppet通信过程中,客户端向服务端请求时端口是8140,若是服务器推送到客户端时通信端口是8139
  puppet agent --no-daemonize --onetime --verbose --debug --server=puppet_server(服务端主机名)
  puppet cert list --all #查看所有客户端的请求(有+号的代表已经签好证书可以通信,没有加号的代表尚未签好证书)
  puppet cert --sign puppet_client(客户端主机名) #这条命令加客户端主机名就能签字,自此可以通信
  puppet cert --revoke puppet-test //让证书过期
  puppet cert --clean puppet-test  //删除证书   证书签名的过期或删除需要重启puppetmaster服务
  删除/忽略请求 :Rm –rf /etc/puppet/ssl/ca/requests
  filebucket 客户端用于发送文件到puppet file bucket的工具
  filebucket -b /tmp/filebucket /my/file
  puppetmasterd --genconfig > /etc/puppet/puppet.conf  //生成配置文件
  /etc/puppet/manifests   /etc/puppet/manifests/site.pp //这个manifest目录和site.pp文件可以再puppetc.conf的【master】中通过manifestdir manifest指定
  site.pp文件告诉puppet去哪里寻找并载入指定的客户端配置
  ——import载入配置文件node.pp ——include sudo指定需要被应用到主机的配置集合(资源容器,模块),每一个模块都需要一个特定的目录结构和init.pp文件
  -A INPUT -p tcp -m state --state NEW -s ip/net --dport 8140 -j ACCEPT //puppet master 运行端口是8140
  master启动过程:在启动守护进程初始化环境后,创建一个本地认证中心(ca),同时创建master相关的证书和密钥,并打开网络socket等待客户端的链接请求
  /etc/puppet/ssl(认证,可以用ssldir重新设置路径)
  puppetmasterd -d –no-daemonize -v –trace
  puppet master == puppetmasterd
  puppet agent == puppetd
  master host: 127.0.0.1 puppet.voole.com puppet //后面跟一个别名
  puppet cert --list == puppetca –l//列出所有等待被签名的证书
  puppet cert --sign node1.voole.com(--all)== puppetca -s -a//签名证书
  puppetca -a --list  //查看已签名的证书(前面带+表示已签名)
  puppetd --test --server server.viong.com --verbose --waitforcert 100 //-server 服务端FQDN –-verbose 输出冗余信息 –-waitforcert 超时100
  验证证书是否正确:
  server :md5sum /etc/puppet/ssl/ca/signed/web_node1.voole.com.pem  or md5sum /var/lib/puppet/ssl/ca/signed/client1.viong.com.pem
  client :md5sum /etc/puppet/sslcerts/web_node1.voole.com.pem   or  md5sum /var/lib/puppet/ssl/certs/client1.viong.com.pem
  出现修改主机名问题引起无法认证,需要重新申请证书,操作以下两个步骤:
  服务端:[root@server ca]# rm -rf /var/lib/puppet/ssl/ca/signed/client1.viong.com.pem
  客户端:[root@client1 puppet-2.7.14]# rm -rf /var/lib/puppet/ssl/
  很多时候由于更换主机名,我们需要重新配置认证:
  (1)、首先在客户端删除 rm -rf /var/lib/puppet/ssl/文件夹
  (2)、然后在服务器端删除客户端的证书:puppetca --clean 192-168-0-131.APP.com 【 192-168-0-131.APP.com 客户端的主机名】
  (3)、然后再在客户端执行puppetd --server=192-168-0-130.APP.com --test 即可!
  agent连接:agent发起一个证书验证请求并使用一个私钥来加密连接,然后等待master签名并返回证书,连接后再次运行puppet agent时,agent首先缓存主机的配置,在安装软件
  ,在备份旧文件复制新文件到指定位置(filebucket备份文件到master),agent以守护进程运行时是每隔30分钟在连接master,获取最新配置
  puppet agent --server=puppet.voole.com --verbose --no-daemonize --waitforcert=30,这里不指定master 则默认连一个puppet,所以设置master别名,waitforcert设置等待时间,超时就退出
  --noop(不对主机做出任何变更)    --onetime(只运行一次就停止)
  git版本控制:
  yum install git -y
  1.向GIT标识自己,以便它跟踪我们的身份并将我们的行为跟一些细节联系在一起
  [root@puppet puppet]# git config --global user.name "liukai"
  [root@puppet puppet]# git config --global user.email liukai@voole.com
  2.对模块所在路径进行版本控制,初始化新的GIT仓库
  cd /etc/puppet/modules
  git init
  3.向仓库添加所有文件,删除不想存放在仓库的文件
  git add *    /   git rm filename
  4.提交希望被跟踪的对象,提交过程会捕捉被跟踪对象的状态并管理他们,生成一个修订版本来标识这个状态,还可在目录中建.gitignore文件,这个文件
  中指定的目录和文件都会被GIT忽略,提交之前先查看GIT状态,创建一个修订版本
  git status
  5.向仓库提交我们的版本
  git commit -a -m "this is our initial commit"
  -m 指定了提交日志,如需要记录更多日志,去掉-m ,git会打开默认编辑器让你输入更全面的记录
  6.变更提交到仓库后,查看最近一次的提交
  git log
  7.创建GIT仓库的一个新的拷贝,同时自动创建一个指向原仓库的引用
  cd /etc/puppet/develop_env/development
  git clone ../../modules
  8.在开发环境的模块仓库中添加一个远程引用,指向生成环境模块仓库,这个远程引用允许git获取变更
  cd /etc/puppet/develop_env/development/modules
  git remote add production /etc/puppet/modules
  git remote -v
  9.对环境做出变更后可以用git status查看仓库变更状态
  可以用git diff 确认是变更了哪些行(对比两个文件)
  在提交 git commit -a -m ‘。。。’
  开发环境——测试环境——生产环境
  1.通知puppet使用一个非生产环境来测试 : puppet agent --noop --test --environment testing
  每个资源由类型、标题、属性组成,每个资源属性当中有个“名称变量”作为资源的名字,软件包和服务资源使用“name”,文件使用“path”作为名称变量
  如 file {"/etc/passwd": ...}  === file {"passwd": path=> "/etc/passwd",}
  puppet函数:函数只能在master上运行,不能在客户端上
  generate   用来调用外部命令并返回结果
  notice     在master上记录信息如:notice("this is a notice")
  include:无顺序引用
  元参数require:有顺序,告诉puppet这个指定类中所有资源必须在当前资源之前被处理
  元参数notify : 创建一个通知关系,如果当前资源(服务配置文件)发生改变,puppet会通知后面类的资源
  enable :指定资源的启动级别
  ensure :指定资源的状态是启动还是停止
  hasstatus :为真,那么puppet就知道我们的服务框架支持获取当前状态的命令 service sshd status
  source => "puppet://modules/sshd/sshd_config",用于分发文件
  content => template("postfix/main.cf.erb") 允许以一串字符作为文件的内容,同时也可以指定一个内容模板 此处会在、postfix/template/找main.cf.erb
  gid => "mysql" 将用户添加到这个组中
  recurse => true  设置为true后,puppet会遍历整个目录及子目录,将所有在其中的对象用户和组设置为mysql;可以传送目录
  class mysql::install {
  package { ["mysql", "mysql-server", "mysql-test", "mysql-devel" ]:
  ensure => present,
  require => User["mysql"],
  }
  user { "mysql":    ##资源类型:用户
  ensure => present,
  comment => "mysql user",##/etc/passwd文件第五段信息
  gid => "mysql",  ##用户的组
  shell => "/bin/false", ##用户的shell
  require => Group["mysql"],##mysql用户依赖于mysql组
  }
  group { "mysql":   ##资源类型:组
  ensure => present,
  }
  }
  从服务端推送命令到客户端执行:
  <span style=&quot;font-size:14px;&quot;>node default {
  exec { &quot;/bin/ls > 1.txt&quot;: ==>> 这里对于&quot;&quot;里面的字符要求很高,/bin/ls之前都不能有空格,否则就会提示错误
  cwd => &quot;/tmp&quot;,   ==>> 客户端执行命令的路径
  path=> &quot;/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin&quot;, ==>> 对于命令的系统路径
  }
  }</span>
  传输文件到客户端
  <span style=&quot;font-size:14px;&quot;>node default {
  file {
  &quot;/tmp/helloworld.txt&quot; :             ==>>推送到客户端的路径文件
  source=>&quot;puppet:///opencdn/test1/helloworld.txt&quot;, ==>> 根据/etc/puppet/fileserver.conf里面配置的opecnd域 ,#最终路径就是 /etc/puppet/test1/helloworld.txt
  recurse=>&quot;true&quot;,             ==>>可以传送目录
  owner=>&quot;root&quot;,
  group=>&quot;root&quot;,
  mode=>777,
  }
  }</span>
  二、重新生成证书:很多时候由于更换主机名,我们需要重新配置认证:
  (1)、首先在客户端删除 rm -rf /var/lib/puppet/ssl/文件夹
  (2)、然后在服务器端删除客户端的证书:puppetca --clean 192-168-0-131.APP.com 【 192-168-0-131.APP.com 客户端的主机名】
  (3)、然后再在客户端执行puppetd --server=192-168-0-130.APP.com --test 即可!
  三、配置客户端自动同步:   在客户端安装完puppet后,并且认证完后,我们可以看到效果,那怎样让它自动与服务器同步呢?默认多少分钟跟服务器同步呢?怎样修改同步的时间呢,这时候我们需要配置客户端:
  (1)、配置puppet相关参数和同步时间:
  vi /etc/sysconfig/puppet
  PUPPET_SERVER=192-168-0-130.APP.com 服务器mater的host
  PUPPET_PORT=8140 访问服务器的8140端口
  PUPPET_LOG=/var/log/puppet/puppet.log 本地日志
  PUPPET_EXTRA_OPTS=--waitforcert=500
  然后启动 /etc/init.d/puppet start 即可
  (2)、默认配置完毕后,客户端会半个小时跟服务器同步一次,我们可以修改这个时间。 vi  /etc/puppet/puppet.conf 的 [agent]下加入:
  runinterval = 60  //代表60秒跟服务器同步一次
  修改完后重启puppet 过一分钟即可看到客户端同步的效果!
  四、puppetrun的使用(puppet kick):
  当我们配置完puppet服务器端和客户端后,客户端会默认半个小时跟服务器端同步,如果我们需要更新重要文件,是不是得立即生效呢,那有什么好的办法吗?答案:有!
  在服务器端使用puppetrun这个命令可以给客户端发送一段信号,告诉客户端立刻跟服务器同步,这样就达到我们的目的了!那怎样配置呢?
  (1)、修改客户端上的puppet的配置文件
  vi /etc/puppet/puppet.conf
  在[agent]后面添加
  listen = true  //这个是让puppet监听8139端口。
  (2)、修改管户端的puppet的/etc/sysconfig/puppet
  vim /etc/sysconfig/puppet
  PUPPET_SERVER=192-168-0-130.APP.com  //改为你对应的puppetmaster的主机名。
  (3)、新建namespaceauth.conf这个文件,vi /etc/puppet/namespaceauth.conf添加如下内容:
  [puppetrunner]
  allow *
  (4)、还需要修改auth.conf。
  在path /之前添加下内容,加粗部分:
  path /run
  method save
  allow *
  path /
  auth any
  即可!
  然后重启客户端:/etc/init.d/puppet restart
  (5)、在服务器端测试一下:执行一下命令
  puppetrun -p 10 –host 192-168-0-131.APP.com 后面也可以加多个客户端主机名!
  而且已经发送了信号给客户端!可以去客户端查看一下效果 tail -fn 100 /var/log/puppet/puppet.log
  #高版本的puppet没有puppetrun这个命令,可以用如下命令来执行,执行之前跟puppetrun一样需要配置并授权
  提示finished表示发送信号完成,相反failed则表示失败。
  puppet kick -d host 192-168-0-131.APP.com 也可以code 0表示成功。
  执行完在/tmp/下新建test.txt文件!puppetrun还有更高级的用法,可以查看puppetrun –help
  【puppet 资源之间简单依赖关系】
  puppet 资源之间简单依赖关系,主要是有下面的三个参数。
  before:在某个资源之前执行
  after: 在某个资源之后执行
  require: 某个资源必须存在或者正确执行后,才执行相应的资源。
  【puppet 资源之间触发更新】
  puppet资源之间触发更新主要是由下面二个参数。在执行Services,Exec资源中非常有用。
  notify:用来通知某个资源进行更新。
  subscribe:该资源有更新时,通知另一个资源执行相应的动作。

运维网声明 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-545573-1-1.html 上篇帖子: puppet系列之nginx+foreman-TNT、运维之路 下篇帖子: puppet集群之 Nginx and Passenger-linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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