在master模式下,咱們給每一個agent應用的manifest可能不止一個,因此在master端須要根據agent的主機名來創建一個站點清單(也多是多個站點清單),將某個agent要應用的全部manifest都填入這個清單中,而後直接應用這個清單便可;node
agent:默認每隔三十分鐘向master發送node name和facts,並請求catalog;nginx
master:驗證客戶端身份,查找與其相關的site manifest,編譯生成catalog,併發送給客戶端;web
軟件安裝:直接使用yum安裝便可vim
在master端須要安裝puppet和puppet-server;也能夠安裝facter,用來管理本身;tomcat
puppetmaster監聽在TCP的8140端口;安全
在agent端須要安裝puppet和facter;服務器
puppetagent監聽在TCP的8139端口;併發
配置文件:app
/etc/puppet/puppet.confdom
此配置文件相似於ini格式:
main段:適用於master和agent,爲全局配置;
agent段:適用於agent,僅在agent上生效;
master段:適用於master,僅在master上生效;
且此文件支持相似變量的功能,能夠經過puppet config print查看支持的全部變量(也是默認配置),且可使用」puppet config set [setting_name] [setting_value]」修改這些變量的值;
能夠經過puppet master|agent --genconfig來生成符合此環境(須要基於默認的配置文件,因此咋生成這些信息以前不能夠移動原來的配置文件)的配置信息(默認是發送到顯示器上的,若是想要使用,則須要將其重定向到配置文件中,可是生成的信息中有的參數可能已經廢棄,與如今的puppet版本可能不兼容);
關於配置文件的更詳細的信息能夠經過puppet doc命令查看;
puppet doc --list :能夠查看文檔包含的reference;
puppet doc -r :能夠查看上面命令輸出的某種reference的詳細信息;
示例:puppet doc -r type
Note:由於puppet master與agent的通訊與hostname有關,因此必定要設置合適的主機名,建議master端使用FQDN(好比hello.guowei.com)格式的主機名,不然簽證的時候可能會有錯誤,它會在你的主機名後加上.localdomain
啓動服務:
master:第一次啓動puppet master端服務時,建議使用puppet master –v --no-daemonize來查看啓動是否正常(能夠經過此命令的輸出來瞭解服務啓動流程,包括CA創建、字簽證書、證書存放路徑等),以後再經過腳本或者systemctl來啓動服務;
agent:第一次啓動puppet agent端服務時,建議使用puppet agent--server=SERVER_NAME --test來測試一下是否能夠正常工做;而後再經過puppet agen --server SERVER_NAME向master端發送簽證請求;這些都測試完畢之後,最後要編輯/etc/puppet/puppet.conf在[agent]或[main]中指定一下server地址,接着啓動puppetagent服務(systemctl start puppetagent.service),之後agent就能夠自動回去配置信息了;
示例:
~]# cat /etc/puppet/puppet.conf
[agent]
listen = true
server = node1.guowei.com
簽署證書:
1.puppet master –v --no-daemonize ---> master端
2.中止上面運行的命令Ctrl+c
3.systemctl start puppetmaster.service ---> master端
啓動puppetmaster服務,監聽在8140端口
4. puppet agen --server SERVER_NAME ---> agent端
agent向master發起證書籤署請求
5. puppet cert --list ---> master端
master端查看要求證書籤署的agent
6.puppet cert sign AGENT_HOSTNAME ---> master端
簽署agent;
7.agent與master創建鏈接完畢;
撤銷證書,從新簽署:
1. puppet cert clean AGENT_HOSTNAME ---> master端
2. rm -rf /var/lib/puppet/ssl/* ---> agent端
若是出現錯誤,從新簽署一直沒有成功就直接rm -rf /var/lib/puppet/*(根據狀況而定,最壞的是master和agent都要執行這個命令),而後重啓master,從新簽署;
3. puppet agent --server= SERVER_NAME --no-daemonize -v ---> agent端
4. puppet cert sign AGENT_HOSTNAME ---> master端
安裝全部要用到的模塊:
puppet module install
本身製做
定義site manifest:
站點清單通常位於/etc/puppet/manifests/路徑下,且要命名爲site.pp;
site.pp定義節點的方式:
1.以主機名直接給出其相關定義:
node 'NODE_ANME' {
… puppet code …
}
2.把功能相近的主機事先按統一格式命名,按統一格式調用:
node /^web[0-9]+\.guowei\.com/ {
… puppet code …
}
示例:基於上一篇文章中的示例(最後一個示例)
~]#cat /etc/puppet/manifests/site.pp
node 'node2.guwoei.com' {
include nginx::proxy
}
~]#puppet agent --server=node1.guowei.com --no-daemonize -v
節點的繼承:
node 'basenode' {
include ntp
}
node 'web.guowei.com' inherits basenode {
include ngnx::proxy
}
對節點進行分段管理:
在/etc/puppet/manifests/目錄中根據狀況建立多個子目錄,而後在這些子目錄中建立符合狀況的.pp文件,最後在site.pp文件中引入這個.pp文件便可;
示例:
~]# tree /etc/puppet/manifests/
/etc/puppet/manifests/
├── appservers
│ └── tomcat.pp
├── cacheservers
│ └── varnish.pp
├── site.pp
└── webservers
└── nginx.pp
~]#cat /etc/puppet/manifests/site.pp
import "webservers/*.pp"
建議的主機命名方式:
角色-運營商-機房名-IP.DOMAIN.TLD
puppet的配置文件中的環境配置段:
環境配置端能夠實現將不一樣的場景(好比生產環境、測試環境、開發環境)中的主機分別對待,爲其制定特有的manifest路徑,從而實現爲其發送不一樣的配置信息,以適應其所處的環境;
示例:
master端的環境配置段:
vim /etc/puppet/puppet.conf
……..
[master]
environment = production,testing
聲明master支持的環境配置段;
[production]
manifest = /etc/puppet/enviroments/production/manifests/site.pp
modulepath = /etc/puppet/enviroments/production/modules/
fileserverconfig = /etc/puppet/fileserver.conf
指定master端提供的文件服務器的配置文件;
[testing]
manifest = /etc/puppet/enviroments/testing/manifests/site.pp
modulepath = /etc/puppet/enviroments/testing/modules/
fileserverconfig = /etc/puppet/fileserver.conf
…….
agent端的對應配置:
[agent]
environment = production
根據本身所屬的環境來指定,agent會自動發送此信息,以說明本身的身份,從而讓master發送正確的配置信息給本身;
Puppet自帶的文件服務器:
經過fileserver.conf文件且須要結合puppet.conf和auth.conf文件來定義文件服務器;auth.conf是用來實現對agent可否訪問master的某個路徑作安全管理的(即爲puppet提供ACL功能);
fileserver.conf格式:
[mount_point]
path /PATH/TO/SOMEWHERE
allow HOSTNAME
allow_ip IP_ADDR
deny all
auth.conf格式:
path /path_to_somewhere
auth yes
method find,save
allow
allow HOSTNAME
allow_ip IP_ADDR
自動簽署證書:autosign.conf:
讓master在接收到agent的證書籤署請求後,直接自動爲其簽署證書;
格式:
直接指明主機名便可,支持通配符;
*.guowei.com
Puppet的自動推送:kick
能夠實現將新添加的配置當即同步到agent端,使其立刻生效;同步方法爲:master通知agent到本身這裏來請求新配置;
經過namespace.conf文件,指定哪些主機能夠出發kick功能;
格式:
[puppetrunner]
allow HOSTNAME
使用Puppet面臨的問題:
1.主機名:合理命名主機,且若是主機過多,通常建議使用DNS來提供IP地址解析;
DDNS:在主機得到地址之後,自動的將IP地址和主機名提交到DNS服務器,完成添加映射關係;
2.如何爲系統準備好puppet agent;
能夠在安裝系統的時候直接將puppet集成到系統中,而後在經過kickstart文件,安裝啓動puppet;
注:根據馬哥視頻作的學習筆記,若有錯誤,歡迎指正;侵刪