1. 程式人生 > >第二十二周微職位puppet

第二十二周微職位puppet

puppet自動化工具簡單使用

描述puppet的工作原理,部署一套puppet系統.

  1. puppet的工作原理:

    Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet即可以運行在單機上,也可以以C/S結構使用。在大規模使用puppet的情況下,通常使用C/S結構,在這種結構中puppet客戶端只運行puppeclient,puppet服務端只運行puppemaster

  2. 技術分享

1)      客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL連接發送給服務器端
2)      服務器端的puppetmaster通過fast工具分析檢測客戶端的主機名,然後找到項目的主配置文件manifest裏面對應的node配置,並對該部分內容進行解析,fast發送過來的信息可以作為變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分為語法檢查,如果語法沒錯,繼續解析,解析結果生成一個結果‘偽代碼’,然後把‘偽代碼’發給客戶端
3)      客戶端收到‘偽代碼’並且執行,客戶端把執行結果發給服務器
4)      服務器端把客戶端的執行結果寫入日誌

3.puppet工作過程中需要註意的事項:

1)      為了保證安全,Client和Master之間是基於SSL和證書的,只有經Master證書認證的Client可以與Master通信
2)      Puppet會讓系統保持在人們所期望的某種狀態並一直維持下去,如檢測某個文件並保證其一直存在,保證SSH服務始終開啟,如果文件被刪除了或者ssh服務關閉了,puppet下次執行時(默認30分鐘)會重新創建該文件或者啟動SSH服務

4.項目環境:

技術分享

主機

操作系統

IP地址

主要軟件

Puppetmaster

Centos6.5

192.168.31.83

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient1

Centos6.5

192.168.31.184

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient2

Centos6.5

192.168.31.79

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

NTP server

Centos6.5

192.168.31.224


5.項目實施:

1)搭建puppetmaster

規劃服務器主機名

在小的規模puppet環境下,一般修改/etc/hosts文件,然而在上千臺服務器的環境中,我們要搭建自己的DNS服務器來實現服務通過主機名來進行通信,此項目我們通過修改/etc/hosts文件來實現

技術分享

修改HOSTNAME=master.zjz.cn

技術分享

技術分享

添加一下幾行:

技術分享

還有一種方式來修改主機名,不用重啟系統的方式

2)時間同步服務器

由於facter使用SSL證書,依賴時間同步,所以需要搭建NTP服務器

一、搭建NTP Server

技術分享

技術分享

打開ntp的配置文件添加下面兩行

技術分享

技術分享

其作用是當/etc/ntp.conf中定義的server都不可用時,將使用local時間作為NTP服務提供給NTP客戶端

啟動NTP服務,並設置為開機自啟

技術分享

二、Puppetmaster 作為NTP客戶端配置

技術分享

技術分享

三、安裝ruby

一定按照一下先後順序安裝,先安裝compat-readline5,也可以一並安裝

首先新建一個掛載系統盤的目錄(因為我們安裝的包,在系統盤中有,使用rpm直接安裝)

技術分享

掛載系統盤

技術分享

切換到掛載目錄的Packages目錄中

技術分享

開始安裝

技術分享

安裝完成後,查看版本

技術分享

四、Puppet、facter安裝

技術分享

通過facter工具分析檢測客戶端傳輸過來的信息

安裝facter

a) 解壓源碼包

技術分享

新建一個存放安裝包的目錄,下載源碼包

技術分享

b) 編譯安裝源碼包

技術分享

安裝puppet:

(一) 解壓源碼包

先下載源碼包

技術分享

技術分享

(二) 編譯安裝

技術分享

(三) 復制配置文件

技術分享

(四) 修改文件屬性

技術分享

(五) 創建puppet主目錄

技術分享

註意:這兩個目錄的名稱是固定的

五、Puppet服務證書請求與簽名

生產環境中iptables默認是關閉的

Master端配置

技術分享

(一) 修改配置文件

在【main】標題下添加以下一行:配置服務器模塊的路徑

技術分享

(二) 啟動puppet主程序

技術分享

技術分享

6.搭建puppetclient:

首先配置puppetclient1,步驟如下:

1) 規劃服務器主機名

技術分享

技術分享

技術分享

技術分享

添加一下幾行

技術分享

確保可以通過域名ping同puppetmaster,即ping master.zjz.cn

技術分享

2) 服務器時間同步

技術分享

技術分享

3) 安裝ruby

一定按照一下順序安裝,先安裝compat-readline5,也可以一起安裝

技術分享

安裝同master安裝步驟

安裝完成後檢查版本

技術分享

4) Puppet、facter安裝

技術分享

