本節書摘來自異步社群《puppet實戰手冊》一書中的第1章,第1.7節,作者:【英】john arundel著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
通過已有的配置,已經可以做很多事情,包括在團隊中管理puppet清單,通過github同步變更,使用papply腳本在機器上手動應用配置變更。
然而,截至目前還是需要手動登入到每台機器上更新git倉庫并重新運作puppet。如果每台機器可以自動更新并應用變更,就更友善了。這樣,隻需要将修改推送至倉庫,所有機器就會在一定時間範圍内自動完成配置的變更。
做到這一點最簡單的方法就是使用cron作業,定期從倉庫更新配置檔案并在有變更時運作puppet。
準備工作
首先,需要在前面的1.4節和1.5節中設定的git倉庫以及1.6節中的papply腳本。
然後,還需要建立一個ssh秘鑰,每台機器使用它進行認證,從git倉庫拉取變更。建立ssh秘鑰可參考如下步驟。
1. 運作以下指令,建立密鑰檔案。
2. 列印ubuntu.pub檔案的内容。
複制上面的内容并将其作為部署密鑰添加至github倉庫(參考github關于這部分内容的操作指南)。這樣,會授權這個密鑰可以從github中克隆puppet倉庫。
操作步驟
具體步驟如下。
1. 移動公鑰檔案到puppet子產品。
2. 不要将私鑰放進puppet倉庫(需要通過其他通道來分發私鑰到那些需要檢出倉庫的機器中)。
3. 參照下面的内容,建立modules/puppet/files/pull-updates.sh檔案。
4. 參照下面的内容,修改modules/puppet/manifests/init.pp檔案。
5. 運作puppet。
6. 測試新的ssh密鑰是否已經正确獲得github授權。
7. 檢查pull-updates腳本是否正常工作。
工作原理
到現在為止,已經實作了從被管理的伺服器上通過ssh認證通路github(使用ssh代理轉發),但是如果不登入到伺服器并執行相關指令,伺服器就不能自動拉取更新。是以,此處建立了一個新的ssh密鑰對,将公鑰作為部署密鑰添加到github,使擁有密鑰檔案的伺服器可以通路倉庫。
将這個私鑰作為ubuntu使用者預設的ssh密鑰。
這使得使用者ubuntu可以在puppet目錄運作git pull指令。此外,還增加了pull-updates腳本來執行這條指令,并在有任何配置更改時運作puppet。
将這個腳本部署到所有的puppet主機上:
最後,建立一個定期運作pull-updates的cron作業(每10分鐘一次,但是可以根據自己的需求去修改)。
更多參考
恭喜,你現在擁有了一個全自動化的puppet基礎設施!隻要在一台新機器上檢出倉庫代碼并應用了配置清單,這台機器就會自動的定期拉取新的變化并應用這些變更。
舉一個例子,如果需要在所有機器上添加一個新使用者,需要做的就是将使用者添加到配置清單的工作副本中,送出并推送到github。等待10分鐘,它就會自動應用到所有puppet機器上。
這是非常友善的,但是,有時人們希望能夠将變更立刻應用到特定的機器,而無須等待cron作業的執行。此時,可以使用rake工作實作這個功能。在下一節中,本書将介紹如何來實作這些。