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

[经验分享] puppet 安装部署

[复制链接]

尚未签到

发表于 2018-8-1 13:34:47 | 显示全部楼层 |阅读模式
  http://blog.csdn.net/wych1981/article/details/46839893
  puppet安装和部署
  
1 puppet是什么
  puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。
  puppet把这些系统实体称之为资源,puppet设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
  puppet依赖于C/S(客户端/服务器)的部署架构。它需要在puppet服务器上安装puppet-server软件包(以下简称master),在需要管理的目标主机上安装puppet客户端软件(以下简称agent)。
  当agent连接上master后,定义在master端的配置文件会被编译,然后在agent上运行。每个agent默认30分钟会连接一次master,确认配置信息的更新情况。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将agent通过crontab(任务计划)来管理,这样会更加灵活一些。
2 puppet优点
  puppet的语法允许你创建一个单独的脚本,用来在你所有的目标主机上建立一个用户。所有的目标主机会依次使用适合本地系统的语法来解释和执行这个模块。如果这个配置是在Red Hat服务器上执行的话,建立用户使用useradd命令,如果这个配置是在FreddBSD服务器上执行的话,则使用adduser命令。
  puppet另外一个卓越的地方就是它的灵活性。源于开源软件的天性,你可以自由地获得puppet的源代码。如果你遇到问题并且有能力处理的话,你可以修改或加强puppet的代码使其适用于你的环境,然后解决这个问题。
  puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置能够快速简单地添加至puppet的安装程序中。
3 安装准备工作
  本次实验OS为centos 6.3 64bit,服务端为:10.10.42.31,客户端为10.10.42.169。
3.1 主机时间同步
  为了减少在实验过程中不必要的麻烦,我们需要对所有主机(包括服务器和客户端)进行时间同步。即服务器与客户端的时间相差不能超过秒级。
  使用以下命令进行时间同步,如下:
  # ntpdate 10.10.1.230
3.2 修改主机名
  因为安装 puppet 时会把主机名写入证书,同时客户端和服务端之间通信需要这个证书。如果主机没有设置主机名,则需要修改服务器与客户端的主机名。
  修改主机名。如下:
  Master:
  # hostname jijilu-test
  Client:
  # hostname 430-test01
  执行此命令,可以使主机的主机名立即生效。但是服务器重启后,此修改就会失效。
  要是主机名永久生效的话,需要修改/etc/sysconfig/network文件。
3.3 关闭iptables和selinux
  我们现在所有的实验都是在关闭iptables和selinux下进行的。
  # /etc/init.d/iptables stop
  # chkconfig iptables off
  # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  # setenforce 0
4 环境准备
  puppet的安装可以分为源码安装和RPM安装,但是无论哪一种安装方法,我们都需要在安装之前对其进行几点需要说明。
4.1  puppet安装说明
  由于puppet是采用ruby语言开发,所以无论是源码还是RPM方式安装puppet,我们都必须要先安装ruby语言环境
  puppet从2.7版本以后,就需要hiera的支持。所以也必须安装hiera。
  在前面章节中,我们说明了puppet是一个配置管理系统,而管理的资源,都是系统的实体。但是这些实体,是如何来的呢?这就需要我们安装另外一个资源收集软件—facter。
  facter主要用来收集主机的一些信息,比如:CPU、主机IP等。facter把这些收集的信息发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。
4.2 安装ruby
  ruby的安装比较简单,我们在此使用是yum进行安装。如下:
  # yum -y install ruby
  我们可以查看ruby的帮助信息,如下:
  # ruby -h
  除此之外,我们还要安装ruby-rdoc这个软件包。该软件包主要用于查看ruby的帮助文档。如下:
  # yum -y install ruby-rdoc
  以上就是和ruby有关的软件包,安装完毕后,我们开始来安装facter。
