天天看點

部署搭建 puppet

puppet 是基于 rubby開發,C/S架構,支援多平台,可以管理配置檔案、使用者、cron任務、軟體包、系統服務等。分為社群免費版和企業收費版,企業版支援圖形化配置。

一、安裝和配置

1、準備工作

準備兩台機器,這兩台機器都關閉 selinux,清空 iptables 規則并儲存。

master:192.168.0.109

slaver:192.168.0.110

2、編輯 hosts 檔案

兩台都設定,若機器太多,可以通過搭建 DNS,則不用在每台機器上設定這個

# vim /etc/hosts

192.168.0.109  master.test.com

192.168.0.110  slaver.test.com

3、設定 hostname

在 master 上

[root@master ~]# vim /etc/sysconfig/network

HOSTNAME=master.test.com

在 slaver 上

[root@slaver ~]# vim /etc/sysconfig/network

HOSTNAME=slaver.test.com

4、安裝 ntpdate

兩台機器都要安裝 ntpdate,并建立自動同步時間的任務計劃

# yum install -y ntp

# crontab -e

*/10 * * * * ntpdate time.windows.com >/dev/null 2>&1      //每十分鐘同步一次

5、服務端安裝配置

1)安裝puppet源

[root@master ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

2)安裝服務端程式

[root@master ~]# yum install -y puppet-server

3)啟動服務

[root@master ~]# service puppetmaster start

4)開機啟動

[root@master ~]# chkconfig puppetmaster on

6、用戶端安裝配置

[root@slaver ~]# rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

2)安裝用戶端程式

[root@slaver ~]# yum install -y puppet

3)編輯配置檔案

[root@slaver ~]# vim /etc/puppet/puppet.conf          //在 [agent] 下添加

server = master.test.com

listen = true

runinterval = 10                     //主動更新,每隔10s

4)啟動服務

[root@slaver ~]# service puppet start

5)開機啟動

[root@slaver ~]# chkconfig puppet on

二、配置認證

1、服務端檢視用戶端證書清單

[root@master ~]# puppet cert list --all     //如果是已經簽發的證書,會在本行最前面帶一個"+"

  "slaver.test.com" (SHA256) 6A:04:86:D0:CF:1E:CA:AF:77:98:FA:41:1D:06:00:3E:59:76:77:3D:5A:C0:12:11:30:8F:83:83:62:34:B1:39

+ "master.test.com" (SHA256) 5E:3B:12:B6:A1:30:20:9A:D1:2C:4D:74:2F:DC:6E:12:15:D0:F5:AD:82:BE:13:2F:D0:2C:C0:68:14:5D:F7:AD (alt names: "DNS:master.test.com", "DNS:puppet", "DNS:puppet.test.com")

2、用戶端上生成 ssl 證書

[root@slaver ~]# puppet agent --test --server master.test.com

3、服務端簽發指定用戶端證書

[root@master ~]# puppet cert --sign slaver.test.com

4、服務端檢視用戶端證書清單

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

+ "slaver.test.com" (SHA256) 63:F4:42:04:31:CD:A2:27:BA:4B:27:BB:76:B3:B8:EA:00:F6:A5:5F:90:60:A2:2F:8D:2C:6C:7B:A8:C2:60:21

注意:由上可知配置認證成功

三、測試證書

服務端編輯配置檔案

[root@master ~]# vim /etc/puppet/manifests/site.pp

node default{

    file{"/tmp/123.txt": content => "aaaaababbau";

    }

}

注意:如果不配置該檔案,則用戶端不會同步任何資料。在用戶端上等 10s 後會自動執行服務端上的任務,會在用戶端的 /tmp/ 目錄下生成一個“123.txt”檔案,内容為"aaaaababbau"

<a href="http://s2.51cto.com/wyfs02/M02/7B/83/wKiom1bNlgWRwUV3AAAo_3LX518822.png" target="_blank"></a>

四、配置自動簽發證書

