Puppet筆記

1.1自動化運維介紹

一 認識運維自動化運維

  1)傳統運維效率低,大多工作人爲完成

  2)傳統運維工作繁瑣,容易出錯

  3)傳統運維每日重複做相同的事情

  4)傳統運維沒有標準化流程

  5)傳統運維的腳本繁多,不能方便管理

  6)自動化運維就是要解決上面所有的問題

二 常見自動化運維工具

  1)Puppet (www.puppetlabs.com)

    基於rubby開發,c/s架構,支持多平臺,可管理配置文件、用戶、cron任務、軟件包、系統服務等。分爲社區版(免費)和企業版(收費),企業版支持圖形化配置。

  2)Saltstack (中國用戶組www.saltstack.cn)

    基於Python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時非常快捷,配置和使用比puppet容易,能實現puppet幾乎所有的功能。

  3)Ansible (www.ansible.com)

    更加簡潔的自動化運維工具,不需要在客戶端上安裝agent,基於Python開發。可以實現批量操作系統配置、批量程序的部署、批量執行命令。

1.2 Puppet安裝準備工作

一 Puppet安裝和配置-準備工作

  1) 兩臺機器:172.7.15.106(服務端) 172.7.15.111(客戶端)

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

  3)  106上 hostname web9.aming.com,vi /etc/sysconfig/network 定義hostname

  4)  111上hostname web10.aming.com,vi /etc/sysconfig/network 定義hostname

  5) 編輯hosts文件,106和111全部添加:

    172.7.15.106 web9.aming.com

    172.7.15.111 web10.aming.com

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

    yum install -y ntpdate

    cront -e   //加入

    */10 * * * * ntpdate time.windows.com > /dev/null 2>&1

1.3 Puppet安裝和配置-安裝服務端

   1)服務端106上:

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

     安裝服務端程序 yum install -y puppet-server

     啓動服務   service puppetmaster start

     開機啓動   chkconfig puppetmaster on

   2) 客戶端111上:

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

     安裝客戶端程序 yum install -y puppet

     修改配置文件 vi /etc/puppet/puppet.conf //在[agent]下面添加  

     listen = true

     server = web9.aming.com

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

     啓動服務  service puppet start

     開機啓動  chkconfig puppet on

1.4 Puppet配置證書

   一 Puppet安裝和配置-配置認證

   1)服務端查看客戶端證書列表

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

   2)客戶端上生成ssl證書

     puppet agent --test --server web9.aming.com   如果出現 no certificate .....刪除掉/var/lib/puppet/ssl/下的所有文件

   3) 服務端簽發指定客戶端證書

     puppet cert --sign web10.aming.com

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

     puppet cert clean web10.aming.com

   5) 刪除所有證書

     puppet cert clean --all

1.5 Puppet配置自動簽發證書

  一 Puppet安裝和配置-配置自動簽發證書

  1)服務端刪除客戶端證書 puppet cert clean --all

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

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

    *.aming.com   vim /etc/puppet/puppet.conf //在main下加入一行 autosign = true

  4) 服務端重啓puppetmaster服務 /etc/init.d/puppetmaster restart

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

  6) 服務端  puppet cert list --all //可以看到web10.aming.com已經簽名 

  7)如果客戶端不重啓puppet服務,也可以通過命令來自動簽發 puppet agent --test --server web9.aming.com

1.6 Puppet測試證書

  Puppet安裝和配置-測試證書

  1)服務端編輯配置文件

    vim /etc/puppet/manifests/site.pp //添加如下內容

    node default{

    file {"/tmp/123.txt":

        content =>"test,test";

    }}

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

  2)客戶端上稍等一會兒(每隔30秒會自動執行服務端上的任務),或者直接命令行 

    puppet agent --test --server web9.aming.com

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

1.7 Puppet配置模塊(一)

  Puppet安裝和配置-定義模塊管理

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

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

  3)創建配置文件 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.txt,owner,group,mode定義文件的屬主,屬組以及權限,source定義了這個文件從哪裏獲取。$puppetserver一會也要定義一下,這裏指的是puppet server服務器上/etc/puppet/modules/testm/files/1.txt

1.8 Puppet配置模塊(二)

  Puppet安裝和配置-定義模塊管理

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

    vim /etc/puppet/manifests/site.pp //內容如下

    $puppetserver='web9.aming.com'

    node 'web10'{

     include testm

     }

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

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

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

1.9 Puppet文件和目錄資源

   Puppet安裝和配置-文件或目錄資源

   上面的模塊其實只同步了一個文件而已,那麼要想同步一個目錄如何做?我們可以通過實現同步一個目錄來做一個包發不繫統。比如在一臺機器上編譯安裝好了Apache,那麼就可以通過這樣的模塊把這個Apache目錄整個分發到其他機器上。

   模塊配置文件如下:

   class apache {

       file{"usr/local/apache2":

          owner=>"root",

          group=>"root",

          source=>"puppet://$puppetserver/modules/apache/apache2",

          recurse=>true,

          purge=>true

          }

          }

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

  參考:http://blog.chinaunix.net/uid-20639775-id-3314583.html

2.0 Puppet遠程執行命令

  Puppet安裝和配置-遠程執行命令

  exec {"123":

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

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

      command=>"touch /tmp/aminglinux.txt"

     }

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

  參考:http://puppet.wikidot.com/exec

2.1 Puppet配置cron

  Puppet安裝和配置-任務計劃

  cron {"aming1":

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

      user=>"root",

      minute=>"*/10",

      #ensure=>"absent"

     }

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

  參考:http://puppet.wikidot.com/cron

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