上一篇博客寫了puppet操作file、cron、user、group、exec基礎資源的使用,連接地址為 http://www.www58058.com/13990
這次實驗puppet的操作Package、Server和puppet的特殊資源屬性Metaparameters。
回顧下Package、Server資源屬性:
package的常用屬性:
ensure:present安裝, installed安裝, absent不能安裝, latest,VERSION(2.3.1-2.el7)–目標狀態
name: 程序包名稱:
source:包文件的路徑,可以是本地文件系統路徑,也可以網絡文件路徑;
puppet:///modules/MODULE_NAME/FILENAME
provider:指明程序包提供者默認為yum;
service的常用屬性:
ensure:
true, running
false, stopped
enable: true|false 是否開機自動啟動
name:服務名稱
hasrestart:是否支持restart參數
hastatus:是否支持status參數
path: 服務腳本路徑
pattern:用于搜索此服務相關的進程的模式,當腳步不支持restart/status時,用于確定服務是否處于運行狀態;
一、puppet使用package安裝glances監控工具:
1、編輯site.pp:
本地測試site.pp
2、agent連接master:
agent運行glances監控命令:
二、puppet特殊資源屬性:Metaparameters
puppet提供了before、require、notify、subscribe四個元參數來定義資源間的相關性,這四個元參數都有另外的其他資源或資源組作為其值,這也稱 作資源引用,資源引用要通過“Type [title]”的方式進行,如User['test'],首字母必須大寫。
依賴關系:
before => Type['title'] 被依賴的資源中使用
require => Type['title']依賴其他資源的資源
鏈式依賴:->
通知關系
notify => 通知被依賴的資源中使用
subscribe => 訂閱監聽其他資源的資源
鏈式通知:~>
1、創建linux組,gid=3000。linux組的gid依賴用戶centos的gid。
同理,如果使用require。在user段中加入require => Group['linux']即可。
三、puppet使用server屬性安裝nginx服務:
四、puppet使用class、modules功能:
類:命名的puppet代碼塊,需要時可通過名稱進行調用,用于公共目的一組資源,是命名的代碼塊,創建后可用在puppet全局調用,類可以被繼承
備注:類的名字只能以小寫字母開頭,類在聲明后方可執行。
類的的聲明:
類聲明方式1:聲明一個類
include class1, class2, …
class {'classname': }
定義帶參數的類:
class class_name ($arg1=value1, $arg2=value2) {
…puppet code…
}
類聲明方式2,傳遞參數:
class {'class_name':
para1 => new_value1,
para2 => new_value2,
}
1、使用class創建webserver類:
本地測試:
puppet模板:基于ERB模板語音,在靜態文件中使用變量等編程元素生成適用于多種不用的環境的文本(配置文件):Embedded RUBY
用于實現在文本中嵌入ruby代碼,原來的文本信息不會改變,但ruby代碼會被執行,執行結果將直接替換原來代碼:
puppet模塊:為了實現某種完備功能而組織成的一個獨立的、自我包含的目錄結構
目錄結構:/etc/puppet/modules
module_name: manifests: –資源清單
init.pp: 至少應該包含一個與當前模塊名稱同名類;
MODULE_NAME::[SUBDIR_NAME]::MANIFESTS_FILE_NAME
files:靜態文件
puppet url puppet:///modules/MODULE_NAME/[SUBDIR_NAME]/FILE_NAM
templates: 模板文件目錄 模板文件:*.erb
template('MODULE_NAME/TEMPLATE_FILE_NAME');
lib: 插件目錄 tests: 模塊使用幫助文檔 spec: 類似于tests目錄,存儲lib目錄下定義的插件的使用幫組和示例文件:
1、手工創建nginx模塊并新建nginx、nginx_webserver、nginx_proxy類:
[root@master modules]# cp /etc/puppet/manifests/site.pp /etc/puppet/modules/nginx/manifests/init.pp
[root@master modules]# cp /opt/moudules/nginx/nginx_proxy.conf /etc/puppet/modules/nginx/files/nginx.conf
編輯/etc/puppet/manifests/site.pp調用模板中的類:(在生成環境中根據不同節點調用不同的模板和類)
在agent.puppet.com上應用模板中的類nginx_proxy:
注意:生成環境中先在本地測試跑在運行
puppet agent –server=master.puppet.com –no-daemonize –verbose –noop
2、puppet多環境配置:
在實際工作中服務器配置可能會有開發環境、測試環境、生成環境。puppet可以定義不同的環境配置讓其agent連接。
master: vim /etc/puppet/puppet.conf 在master端中添加支持
[master]
environmnet=production,testing,development — 聲明master支持環境
[production]
manifest = /etc/puppet/envionments/production/manifests/
modulepath = /etc/puppet/envionments/production/modules/
fileserverconfig = /etc/puppet/filesserver.conf
[testing]
manifest = /etc/puppet/envionments/testing/manifests/
modulepath = /etc/puppet/envionments/testing/modules/
fileserverconfig = /etc/puppet/filesserver.conf
[development]
manifest = /etc/puppet/envionments/development/manifests/
modulepath = /etc/puppet/envionments/developmentmodules/
fileserverconfig = /etc/puppet/filesserver.conf
agent:
[agent] –聲明agent處于哪個環境
enviroment = testing
五、puppet拓展思路:
隨著公司應用需求的增加,需要不斷的擴展,服務器數量也隨之增加,當服務器數量不斷增加,我們會發現一臺puppetmaster響應很慢,壓力大,解析緩慢,有什么優化的方案嗎?可以使用Puppetmaster配置多端口,結合Nginx web代理,這樣puppetmaster承受能力至少可以提升10倍以上。
要使用puppet多端口配置,需要指定mongrel類型,默認沒有安裝。如果配置多主集群的話,可以共享master1的證書,然后另外一臺master通過NFS掛載證書即可。
感謝馬哥,每天進步一點點!
原創文章,作者:n18-jude,如若轉載,請注明出處:http://www.www58058.com/14611