puppet

兩臺機器 192.168.1.122 (服務器) 192.168.1.124(客戶端)

兩臺機器關閉selinux,清空iptebles規則,並保存,設置hostname

122上HOSTNAME=web1.bbs.com vim /etc/sysconfig/network 定義hostname

124上HOSTNAMEweb2.bbs.com vim /etc/sysconfig/network 定義hostname

編輯hosts文件 122和124全爲

192.168.1.122 web1.bbs.com

192.168.1.124 web2.bbs.com

兩臺機器安裝ntpdate,並建立自動同步時間的任務計劃

yum install -y ntp


cront -e 加入


*/10 * * * * ntpdate  ntpdate time.nist.gov > /dev/null 2>& 1



服務器端

安裝puppet源

 rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"


作用

 ls /etc/yum.repos.d/

CentOS-Base.repo       CentOS-Media.repo  epel-testing.repo

CentOS-Debuginfo.repo  CentOS-Vault.repo  puppetlabs.repo

CentOS-fasttrack.repo  epel.repo


安裝服務端程序

yum install -y puppet-server


啓動服務

service puppetmaster start


開機啓動

chkconfig puppetmaster on


客戶端


安裝puppet源 

rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"


安裝客戶程序

yum install -y puppet


修改配置文件 

vim /etc/puppet/puppet.conf 在最後添加

server = web1.bbs.com

runinterval = 10 主動更新,每隔30秒

啓動服務

service puppet start

開機啓動

chkconfig puppet on



配置認證


服務器查看客戶端證書列表

puppet cert list --all 如果簽發的認證,會本行最前面帶一個+


客戶端上生成ssl證書

puppet agent --test --server web1.bbs.com


服務器端簽發指定客戶端證書

puppet cert --sign web2.bbs.com


服務器端可以刪除指定客戶端證書


puppet cert clean web2.bbs.com


刪除所有證書

puppet cert clean --all

刪除證書的時候有時候就不顯示客戶端l

刪除下面的目錄 重啓客戶端服務


rm -rf /var/lib/puppet/ssl/* 存放證書的目錄

 

/etc/init.d/puppet restart

 [root@web1 ~]# puppet cert list --all

  "web2.bbs.com" (SHA256) 87:EF:DA:AE:22:58:08:7C:8A:F0:71:AB:D2:AB:6D:33:AB:31:BF:21:6C:A0:A8:4F:F4:AB:52:47:0A:99:A4:86


[root@web1 ~]# puppet cert --sign web2.bbs.com

Notice: Signed certificate request for web2.bbs.com

Notice: Removing file Puppet::SSL::CertificateRequest web2.bbs.com at '/var/lib/puppet/ssl/ca/requests/web2.bbs.com.pem'



配置自動簽發證書


vim /etc/puppet/puppet.conf

main末尾

加上 # Where SSL certificates are kept.

    # The default value is '$confdir/ssl'.

    ssldir = $vardir/ssl

    autosign = true 支持自動簽名



服務器端刪除客戶端證書 puppet cert clean web2.bbs.com


客戶端刪除ssl相關文件 rm -rf /var/lib/puppet/ssl*


服務器創建自動簽發的配置文件 vim /etc/puppet/autosign.conf 加入一下內容

*.bbs.com


服務器重啓puppetmasert服務 /etc/init.d/puppetmaster restart


客戶端重啓puppet服務 /etc/init.d/puppet restart


服務端

puppet cert list --all 可以看到web2.bbs.com已經簽名


如果客戶端不重啓puppet服務,也可以通過命令來自動簽發


puppet agent --test --server web1.bbs.com






測試證書


服務器上編輯配置文件

vim /etc/puppet/mainfests/site.pp 添加如下內容 主配置文件

node default {

file {"/tmp/123.txt";

content => "test.test";

}}

說明:該配置文件後面還會講到,如果不配置該文件,則客戶端不會同步任何數據


客戶端上稍等一會 每隔10s會自動執行服務端上的任務

tcpdump -nn host 192.168.1.122 抓包

puppet agent --test --server web1.bbs.com

這樣在客戶端的/tmp/下會有個123.txt文件,內容爲test,test

這樣認證就成功了

puppet cert clean web2.bbs.com

清空掉 就不管用了


定義模塊管理

模塊是puppet的配置單元,模塊裏面會包含類和資源,同步文件,遠程執行命令,cron等叫做資源,都是通過模塊來實現的,下面來寫一個模塊


服務器端創建目錄 mkdir /etc/puppet/modules/testm 這個目錄名字也作爲模塊名字,然後繼續創建模塊對應的子目錄mkdir /etc/puppet/modules/testm/{files,manifests,templates} file裏面存文件,可以留空,mamifests裏面是配置文件,templates裏面是模塊文件可以爲空


創建配置文件 vim /etc/puppet/modules/testm/manifests/init.pp 初始入口的配置文件很關鍵

 class testm{

   file {"tmp/2.txt":

   owner => "root",

   group => "root",

   mode => 0400,

   source => "puppet://$puppetserver/modules/testm/1.txt"

}}

說明:類名字也叫作testm,類下面定義了一個資源file,文件名字叫做/tmp/2.5s5,owner,group,mode定義文件的屬主,屬組以及權限,source定義這個文件從哪裏獲取,$puppetserver一會也要定義一下,這裏指的是puppetserver服務器上/etc/puppet/modules/testm/files/1.txt

下面要繼續定義一個很關鍵的配置文件

vim /etc/puppet/manifests/site.pp

$puppetserver='web1.bbs.com'

node 'web2.bbs.com'{

  include testm

}

說明:$puppetserver定義服務端的主機名,node後面爲客戶端的主機名,這裏面定義該客戶端要加載的模塊


配置完成後,在客戶端執行命令:

puppet agent --test --server=web1.bbs.com 如果客戶端上啓動了puppet服務,不用執行這命令,他也會自動同步的



文件或目錄資源

上面的模塊其實只是同步了一個文件而已,那麼要怎麼同步一個目錄?可以通過實現同步一個目錄來做一個包發佈系統 比如在一臺機器上便已安裝好了Apache,那麼就可以通過這樣的模塊把這個Apache目錄整個發佈到其他機器上


服務器配置

模塊配置如下

cless apache{

file {"/usr/local/apache2":對方機器上的目錄

owner => "root",

group => "root",

source => "puppet://$puppetserver/modules/testm/apache2",從服務的目錄下載

recurse => true

purge => true

}

}

其中recurse=>這個參數很關鍵,表示遞歸的意思,沒有這個不能同步目錄 purge參數可以保證當服務端刪除某個文件,客戶端可以跟着刪除




遠程執行命令

 exec {"123":

unless => "test -f /tmp/55.txt",

path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],

command => "touch /tmp/55.txt

}

說明:123只是作爲該資源的一個名字,unless後面的命令作爲條件,當條件成立時不會執行下面的命令,如果想要條件成立時,執行下面的命令,用onlyif,要注意的是,一定要給執行的這條命令加個條件,使用unless就可以,必須滿足這個條件才能執行命令,否則這個命令會一直執行,不太妥當



任務計劃

cron{"222":

command => "/sbin/ntpdate time.windows.com",

user => "root"

minute => "*/10",

minute => ”10-15“,

#ensure => "absent"

}

說明:分時日月周分別爲對應puppet裏面的minute,hour,monthday,month,weekday,ensure設置爲absent爲刪除該任務,如果不設置改行則爲建立


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