1、服務端删除用戶端證書(可以用--all參數全部删除)

[root@master ~]# puppet cert clean slaver.test.com

2、用戶端删除 ssl 相關檔案

[root@slaver ~]# rm -rf /var/lib/puppet/ssl/*

3、服務端編輯配置檔案

[root@master ~]# vim /etc/puppet/puppet.conf         //在 [main] 下添加

autosign = true

4、服務端建立自動簽發的配置檔案

[root@master ~]# vim /etc/puppet/autosign.conf

*.test.com

5、服務端重新開機 puppetmaster 服務

[root@master ~]# /etc/init.d/puppetmaster restart

6、用戶端重新開機 puppet 服務

[root@slaver ~]# /etc/init.d/puppet restart

7、服務端檢視簽名

[root@master ~]# puppet cert list --all      //可以檢視到 slaver.test.com 已經簽名

注意:如果用戶端不重新開機puppet服務,也可以在服務端通過指令來自動簽名

[root@master ~]# puppet agent --test --server master.test.com

五、子產品管理

子產品是 puppet 的最大單元,子產品裡面有類,類下面有資源。同步檔案、遠端執行指令、任務計劃等叫做資源,都是通過子產品來實作的。下面我們來自定義一個子產品:

1、服務端上操作

1)建立目錄

[root@master ~]# mkdir /etc/puppet/modules/testm              //子產品名稱為 testm

[root@master ~]# cd /etc/puppet/modules/testm

[root@master testm]# mkdir {files,manifests,templates}   

注意:一個子產品下需要有這三個目錄,files存一些檔案或目錄(可以為空),manifests存子產品的主配置檔案,templates存模闆(可以留白)

2)建立需同步的檔案

[root@master testm]# touch files/111.txt

[root@master testm]# echo "aaaaabbbbbbb" &gt; files/111.txt

3)建立子產品的初始入口檔案(必須的檔案)

[root@master testm]# vim manifests/init.pp                           //内容如下

class testm{

    file {"/tmp/222.txt":

        owner =&gt; "root",

        group =&gt; "root",

        mode =&gt; 0400,

        source =&gt; "puppet://$puppetserver/modules/testm/111.txt"

        }

注意:init.pp:包含一個與子產品名稱同名的類,同時聲明其它子類。這裡類名字也叫做 testm, 類下面定義了一個資源 file,檔案名字叫做 /tmp/222.txt ;owner,group,mode 定義檔案的屬主、數組以及權限,source 定義這個檔案從哪裡擷取。 $puppetserver 一會兒也要定義一下,這裡指的是伺服器上的 /etc/puppet/modules/testm/files/111.txt 檔案。

[root@master testm]# puppet parser validate manifests/init.pp      //檢查文法是否有錯誤

4)編輯主配置檔案

[root@master testm]# vim /etc/puppet/manifests/site.pp        //删除之前做實驗的,添加内容如下

$puppetserver = 'master.test.com'

node 'slaver.test.com'{

    include testm

注意:$puppetserver 定義服務端的主機名,node後面為用戶端的主機名,這裡面定義該用戶端要加載的子產品;testm 是類名。

2、用戶端操作

1)執行指令:

[root@slaver tmp]# puppet agent --test --server=master.test.com   

注意:如果用戶端上啟動了puppet服務,不用執行這指令,它也會自動同步,因為之前配置了自動認證。

2)檢視檔案同步成功

[root@slaver tmp]# cat /tmp/222.txt

<a href="http://s5.51cto.com/wyfs02/M02/7B/B8/wKioL1bOZxKgSvZ0AAAc3xR0Fsk525.png" target="_blank"></a>

由上可知,用戶端的 /tmp/222.txt 檔案與服務端的 /modules/testm/files/111.txt 檔案内容一樣,同步檔案成功。

3、同步目錄

上面的子產品其實隻是同步了一個檔案而已,那麼要想同步一個目錄如何做?我們可以通過實作同步一個目錄來做一個包釋出系統。 比如在一台機器上編譯安裝好了apache,那麼就可以通過這樣的子產品把這個apache目錄整個分發到其他機器上。

