天天看點

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服務,也可以通過指令來自動簽發

測試證書

伺服器上編輯配置檔案

vim /etc/puppet/mainfests/site.pp 添加如下内容 主配置檔案

node default {

file {"/tmp/123.txt";

content => "test.test";

}}

說明:該配置檔案後面還會講到,如果不配置該檔案,則用戶端不會同步任何資料

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

tcpdump -nn host 192.168.1.122 抓包

這樣在用戶端的/tmp/下會有個123.txt檔案,内容為test,test

這樣認證就成功了

清空掉 就不管用了

定義子產品管理

子產品是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"

繼續閱讀