iszjw 发表于 2018-8-3 09:35:13

运维自动化之puppet-Darrenpan

  ServerIP:192.168.72.10/24   hostname:puppet-server
  ClientIP:192.168.72.111/24hostname:puppet-client-01
  ClinetIP:192.168.72.168/24hostname:puppet-client-02
  关闭selinux
  1、配置服务器和客户端的IP地址和主机名,确保可以相互ping通主机名
  2、服务器和客户端安装所需环境
  # yum install ruby* -y
  注:如果需要精细安装,只需如下4个包
  # yum install ruby-libs ruby ruby-irb ruby-rdoc -y
  3、同步服务器和客户端的时间
  # ntpdate time.nist.gov
  注:如果没有ntpdate可以yum安装
  # yum install ntpdate -y
  4、服务器和客户端安装facter和puppet主程序
  5、下载安装facter
  # wget http://downloads.puppetlabs.com/facter/facter-latest.tgz
  # tar -zxvf facter-latest.tgz
  # cd facter-1.6.6
  # ruby install.rb
  6、下载安装puppet
  wget http://puppetlabs.com/downloads/puppet/puppet-2.6.14.tar.gz
  # tar -zxvf puppet-2.6.14.tar.gz
  # cd puppet-2.6.14
  # ruby install.rb
  7、修改hosts文件
  server端
  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 puppet-server
  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  192.168.72.111 puppet-client-01
  client端
  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 puppet-client-01
  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  192.168.72.10 puppet-server
  8、服务器server端配置
  copy源文件
  # mkdir /etc/puppet
  # cp conf/auth.conf /etc/puppet/
  # cp conf/redhat/fileserver.conf /etc/puppet/
  # cp conf/redhat/puppet.conf /etc/puppet/
  # cp conf/redhat/server.init /etc/init.d/puppetmaster
  # chmod +x /etc/init.d/puppetmaster
  # chkconfig --add puppetmaster
  # chkconfig puppetmaster on
  # chkconfig --list puppetmaster
  puppetmaster    0:off 1:off 2:on 3:on 4:on 5:on 6:off
  # mkdir -p /etc/puppet/manifests
  创建puppet帐号
  # puppetmasterd --mkusers(目的是在/var/lib/puppet下创建一些目录)
  启动服务
  # /etc/init.d/puppetmaster restart
  Stopping puppetmaster:                                    
  Starting puppetmaster:                                    
  9、客户client端配置
  # mkdir /etc/puppet/
  # cp conf/auth.conf /etc/puppet/
  # cp conf/namespaceauth.conf /etc/puppet/
  # cp conf/redhat/puppet.conf /etc/puppet/
  # cp conf/redhat/client.init /etc/init.d/puppet
  # chmod +x /etc/init.d/puppet
  # chkconfig --add puppet
  # chkconfig puppet on
  # vim /etc/puppet/namespaceauth.conf
  ......
  
  allow *
  
  allow *
  
  allow *
  
  allow *
  
  allow *
  
  allow *
  ......
  创建puppet帐号和rra目录
  # puppetd --mkusers
  注:如果报错,可以手动创建用户。
  重启服务
  # /etc/init.d/puppet restart
  10、服务server端防火墙配置
  # iptables -A INPUT -p tcp --dport 8140 -j ACCEPT
  # /etc/init.d/iptables save
  11、客户client端防火墙配置
  # iptables -A INPUT -p tcp --dport 8139 -j ACCEPT
  # /etc/init.d/iptables save
  12、服务端修改配置文件,设置允许的地址
  # vim /etc/puppet/fileserver.conf
  ......
  
  path /tmp/srv/
  allow 192.168.72.0/24
  ......
  手动认证
  1、客户端发送请求
  # puppetd --test --server puppet-server
  2、服务器端查看
  # puppetca -l
  puppet-client-01 (4B:58:77:C0:52:22:DD:1E:A4:A8:B8:5E:4F:9C:71:25)
  3、服务器签名认证
  # puppetca -s -a(对所有客户端认证)
  notice: Signed certificate request for puppet-client-01
  notice: Removing file Puppet::SSL::CertificateRequest puppet-client-01 at '/var/lib/puppet/ssl/ca/requests/puppet-client-01.pem'
  注:# puppetca -s $hostname(对某个主机认证)
  自动认证
  1、服务端
  # vim /etc/puppet/puppet.conf
  ......
  
  autosign = true
  ......
  2、客户端
  # vim /etc/puppet/puppet.conf
  
  ......
  listen = true          #打开客户端的监听服务端的puppetrun命令
  server = puppet-server #指定服务端
  puppetport = 8139      #客户端的监听端口,默认是8139,可不加
  runinterval = 60       #同步文件时间,默认1800s
  ......
  3、#puppetd
  #客户端运行命令puppetd,会放在后台运行,从此客户端会每隔60s同步一次服务器里的site.pp配置
  功能测试:
  1、puppet运维自动化之组管理
  ......
  group { "ceshi":
  gid => 800,                         #该组的 gid,必须是数字,如果不指定,将自动分配 ,不同的系统自动分配的算法不一样,不推荐使用自动分配gid
  allowdupe => false,               #是否允许两个相同的gid, 这个参数不能在freebsd上面使用, 可以设置的值是false , true
  ensure => present,                  #创建或者删除组,设置absent就删除该组,设置 present就创建该组
  members => [ ceshi1,ceshi2,ceshi3 ] #该组的成员
  }
  ......
  2、puppet运维自动化之文件分发
  通过puppet服务器向客户端分发文件
  # vim /etc/puppet/manifests/site.pp
  ......
  file
  {"/tmp/srv/darren":      #资源的标题
  name => "/tmp/srv/darren",#name等于标题,所以可以省略
  source => "puppet://puppet-server/files/darren",
  owner =>root,             #客户端下载后的文件属主
  group =>root,             #客户端下载后的文件属组
  mode =>777                #客户端下载后的文件权限
  }
  ......
  file
  {"/tmp/srv/darren":
  source => "puppet://puppet-server/files/darren",
  }
  ......
  file {
  "/tmp/srv/ceshi.txt":
  content => file("/tmp/srv/ceshi.txt");
  }
  ......
  3、puppet运维自动化之crontab文件管理
  ......
  cron { "reboot":
  command => "/sbin/init 6",
  user =>root,
  minute =>35,
  hour =>13
  }
  #除了name和command这两个参数以外,其他都是可选项
  #name该crontab的名字,用于区分不同的crontab
  #command是crontab要执行的命令,环境变量按照系统本地规则进行管理,推荐使用绝对路径
  #ensure指定该资源是否启用,可设置成true或false
  #environment在crontab环境里指定环境变量,例如PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  #user把crontab任务加入到默认的crontab列表,默认是运行puppet的用户
  #minute运行crontab的分钟,可设置0-59
  #hour运行crontab的小时,可设置0-23
  #monthday运行crontab的每月中的某一天,可设置1-31
  #month运行crontab的月份,1-12
  #weekday运行crontab的星期数,0-7
  ......
  4、puppet运维自动化之分类管理客户端
  ......
  node puppet-client-01 {
  file {
  "/tmp/srv/192.168.72.0":
  source => "puppet://puppet-server/files/192.168.72.0",
  owner =>root,
  group =>root,
  mode =>777,
  ensure =>present
  }
  }
  ......
  #node,节点定义,当一个节点(puppet客户端)连接到puppet服务器端,puppet解析器会查找这个节点的node代码片断,然后利用这个代码片断来生成该客户端的配置代码。
  5、puppet运维自动化之yum安装软件包,以httpd模拟测试
  ......
  package { "httpd": ensure => "installed" }
  #ensure设置软件包得状态:installd(present)表示要安装该软件,absent表示卸载该软件,latest表示安装软件包的最新版本。
  ......
  6、puppet运维自动化之网络下载安装rpm包
  ......
  package { "epel":
  ensure => present,
  provider => rpm,
  source => "http://mirrors.sohu.com/fedora-epel//6/x86_64/epel-release-6-5.noarch.rpm"
  }
  ......
  7、puppet运维自动化之安装多个软件包
  ......
  Package { ensure => "installed" }#注意:第一个P是大写,这就意味着对软件包管理设置了一个全局的的参数。
  package { "lrzsz": }
  package { "telnet": }
  package { "sudo": }
  ......
  8、puppet运维自动化之服务管理
  ......
  service {
  "nfs":
  ensure => running;
  "iptables":
  ensure => stopped;
  "puppet":
  enable => true;
  "httpd":
  enable => false;
  }
  ......
  参数
  #binary :运行服务的命令的路径, 只用于不支持init的操作系统, 如果没有指定启动脚本,就用这个命令来启动服务。
  #enable :服务是否随开机而启动,可设置的值为true,false,需要provider支持enableable。
  #ensure: 服务是否运行,可设置的值为running,stopped,也可以用true,false。
  #hasrestart:指出管理脚本是否支持restart参数,如果不支持,就用stop和start实现restart效果。可以设置的值是true 或 false。
  #hasstatus :服务的init脚本是否支持status参数,可设置的值为ture,false。
  #name: 该资源的namevar, 服务的名字,通常就是在/etc/init.d/目录下的名字。
  #path: 指定查找init 脚本的路径。
  #pattern :搜索进程表匹配字符串,用于不支持init的脚本,当要停止一个服务的时候,通过查看进程运行列表来判断。
  #provider :The specific backend for provider to use,可设置的值有base, daemontools,init等。
  #restart :重启服务
  #start: 开启服务
  #status :服务运行状态
  #stop: 停止服务
  9、puppet运维自动化之主机管理
  ......
  #客户端192.168.72.128添加主机别名name01和name02
  host { "name":
  ip => '192.168.72.128',
  host_aliases => ["name01", "name02" ],
  ensure =>'present'
  }
  ......
  #host:安装和管理主机实体。对大部分系统来说,这些实体就在/etc/hosts文件中
  #ip:主机的IP地址
  #host_aliases:主机别名,可以有多个,多个值需要指定为一个数组。
  #ensure:确定该主机是否启用,有效值present和absent
  10、puppet运维自动化之执行外部命令
  ......
  #客户端解压puppet软件包
  exec { "tar xf /tmp/srv/puppet-2.6.14.tar.gz":
  cwd => "/tmp/srv/",
  creates => "/tmp/srv/puppet",
  path => ["/bin","/usr/bin","/usr/sbin"]
  }
  ......
  #cwd:指定命令执行的目录。如果目录不存在,则命令执行失败
  #creates:指定命令所生成的文件。如果提供了这个参数,那么命令只会在所指定的文件不存在的情况的被执行
  #path:命令执行的搜索路径。如果path没有被定义,命令需要使用绝对路径。路径可以以数组或以冒号分隔的形式来定义。
  11、puppet运维自动化之目标客户端执行脚本(前提是客户端已经存在该脚本)
  ......
  #客户端执行hello.sh脚本
  exec {
  "/tmp/srv/hello.sh":
  cwd =>"/tmp/srv",
  timeout =>120,      #脚本的执行时间,防止死循环,单位为秒
  user =>root,
  path =>["/sbin","/usr/local/sbin","/usr/local/bin","/usr/bin","/bin"],
  }
  ......
  错误解决参考:
  http://k.ifeng.com/149804/4112878
  http://www.mysqlops.com/2011/11/08/puppet-errors.html
页: [1]
查看完整版本: 运维自动化之puppet-Darrenpan