1)準備Apache文檔

[root@master testm]# cd files/

[root@master files]# mkdir apache2

[root@master files]# cd apache2

[root@master apache2]# mkdir {bin,lib,log}

[root@master apache2]# touch lib/config

[root@master apache2]# echo "12345abcde" &gt; lib/config

注意:因為我這台機器沒有安裝Apache,是以手動建立一些測試檔案;若安裝了Apache,可直接拷貝檔案到 files 目錄下就行。

2)編輯子產品配置檔案

[root@master testm]# vim manifests/init.pp                           //添加類

class apache{

    file {"/usr/local/apache2":

        source =&gt; "puppet://$puppetserver/modules/testm/apache2",

        recurse =&gt; true,

        purge =&gt; true

        }

注意:在管理檔案夾時,隻有當設定了 recurse 為 true 的情況下,purge 參數才會生效,表示遞歸的意思,沒有這個不能同步目錄;purge 參數可以保證當服務端删除某個檔案,用戶端可以跟着删除。這段邏輯的意思是要清空 /usr/local/apache2 目錄下所有非 puppet 管理的檔案,purge 參數通常的目的是清理管理目錄以及防止被他人添加惡意檔案。

3)編輯主配置檔案

[root@master testm]# vim /etc/puppet/manifests/site.pp               //聲明 apache 類

    include apache

4)在用戶端檢視同步檔案成功

<a href="http://s1.51cto.com/wyfs02/M00/7C/01/wKiom1bOkZyDYoo2AAA0uEpsYhI919.png" target="_blank"></a>

4、遠端執行指令

1)服務端編輯子產品配置檔案

[root@master ~]# vim /etc/puppet/modules/testm/manifests/init.pp    //在之前的apache類下添加資源

exec {"touchfile":

    unless =&gt; "test -f /tmp/444.txt",

    path =&gt; ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],

    command =&gt; "/bin/touch /tmp/444.txt"

<a href="http://s2.51cto.com/wyfs02/M00/7C/6F/wKiom1bQMJ_y7R-rAAAwu5HlSBU013.png" target="_blank"></a>

注意:unless後面的指令作為一個條件,當條件成立時,不會執行下面的指令,如果想要條件成立時,執行下面的指令,用 onlyif。要注意的是,我們一定要給執行的這條指令加個條件,使用unless就可以,必須滿足這個條件才能執行指令,否則這個指令會一直執行,不太妥當。

2)用戶端檢視執行效果

<a href="http://s5.51cto.com/wyfs02/M02/7C/6F/wKiom1bQMRDAPZkSAABljET_hqs510.png" target="_blank"></a>

從上圖可以看到指令執行成功,從日志檔案上也可以看到執行成功的日志資訊。

5、任務計劃

cron {"tpp1":

    command =&gt; "/sbin/ntpdate time.windows.com",

    user =&gt; "root",

    minute =&gt; "*/10",

    monthday =&gt; "10-15",

    # ensure =&gt; "absent"                                  //當增加了這行配置,則會把該cron删除掉

<a href="http://s1.51cto.com/wyfs02/M02/7C/6E/wKioL1bQNMyyn68LAAA_891Tl2I825.png" target="_blank"></a>

說明:分、時、日、月、周分别對應puppet裡面的minute、hour、monthday、month、weekday

2)檢視執行效果

<a href="http://s1.51cto.com/wyfs02/M02/7C/6F/wKiom1bQNJeQT3BTAACjxH8hV1Y989.png" target="_blank"></a>

6、其他

顯示本地已安裝的子產品:puppet module list

搜尋子產品:puppet module search Module_Name

安裝子產品:puppet module install Module_Name

擴充學習

      本文轉自 M四月天 51CTO部落格,原文連結http://blog.51cto.com/msiyuetian/1745416:,如需轉載請自行聯系原作者

繼續閱讀