通過facter工具分析檢測客戶端傳輸過來的信息

安裝facter:

一、解壓源碼包

技術分享

技術分享

二、編譯安裝源碼包

技術分享

安裝puppet:

一、解壓源碼包

技術分享

二、編譯安裝源碼包

技術分享

三、復制配置文件

技術分享

技術分享

四、修改文件屬性

技術分享

五、Puppet服務證書請求與簽名

生產環境中iptebles默認是全部關閉的

技術分享

Puppetclient1和puppetclient2一樣,如下操作

修改client配置文件

技術分享

在【main】標題下加上一行,設置服務器的域名

技術分享

Puppetclient2和puppetclient1配置過程類似,註意將主機名修改為client2

申請和註冊

Client端:

分別在puppetclient1和puppetclient2上進行註冊

技術分享

技術分享

此時可以按Ctrl+C結束,因為puppet一直在等待任務,但是已經從server查看到了申請信息

Master端

查看申請註冊的客戶端:

技術分享

將未註冊的客戶端進行註冊

技術分享

可以通過目錄查看已註冊的客戶端

技術分享

此時客戶端已經完成了證書的請求和簽名

7、配置實例

1. 配置一個測試節點

節點信息:/etc/puppet/manifests/nodes

模塊信息:/etc/puppet/modules

為了保護Linux的ssh端口爆破,批量修改客戶端sshd端口,將端口22修改為9922,並實現重啟工作

創建ssh模塊,模塊目錄為ssh,模塊下面有三個文件:mainfests、templates和files

Mainfests裏面必須要包含一個init.pp文件,這是該模塊的初始文件,導入一個模塊的時候,會從init.pp開始執行。可以把所以的代碼寫到init.pp文件裏面,也可以分成多個pp文件,init再去包含其他文件,定義class類名的時候必須是ssh,這樣能實現調用

Files目錄是該模塊的文件發布目錄,puppet提供一個文件的分發機制,類似rsync的模塊

Templates目錄包含erb模型文件,這個和file資源的template屬性有關(很少用)

Master端:

1) 創建需要的必要的目錄

技術分享

此時/etc/puppet/modules/ssh/目錄下結構:

技術分享

2) 創建模塊配置文件install.pp

技術分享

輸入一下信息:

技術分享

3) 創建模塊配置文件config.pp

技術分享

輸入一下信息:

技術分享

4) 創建模塊配置文件service.pp

技術分享

輸入一下信息:

技術分享

5) 創建模塊主配置文件init.pp

技術分享

輸入一下信息:

技術分享

此時/etc/puppet/modules/ssh/manifests目錄下有四個文件:

技術分享

6) 建立服務器端ssh統一維護文件

由於服務器端和客戶端的sshd_config文件默認一樣,此時將服務器端/etc/ssh/sshd_config復制到模塊默認路徑

技術分享

7) 創建測試節點配置文件,並將ssh加載進去

技術分享

輸入一下信息:

技術分享

8) 將測試節點載入puppet,即修改site.pp

技術分享

輸入一下信息:

技術分享

9) 修改服務端維護的sshd_config配置文件

技術分享

技術分享

10) 重新啟動puppet

#] /etc/init.d/puppetmaster restart

2. 客戶端主動拉取

一般在小規模自動化集群中,如代碼上線需要重啟服務時,為了防止網站暫時性的無法訪問的問題,每臺客戶端運行一次puppet agent –t命令,選擇模式根據客戶端集群規模的大小,根據經驗,一般運維工程師puppet服務器到各客戶端會建立ssh信任,然後自定義shell腳本,ssh批量讓客戶端執行puppet同步命令

Client端:

192.168.31.184(puppetclient1)端執行命令如下:

技術分享

此時在Client端已經執行成功,驗證如下:

技術分享

查看服務器ssh服務是否重啟,端口是否生效:

技術分享

3. 服務器推送同步

當大規模部署時采用服務器推送模式

Client端:

192.168.31.79(puppetclient2)端修改:

1) 修改配置文件:

技術分享

最後一行添加如下:

技術分享

修改auth.conf

技術分享

最後一行添加如下:

技術分享

2) 啟動puppet客戶端

技術分享

查看/etc/ssh/sshd_config的內容如下:

技術分享

確認啟動ssh服務:

技術分享

Master端:

3) 開始往客戶端推送

技術分享

4) 校驗結果:

此時Client端已經執行成功,驗證如下:

技術分享

技術分享

查看服務器ssh服務是否重啟,端口是否生效:

技術分享


本文出自 “11822904” 博客,請務必保留此出處http://11832904.blog.51cto.com/11822904/1972453

第二十二周微職位puppet