4.3 安装facter
  facter我们可以从puppet官网下载,如下:
  http://downloads.puppetlabs.com/facter/
  注意:facter也可以通过yum进行安装,在此我们使用的是源码安装。
  下载facter 2.3.0,如下:
  wget http://downloads.puppetlabs.com/facter/facter-2.3.0.tar.gz
  解压facter软件包:
  # tar -xf facter-2.3.0.tar.gz
  开始安装facter:
  # ruby install.rb或者./install.rb
  facter安装完毕后,我们来查看下facter的使用帮助。如下:
  # facter -h
  如果想查看facter详细帮助信息,我们也可以man下facter。如下:
  # man facter
  如果安装没有问题的话,我们在执行facter命令后,会显示facter收集的相关信息。如下:
  # facter
  architecture => x86_64
  augeasversion => 0.9.0
  bios_release_date => 08/16/2013
  bios_vendor => Phoenix Technologies LTD
  bios_version => 6.00
  blockdevice_sda_model => Virtual disk
  blockdevice_sda_size => 42949672960
  blockdevice_sda_vendor => VMware

  blockdevice_sr0_model => VMware>  blockdevice_sr0_size => 1073741312
  blockdevice_sr0_vendor => NECVMWar
  blockdevices => sda,sr0
  boardmanufacturer => Intel Corporation
  boardproductname => 440BX Desktop Reference Platform
  boardserialnumber => None
  facterversion => 2.3.0
  filesystems => ext4,iso9660
  fqdn => jijilu-test
  gid => root
  hardwareisa => x86_64
  hardwaremodel => x86_64
  hostname => jijilu-test
  id => root
  interfaces => eth2,lo
  ipaddress => 10.10.42.31
  ipaddress_eth2 => 10.10.42.31
  ipaddress_lo => 127.0.0.1
  is_virtual => true
  kernel => Linux
  kernelmajversion => 2.6
  kernelrelease => 2.6.32-279.el6.x86_64
  kernelversion => 2.6.32
  lsbdistcodename => Final

  lsbdistdescription => CentOS>  lsbdistid => CentOS
  lsbdistrelease => 6.3
  lsbmajdistrelease => 6
  lsbminordistrelease => 3
  lsbrelease => :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
  macaddress => 00:50:56:11:42:31
  macaddress_eth2 => 00:50:56:11:42:31
  manufacturer => VMware, Inc.
  memoryfree => 1.86 GB
  memoryfree_mb => 1909.07
  memorysize => 4.73 GB
  memorysize_mb => 4842.25
  mtu_eth2 => 1500
  mtu_lo => 16436
  netmask => 255.255.255.0
  netmask_eth2 => 255.255.255.0
  netmask_lo => 255.0.0.0
  network_eth2 => 10.10.42.0
  network_lo => 127.0.0.0
  operatingsystem => CentOS
  operatingsystemmajrelease => 6
  operatingsystemrelease => 6.3

  os => {"family"=>"RedHat", "name"=>"CentOS", "release"=>{"minor"=>"3", "major"=>"6", "full"=>"6.3"}, "lsb"=>{"minordistrelease"=>"3", "distrelease"=>"6.3", "release"=>":core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch", "distid"=>"CentOS", "majdistrelease"=>"6", "distdescription"=>"CentOS>  osfamily => RedHat
  partitions => {"sda1"=>{"uuid"=>"899a5bca-f9e0-4b1f-9f41-ab48d2835c3a", "filesystem"=>"ext4", "size"=>"1024000", "mount"=>"/boot"}, "sda2"=>{"filesystem"=>"LVM2_member", "size"=>"82860032"}}
  path => /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  physicalprocessorcount => 8
  processor0 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor1 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor2 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor3 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor4 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor5 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor6 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processor7 => Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  processorcount => 8
  processors => {"models"=>["Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz", "Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz"], "count"=>8, "physicalcount"=>8}
  productname => VMware Virtual Platform
  ps => ps -ef
  puppetversion => 3.8.1
  rubyplatform => x86_64-linux
  rubysitedir => /usr/lib/ruby/site_ruby/1.8
  rubyversion => 1.8.7
  selinux => false
  serialnumber => VMware-42 3d 2a ec b8 96 b5 35-c5 c5 b4 ec e4 a7 cf bf
  sshdsakey => AAAAB3NzaC1kc3MAAACBANw5dHJoJD8se6a+T8PzJHQ6csFXmCamMgkw/iMGU/NoRMoT2L1dSYdRceX2yvpcuP+f0XHUd9Jidhbzyv+TXaQeGFun694ybiiIjX5krqH70B3VBpXnuF+ojzu+o8mAgrdAHv7RaL4j710hrxGPyVn/cqlEmZBy0WEkIImQM61BAAAAFQDpnRPYnuidoOcHuRVHRlpWvj62kwAAAIEAoyvCjHfUwIM7fmJK72yIpLY6Z3+uuBD/N6RmAtJx2vBtp3OyKwOsaZdqV1+kiMoDSqNJNsePXxs9PmtNJ3pyCg/gSilPAFyGD0yB2J3TYuS05Zvkyuge2zmHvBQX5bavp6grdl/H7toBenlRG4xmzyXxYamRdt0RTId9Tnx+rlIAAACBANlAAzWWX7gyGhrK4YHtAIH5a1PNVAOrCFj3LOyOQce4U2o1UrJXUQd5MDO32BiDvN0XAACFikWHz6XCoGdM4YwGhRTMe9MJ7vri3bVGbjHAIhJsxoItWIVUtKi2dA3iIg9iX61RcLt6osnLB6H/tmRXkbXTHWGn/8dlH0zGvyuz
  sshfp_dsa => SSHFP 2 1 52b0579624a3304e956ab417596486751827aaa8
  SSHFP 2 2 fe83d4cfce352a439c8994d1746944095333b22502256c8b5f59cb469ccff6ef
  sshfp_rsa => SSHFP 1 1 7682ee464c27395dc65fafd20a3fa20628a8bac5
  SSHFP 1 2 c9c3b39df9a32e130a4e69fa953d65e040df00b2da024cd5687dc60debc64a9a
  sshrsakey => AAAAB3NzaC1yc2EAAAABIwAAAQEAxg2jKX7EfCPtNM7bnRCBvcBWK8MeHy/FgzYU7fSQo7VbC2TS4hp45mAxeFVN6rUCiDBolXVO1p5FTsID1dAxFFSsQyIub1Yp32XuC+lr63n/I6sgjzXhIjPpFLjPRv8FKXQtbaR860dRUi94gAAnuuXdiEFlrjH4mMadCw3iE3Ks1HSaMlBGdAVJ5A3t721NTlm5HTFYR9hHQZhb5AV9Y88U+1JQn1UIi0Ye1nPiHDzApOO0Eg3wdMQcMVmOpZKTLpDA1MRuIdE6SFgnVTS0wwHKFKBMGxXNCG+gkYSnmT/nb9sOz8iNcP6zUtmItzb6ZXmxXLh4Pgjz9dl7vMfKYw==
  swapfree => 4.80 GB
  swapfree_mb => 4916.39
  swapsize => 4.86 GB
  swapsize_mb => 4975.99
  system_uptime => {"days"=>301, "hours"=>7227, "seconds"=>26020598, "uptime"=>"301 days"}
  timezone => CST
  type => Other
  uniqueid => 0a0a1f2a
  uptime => 301 days
  uptime_days => 301
  uptime_hours => 7227
  uptime_seconds => 26020598
  uuid => 423D2AEC-B896-B535-C5C5-B4ECE4A7CFBF
  virtual => vmware
4.4 安装hiera
  hiera主要用于控制一些agent经常变化的数值,在puppet2.7以后的版本必须要安装。如果不安装的话,我们在安装puppet时,系统会提示如下错误:
  Could not load hiera; cannot install
  但是在安装hiera之前,我们必须安装额外的yum源,否则系统会提示找不到该软件包。
  该yum源,我们可以puppet官网查看到。如下:
  https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives
  按照puppet官网的方法进行安装。如下:
  # rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
  yum源配置完毕后,我们现在来安装hiera。如下:
  # yum -y install hiera
  以上安装完毕后,我们就可以正式安装puppet。
5 源码安装puppet
  puppet服务端与客户端的源码安装使用的是同一个软件包,安装步骤一样,只是在配置文件方面有细微的差别。
  在下载puppet源码之前,我们还要在master端和agent端创建puppet运行时使用的用户puppet。
  创建puppet用户,如下:
  # useradd -M -s /sbin/nologin puppet
  # cat /etc/passwd |grep puppet
  puppet:x:52:52:Puppet:/var/lib/puppet:/sbin/nologin
  注意:puppet服务端是以puppet用户运行的,而puppet客户端是root用户运行。
  这样做的目的是:master在服务端以普通用户运行安全性比较高,而agent在客户端以root用户运行,是因为master在创建用户、修改系统文件等资源时,需要具有最高权限。
5.1 puppet源码安装
  puppet的源码包,我们可以从puppet官网下载。目前puppet最新版为3.7.3.如下:
  http://downloads.puppetlabs.com/puppet/
  下载puppet软件包。如下:
  # wget http://downloads.puppetlabs.com/puppet/puppet-3.7.3.tar.gz
  解压puppet软件包,如下:
  # tar -xf puppet-3.7.3.tar.gz
  puppet的安装方法与facter的安装一样,如下:
  # ruby install.rb或者./install.rb
  puppet安装完毕后,我们来查看下其帮助信息,如下:
  # puppet help
  查看puppet的安装位置如下:
  # ll /etc/puppet/
  total 28
  -rw-r--r-- 1 root root 4178 May 22 04:55 auth.conf
  drwxr-xr-x 2 root root 4096 Jun 11 13:28 manifests
  以上就是puppet的安装,安装完毕后。我们现在来配置puppet。
5.2 master端配置
  puppet安装完毕后,我们来配置下master端。把puppet源码包ext/redhat/目录下的puppet.conf文件复制到puppet的安装目录/etc/puppet/下,如下:
  # cp ext/redhat/puppet.conf /etc/puppet/
  # vi /etc/puppet/puppet.conf
  server = jijilu-test
  certname = jijilu-test
  pluginsync = false
  其中:
  jijilu-test表示puppet服务器的主机名。
  pluginsync = false表示关闭模块中的插件功能
  配置文件修改完毕后,我们现在来配置master端的启动脚本。
  复制puppet源码包ext/redhat/目录下的server.init文件到/etc/init.d/下,并重命名为puppetmaster。然后赋予puppetmaster可执行权限。如下:
  # cp ext/redhat/server.init /etc/init.d/puppetmaster
  # chmod u+x /etc/init.d/puppetmaster
  注意:master端启动,我们也可以通过puppet master命令来启动。如下:
  # puppet master
  # netstat -tunlp |grep "8140"
  tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN      26486/ruby
  # ps aux |grep puppet
  puppet   26486  0.4  0.9 150224 47868 ?        Ssl  11:15   1:50 /usr/bin/ruby /usr/bin/puppet master
  把puppetmaster加入到开机启动项。如下:
  # chkconfig --add puppetmaster
  # chkconfig puppetmaster on
  # chkconfig |grep puppetmaster
  puppetmaster    0:off   1:off   2:off   3:off   4:off   5:off   6:off
  以上都配置完毕后,我们来启动puppet服务,如下:
  # /etc/init.d/puppetmaster start
  # 通过上图,我们可以很puppet服务使用TCP协议的8140端口,而且运行时使用puppet用户。
  puppet服务端配置完毕后,我们现在来配置puppet客户端。
5.3 agent端配置
  agent端的配置,只需要把puppet.conf文件复制到puppet的安装目录/etc/puppet/下即可,如下:。
  # cp ext/redhat/puppet.conf /etc/puppet/
  # cat /etc/puppet/puppet.conf
  server = jijilu-test
  pluginsync = false
  其中:
  jijilu-test表示puppet服务器的主机名。
  pluginsync = false表示关闭模块中的插件功能
  agent端启动,我们可以通过puppet agent命令来启动。如下:
  # puppet agent
  # ps aux |grep puppet
  root     23854  0.0  1.5 162220 61932 ?        Ss   11:49   0:06 /usr/bin/ruby /usr/bin/puppet agent
  通过上图,我们也可以看出agent端运行时使用的用户为root,而不是puppet用户。
  注意:
  agent端我们使用puppet agent命令来进行各种管理,包括证书的申请、资源的同步,我们都是通过这个命令进行的。
  agent可以以两种方式运行:第一种方式是命令接参数连接master,第二种是以守护进程的形式在系统后台运行,默认每30分钟连接一次master,但是这样并不灵活。我们一般是使用第一种方式,并配合crontab使用。
6 puppet证书授权
  我们知道puppet为了安全,采用ssl隧道通信,因此需要申请证书来验证。
6.1  master端证书初始化
  当master端第一次启动的时候,可以查看/var/log/message日志文件中,有类似如下的信息:
  # tail -f /var/log/messages
  Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for ca
  Jun 11 11:15:25 jijilu-test puppet-master[26440]: jijilu-test has a waiting certificate request
  Jun 11 11:15:25 jijilu-test puppet-master[26440]: Signed certificate request for jijilu-test
  Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/ca/requests/jijilu-test.pem'
  Jun 11 11:15:25 jijilu-test puppet-master[26440]: Removing file Puppet::SSL::CertificateRequest jijilu-test at '/var/lib/puppet/ssl/certificate_requests/jijilu-test.pem'
  Jun 11 11:15:26 jijilu-test puppet-master[26486]: Reopening log files
  Jun 11 11:15:26 jijilu-test puppet-master[26486]: Starting Puppet master version 3.8.1
  Jun 11 11:49:17 jijilu-test puppet-master[26486]: 430-test01 has a waiting certificate request
  从日志中我们可以看出第一次启动master端时,puppet服务会在本地创建认证中心,给自己授权证书和key,这个我们可以在/var/lib/puppet/ssl看到那些证书和key。如下:
  # ll /var/lib/puppet/ssl
  drwxr-xr-x 5 puppet puppet 4096 Jun 11 11:15 ca
  drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certificate_requests
  drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:15 certs
  -rw-r--r-- 1 puppet puppet  958 Jun 11 11:15 crl.pem
  drwxr-x--- 2 puppet puppet 4096 Jun 11 11:05 private
  drwxr-x--- 2 puppet puppet 4096 Jun 11 11:06 private_keys
  drwxr-xr-x 2 puppet puppet 4096 Jun 11 11:06 public_keys
  这个目录和/etc/puppet/puppet.conf文件中配置的ssldir路径有关系。
  我们也可以查看master端给自己授权的证书文件,如下:
  # ll /var/lib/puppet/ssl/ca/signed
  -rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 jijilu-test.pem
6.2  agent端申请证书
  agent端在第一次连接master端时,会向master端申请证书。如果master端没有授予agent端证书,那么agent端和master端之间的连接是不会建立成功的。
  此时agent端会持续等待master端授权证书,并会每隔2分钟去检查master端是否签发证书。
  我们现在使用puppet agent --server jijilu-test连接master端,如下:
  # puppet agent --server jijilu-test --test
6.3  master端授权证书
  agent端申请证书完毕后,需要我们切换到master端,使用puppet cert命令来对agent端授权证书。
  有关puppet cert的使用,我们可以查看pupper cert的帮助信息。如下:
  # pupper cert
  现在我们可以查看master端有哪些主机在申请证书,如下:
  # puppet cert list
  现在我们来给agent端授权证书,使用如下命令:
  # puppet cert sign 430-test01
  注意:
  如果实际生产环境客户端数量比较多的话,我们可以一次性授权所有证书。如下:
  # puppet cert sign --all
  在master端查看所有已经通过认证的agent端,如下:
  # puppet cert -all
  # 现在我们再来看看master端给agent端授权的证书文件,如下:
  # ll /var/lib/puppet/ssl/ca/signed
  -rw-r--r-- 1 puppet puppet 1939 Jun 11 11:55 430-test01.pem
  -rw-r--r-- 1 puppet puppet 1944 Jun 11 11:15 jijilu-test.pem
  通过上图,我们可以看出master端授权客户端c.ilanni.com的证书文件是430-test01.pem。
6.4 查看agent端证书
  在master端授权完毕后,我们现在切换到agent端查看授权的证书文件,如下:
  # ll /var/lib/puppet/ssl/certs
  -rw-r--r--. 1 puppet puppet 1939 Jun 11 11:57 430-test01.pem
  -rw-r--r--. 1 puppet puppet 1944 Jun 11 11:49 ca.pem
  通过上图,我们可以看出agent端的证书文件430-test01.pem与master端的证书文件是一样的。
6.5 puppet证书问题
  在实际的生产环境中,可能会出现已经通过master端认证的agent端主机名被修改或者其他一些误操作,从而导致agent端无法与master端进行正常通信。
  当遇到这种情况时,我们一般的处理方法是先删除master端和agent端的相关的认证文件,然后在agent端重新申请证书。
  具体操作如下:
  agent端,删除/var/lib/puppet/ssl目录,如下:
  # rm -fr /var/lib/puppet/ssl
  master端,删除/var/lib/puppet/ssl/ca/signed目录下的证书文件,如下:
  # rm -fr /var/lib/puppet/ssl/ca/signed/c.ilanni.com.pem
  以上操作完毕后,agent端再次申请证书即可。
7 puppet资源
  puppet环境搭建完毕后,我们现在开始来介绍puppet资源相关的内容。
7.1 puppet的资源类型及帮助
  puppet的资源,我们是可以通过相关命令查看puppet支持的资源类型。
  通过前面的章节,我们知道puppet是支持子命令进行查询的。如下:
  # puppet help ca
  查看puppet支持的资源类型。如下:
  # puppet describe --list
  也可以通过puppet resource --type命令查询,如下:
  # puppet resource --type
  通过上图,我们可以看到puppet支持用户user、文件file、crontab等大部分的资源。
  如果想查看user的资源,我们还是继续使用puppet describe user命令进行查看。如下:
  # puppet describe user
  # 如果我们想查看user在puppet站点site.pp文件中的具体使用方法,可以通过如下命令进行查看:
  # puppet resource user
  通过上图,我们可以看到puppet已经给出了user使用的例子,我们只需要按照这个例子进行操作即可。
  注意:
  如果puppet describe帮助中没有该资源在site.pp站点中的使用详情,我们可以去到puppet resource中进行查看。
  这个只是以user资源为例,如果想查看host资源的帮助,我们也可以使用类似的命令,如下:
  # puppet resource host
  如果你不想在本机进行查看,那么也可以去puppet官网进行查看,如下:
  https://docs.puppetlabs.com/references/latest/type.html
7.2 puppet资源配置文件
  puppet的资源配置文件在服务端的/etc/puppet/manifests目录下,我们需要在该目录下创建一个站点文件site.pp。
  我们在该文件中创建需要同步到agent端的资源,如下:
  # cat /etc/puppet/manifests/site.pp
  node default{
  file { "/tmp/test.txt":
  content => "Hello,calvin ,this is puppet test!n"}
  }
  以上命令表示在puppet资源配置文件冲创建一个默认节点,使用file资源,在agent端的/tmp/目录下创建test.txt,内容为:Hello, calvin,this is puppet test!n
  注意:
  其中的n表示换行。如果不加n的话,查看该文件内容时会显示成这样:
  Hello,calvin,this is puppet test![root@430-test01 ~]#
  同时site.pp文件创建完毕后,我们要先重启下master端,如下:
  # /etc/init.d/puppetmaster restart
  现在切换到agent端同步该资源,如下:
  puppet agent --test --server jijilu-test
  通过上图,我们可以看到agent端已经把master端的资源的同步到本地。
  现在我们来查看,agent端的/tmp目录下是否有test.txt这个文件。如下:
  # cat /tmp/test.txt
  通过上图,我们可以看到agent端确实已经同步到master端的资源。/tmp目录下确实有test.txt这个文件,而且内容也确实和master端的一样。
  到此有关puppet3.7搭建与配置介绍完毕。
8 使用配置示例
8.1 文件分发
  描述:通过puppet服务端可以向被管理机(客户端)上推送文件,方法是使用file类型的source属性
  第一步:
  # vi /etc/puppet/fileserver.conf
  [files]
  path /opt/
  allow *
  # 设置文件推送到目录
  # 设置准许连接到服务端的主机地址
  第二步:vi /etc/puppet/manifests/site.pp
  File
  { "/opt/rlwrap-0.30.tar.gz":
  source=> "puppet://$puppetserver/files/rlwrap-0.30.tar.gz",
  }
  # 设置服务器上/opt目录下的rlwrap-0.30.tar.gz为被传送文件
  #此处“$puppetserver”是Puppet Server端的名称,即hostname,在hosts文件里指定,生产环境下用内部的DNS上作解析
  第三步:
  在客户端执行更新命令
  # puppet agent --test --server jijilu-test
  Info: Caching catalog for 430-test01
  Info: Applying configuration version '1434090440'
  Notice: /Stage[main]/Main/File[/opt/rlwrap-0.30.tar.gz]/ensure: defined content as '{md5}03d8bd4996945ea32d3c7d5dc38c956e'
  Notice: Finished catalog run in 0.44 seconds
  查看/opt目录下已经同步这个文件:
  # ll /opt/
  total 184
  drwxr-xr-x. 2 root root   4096 Jun 22  2012 rh
  -rw-r--r--. 1 root root 184037 Jun 12 15:41 rlwrap-0.30.tar.gz
8.2 修改文件属性
  描述:把/tmp/test.txt文件的权限改为puppet用户,并设置权限为666。
  第一步:编辑服务端的site.pp
  vi /etc/puppet/manifests/site.pp
  file
  { "/tmp//tmp/test.txt ": owner => "puppet",
  group => "puppet", mode => 666,
  }
  第二步:在客户端执行命令
  # puppet agent --test --server jijilu-test
  Info: Caching catalog for 430-test01
  Info: Applying configuration version '1434095252'
  Notice: /Stage[main]/Main/File[/tmp/test.txt]/owner: owner changed 'root' to 'puppet'
  Notice: /Stage[main]/Main/File[/tmp/test.txt]/group: group changed 'root' to 'puppet'
  Notice: /Stage[main]/Main/File[/tmp/test.txt]/mode: mode changed '0644' to '0666'
  Notice: Finished catalog run in 0.03 seconds
8.3 执行SHELL命令或shell脚本
  描述:通过puppet分发执行shell脚本,在客户端的opt目录下新建一目录shelldir。
  第一步:编辑服务端的site.pp
  vi /etc/puppet/manifests/site.pp
  exec { "exec-mkdir":  cwd => "/opt",
  command  => "sh /opt/lgh.sh",
  user => "root",
  path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
  }
  第二步:在客户端编辑上一步command路径中指定的shell脚本,例如
  vi /opt/lgh.sh
  #!/bin/bash
  mkdir /opt/shelldir
  第三步:在客户端执行命令
  # puppet agent --test --server jijilu-test
  Info: Caching catalog for 430-test01
  Info: Applying configuration version '1434095394'
  Notice: /Stage[main]/Main/Exec[exec-mkdir]/returns: executed successfully
  Notice: Finished catalog run in 0.21 seconds
  在/opt目录下查看shelldir目录有没有建立。
8.4 cron计划任务
  描述:接上面的shell程序实例,在17:30执行/opt/lgh.sh。
  第一步:编辑服务端的site.pp
  vi /etc/puppet/manifests/site.pp
  cron { "cron-shell":
  command => "sh /opt/lgh.sh",
  user => "root",
  minute => "30",
  hour => "17"
  }
  第二步:在客户端执行命令
  # puppet agent --test --server jijilu-test
  Info: Caching catalog for 430-test01
  Info: Applying configuration version '1434095710'
  Notice: /Stage[main]/Main/Cron[cron-shell]/ensure: created
  Notice: Finished catalog run in 0.12 seconds
  然后在客户端使用
  # crontab -l查看效果
  # crontab -l
  # HEADER: This file was autogenerated at Fri Jun 12 15:55:11 +0800 2015 by puppet.
  # HEADER: While it can still be managed manually, it is definitely not recommended.
  # HEADER: Note particularly that the comments starting with 'Puppet Name' should
  # HEADER: not be deleted, as doing so could cause duplicate cron jobs.
  * * * * * /usr/sbin/ntpdate 10.10.1.230 >/dev/null 2>&1
  # Puppet Name: cron-shell
  30 17 * * * sh /opt/lgh.sh
8.5 服务检查及状态修改
  描述:可以通过puppet对一些服务进行检查。puppet是通过service命令操作的。所以,只能针对在/etc/init.d/目录下的服务
  实例:把客户端的防火墙起来
  第一步:编辑服务端的site.pp
  vi /etc/puppet/manifests/site.pp
  service
  { iptables:
  ensure => "running",
  }
  第二步:在客户端执行命令
  # puppet agent --test --server jijilu-test
  Info: Caching catalog for 430-test01
  Info: Applying configuration version '1434095840'
  Notice: /Stage[main]/Main/Service[iptables]/ensure: ensure changed 'stopped' to 'running'
  Info: /Stage[main]/Main/Service[iptables]: Unscheduling refresh on Service[iptables]
  Notice: Finished catalog run in 0.20 seconds
  # /etc/init.d/iptables status
  Table: filter
  Chain INPUT (policy ACCEPT)
  num  target     prot opt source               destination

  1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state>  2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
  3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
  4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
  5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
  Chain FORWARD (policy ACCEPT)
  num  target     prot opt source               destination
  1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
  Chain OUTPUT (policy ACCEPT)
  num  target     prot opt source               destination

运维网声明 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-544858-1-1.html 上篇帖子: Puppet安装部署篇(二) 下篇帖子: Puppet 命令参数介绍(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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