puppet是一個開源的軟件自動化配置和部署工具,不少大型IT公司均在使用puppet對集羣中的軟件進行管理和部署。html
Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet便可以運行在單機上,也能夠以C/S結構使用。在大規模使用puppet的狀況下,一般使用C/S結構,在這種結構中puppet客戶端只運行puppeclient,puppet服務端只運行puppemaster。node
1) 客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL鏈接發送給服務器端linux
2) 服務器端的puppetmaster經過fast工具分析檢測客戶端的主機名,而後找到項目的主配置文件manifest裏面對應的node配置,並對該部份內容進行解析,fast發送過來的信息能夠做爲變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分爲語法檢查,若是語法沒錯,繼續解析,解析結果生成一個結果‘僞代碼’,而後把‘僞代碼’發給客戶端vim
3) 客戶端收到‘僞代碼’而且執行,客戶端把執行結果發給服務器安全
4) 服務器端把客戶端的執行結果寫入日誌服務器
1) 爲了保證安全,Client和Master之間是基於SSL和證書的,只有經Master證書認證的Client能夠與Master通訊dom
2) Puppet會讓系統保持在人們所指望的某種狀態並一直維持下去,如檢測某個文件並保證其一直存在,保證SSH服務始終開啓,若是文件被刪除了或者ssh服務關閉了,puppet下次執行時(默認30分鐘)會從新建立該文件或者啓動SSH服務ssh
OS:Centos 6.5 x86_64工具
Puppet master:master.xiaohao.com(*.*.*.*)性能
Puppet agent:agent.xiaohao.com(*.*.*.*)
Puppet 要求全部機器有完整的域名,若是沒有 DNS 服務器提供域名的話,能夠在機器上設置主機名(注意:要先安裝 Puppet以前設置主機名,由於安裝 Puppet 時會把主機名寫入證書,客戶端和服務端通訊須要這個證書),爲了簡化安裝過程我配置了/etc/hosts。
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
*.*.*.* master.xiaohao.com
*.*.*.* agent.xiaohao.com
修改設備主機名:
[root@master yum.repos.d]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master.xiaohao.com
關閉selinux內核防火牆:
#sed '/^SELINUX/s/=.*/=disabled/g' /etc/sysconfig/selinux -i
關閉iptables防火牆:
#iptables –F
#service iptables stop
#chkconfig iptables off
系統默認yum不使用,配置阿里的鏡像yum源(百度搜索下「阿里鏡像」)
本地系統是CentOS6.5,因此使用CentOS6的鏡像yum源。
puppet server和兩臺應用服務器共三臺機器依次執行下面的指令:
http://mirrors.aliyun.com/repo/Centos-6.repowget -O /etc/yum.repos.d/CentOS-Base.repo
修改yum源文件的release版本:
#cd /etc/yum.repos.d/
#vim CentOS-Base.repo
注意:修改$releasever(版本)爲6,共修改了20處,可使用yum安裝軟件包了。
Puppet軟件包安裝:
Puppet server和agent客戶端安裝epel-release源
#rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm
Puppet server端安裝puppet-server:
#yum –y install puppet-server puppet
Puppet agent客戶端安裝puppet:
#yum -y install puppet
查看三臺機器安裝的puppet版本:
#puppet –V
3.8.7
疑問?--若是puppet server 是3.8,那麼puppet agent是 2.6能正常運行嗎?
註釋:
第一點:最多見的Puppet部署模型是客戶端-服務端模型。許多人詢問是否能使用不一樣的Puppet版本做爲master和agent。答案是能夠,但前提是要遵守一些注意事項。第一點要注意的是master的版本必定要高於agent。例如,你能夠將一個0.24.8版本的agent鏈接到一個2.6.0版本的master,可是反過來不行。
第二點:要注意的是,agent的版本越老,在與新版本的master搭配時正確運行的可能性就越小。一個0.20.0版本的agent搭配一個2.6.0的master基本不可能正確工做。一般,0.24.x版的agent都能正常鏈接到2.6.x和0.25.x版本的master而且工做正常。更新版本的master就可能沒法徹底兼容早期的agent,一些功能和特性可能會出現異常。
最後,將2.6.x或更新版本的master與0.24.x及早期版本的agent混合使用意味着你沒法得到2.6.x版本提供的所有性能提高。0.24.x版的agent依然會使用較慢的XML-RPC傳輸層來進行通信,從而沒法利用新的REST接口。
設置ntp時間同步:
由於公司已經有ntp服務器,直接使用了,未從新搭建ntp
# service ntpd start
修改服務端puppet.conf主配置文件
[root@puppet-master ~]# vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet ###默認存放日誌路徑
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet ###pid存放路徑
# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl ###證書存放目錄,$vardir爲/var/lib/puppet
[agent]
# The file in which puppetd stores a list of the classes
# associated with the retrieved configuratiion. Can be loaded in
# the separate ``puppet`` executable using the ``--loadclasses``
# option.
# The default value is '$confdir/classes.txt'.
classfile = $vardir/classes.txt
# Where puppetd caches the local configuration. An
# extension indicating the cache format is added automatically.
# The default value is '$confdir/localconfig'.
localconfig = $vardir/localconfig
certname = master.xiaohao.com
server = master.xiaohao.com ###設置agent認證鏈接master端的服務器名稱,此名稱必須得可以解析
[master]
certname = master.xiaohao.com ###設置puppetmaster認證服務器名稱
啓動puppetmaster服務
# /etc/init.d/puppetmaster start
Starting puppetmaster: [OK]
# chkconfig puppetmaster on ###設置開機啓動
# chkconfig --list|grep puppetmaster
puppetmaster 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
修改客戶端配置文件
[root@agent ~]# cat /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet
# Where SSL certificates are kept.
# The default value is '$confdir/ssl'.
ssldir = $vardir/ssl
[agent]
# The file in which puppetd stores a list of the classes
# associated with the retrieved configuratiion. Can be loaded in
# the separate ``puppet`` executable using the ``--loadclasses``
# option.
# The default value is '$confdir/classes.txt'.
classfile = $vardir/classes.txt
# Where puppetd caches the local configuration. An
# extension indicating the cache format is added automatically.
# The default value is '$confdir/localconfig'.
localconfig = $vardir/localconfig
server = master.xiaohao.com
listen = true
啓動puppet服務:
#service puppet start
#chkconfig puppet on
Puppet證書申請
Puppet客戶端與服務器端是經過SSL隧道通訊的,客戶端安裝完成後,須要向服務器端申請證書:
首次鏈接服務器端會發起證書申請,在客戶端執行命令以下:
puppet agent --server master.xiaohao.com -test
在服務器端能夠用puppet cert -list命令查看到申請證書的客戶端主機名。
puppet cert -s命令能夠爲特定的主機頒發證書,puppet cert –s and –a 表示給全部的主機頒發證書
例如puppet cert –s agent.xiaohoa.com 爲客戶端頒發證書。
# puppet cert --list -all ###帶「+」代表註冊成功
+ "agent" (SHA256) A7:19:D1:25:6E:64:AA:84:53:AF:F0:8B:63:C9:2D:B1:47:49:11:6E:C9:3A:5A:EF:00:72:F4:7B:6E:E7:24:65
在服務端寫個例子測試一下。這個例子做用很簡單,用來在客戶端的/tmp目錄下新建一個 test.txt 文件,內容爲:hello,test!在服務端編寫代碼:【服務器端不須要新建這個文件】
#vi /etc/puppet/manifests/site.pp
node default {
file {
"/tmp/test.txt": content => "helo,test!";
}
}
puppet客戶端測試
在客戶端執行 puppet,運行成功後會在 /tmp 看到新生成的 test.txt:
#puppet agent -t
執行命令後顯示以下:
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent.xiaohao.com
Info: Applying configuration version '1534319026'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/test.txt]/ensure: defined content as '{md5}bf2fcd5a98ca557c37106f400c2954be'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.01 seconds
最後查看執行結果:
#cat /tmp/test.txt
Hello,test!
此致puppet服務器端和客戶端安裝完畢,接下來就是深刻的配置了。
附puppet自動簽發證書步驟:
https://www.cnblogs.com/kaishirenshi/p/7767811.html