運維自動化之puppet

Server  IP:192.168.72.10/24   hostname:puppet-server
Client  IP:192.168.72.111/24  hostname:puppet-client-01
Clinet  IP:192.168.72.168/24  hostname:puppet-client-02
關閉selinux
1、配置服務器和客戶端的IP地址和主機名,確保可以相互ping通主機名
2、服務器和客戶端安裝所需環境
[root@puppet]# yum install ruby* -y
注:如果需要精細安裝,只需如下4個包
[root@puppet]# yum install ruby-libs ruby ruby-irb ruby-rdoc -y
3、同步服務器和客戶端的時間
[root@puppet]# ntpdate time.nist.gov
注:如果沒有ntpdate可以yum安裝
[root@puppet]# yum install ntpdate -y
4、服務器和客戶端安裝facter和puppet主程序
5、下載安裝facter
[root@puppet]# wget http://downloads.puppetlabs.com/facter/facter-latest.tgz
[root@puppet]# tar -zxvf facter-latest.tgz
[root@puppet facter-1.6.6]# cd facter-1.6.6
[root@puppet facter-1.6.6]# ruby install.rb
6、下載安裝puppet
[root@puppet]wget http://puppetlabs.com/downloads/puppet/puppet-2.6.14.tar.gz
[root@puppet]# tar -zxvf puppet-2.6.14.tar.gz
[root@puppet srv]# cd puppet-2.6.14
[root@puppet 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源文件
[root@puppet-server puppet-2.6.14]# mkdir /etc/puppet
[root@puppet-server puppet-2.6.14]# cp conf/auth.conf /etc/puppet/
[root@puppet-server puppet-2.6.14]# cp conf/redhat/fileserver.conf /etc/puppet/
[root@puppet-server puppet-2.6.14]# cp conf/redhat/puppet.conf /etc/puppet/
[root@puppet-server puppet-2.6.14]# cp conf/redhat/server.init /etc/init.d/puppetmaster
[root@puppet-server puppet-2.6.14]# chmod +x /etc/init.d/puppetmaster
[root@puppet-server puppet-2.6.14]# chkconfig --add puppetmaster
[root@puppet-server puppet-2.6.14]# chkconfig puppetmaster on
[root@puppet-server puppet-2.6.14]# chkconfig --list puppetmaster
puppetmaster    0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@puppet-server puppet-2.6.14]# mkdir -p /etc/puppet/manifests
創建puppet帳號
[root@puppet-server puppet-2.6.14]# puppetmasterd --mkusers(目的是在/var/lib/puppet下創建一些目錄)
啓動服務
[root@puppet-server puppet-2.6.14]# /etc/init.d/puppetmaster restart
Stopping puppetmaster:                                     [  OK  ]
Starting puppetmaster:                                     [  OK  ]
9、客戶client端配置
[root@puppet-client-01 puppet-2.6.14]# mkdir /etc/puppet/
[root@puppet-client-01 puppet-2.6.14]# cp conf/auth.conf /etc/puppet/
[root@puppet-client-01 puppet-2.6.14]# cp conf/namespaceauth.conf /etc/puppet/
[root@puppet-client-01 puppet-2.6.14]# cp conf/redhat/puppet.conf /etc/puppet/
[root@puppet-client-01 puppet-2.6.14]# cp conf/redhat/client.init /etc/init.d/puppet
[root@puppet-client-01 puppet-2.6.14]# chmod +x /etc/init.d/puppet
[root@puppet-client-01 puppet-2.6.14]# chkconfig --add puppet
[root@puppet-client-01 puppet-2.6.14]# chkconfig puppet on

[root@puppet-client-01 puppet-2.6.14]# vim /etc/puppet/namespaceauth.conf
......
[fileserver]
    allow *
[puppetmaster]
    allow *
[puppetrunner]
    allow *
[puppetbucket]
    allow *
[puppetreports]
    allow *
[resource]
    allow *
......
創建puppet帳號和rra目錄
[root@puppet-client-01 puppet-2.6.14]# puppetd --mkusers
注:如果報錯,可以手動創建用戶。
重啓服務
[root@puppet-client-01 puppet]# /etc/init.d/puppet restart
10、服務server端防火牆配置
[root@puppet-server ~]# iptables -A INPUT -p tcp --dport 8140 -j ACCEPT
[root@puppet-server ~]# /etc/init.d/iptables save
11、客戶client端防火牆配置
[root@puppet-client-01 ~]# iptables -A INPUT -p tcp --dport 8139 -j ACCEPT
[root@puppet-client-01 ~]# /etc/init.d/iptables save
12、服務端修改配置文件,設置允許的地址
[root@puppet-server ~]# vim /etc/puppet/fileserver.conf
......
 [files]
  path /tmp/srv/
  allow 192.168.72.0/24
......
手動認證
1、客戶端發送請求
[root@puppet-client-01 ~]# puppetd --test --server puppet-server
2、服務器端查看
[root@puppet-server ~]# puppetca -l
  puppet-client-01 (4B:58:77:C0:52:22:DD:1E:A4:A8:B8:5E:4F:9C:71:25)
3、服務器簽名認證
[root@puppet-server ~]# 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'
注:[root@puppet-server ~]# puppetca -s $hostname(對某個主機認證)
自動認證
1、服務端
[root@puppet-server ~]# vim /etc/puppet/puppet.conf
......
[main]
autosign = true
......
2、客戶端
[root@puppet-client-01 puppet-2.6.14]# vim /etc/puppet/puppet.conf
[agent]
......
    listen = true          #打開客戶端的監聽服務端的puppetrun命令
    server = puppet-server #指定服務端
    puppetport = 8139      #客戶端的監聽端口,默認是8139,可不加
    runinterval = 60       #同步文件時間,默認1800s
......
3、[root@puppet-client-01 puppet-2.6.14]#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服務器向客戶端分發文件
[root@puppet-server ~]# 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章