Puppet的服務器端內部有一張主機資源清單,每一臺主機有對應的代碼資源。當一臺主機通過http發起請求到master時,master按照清單找到對應的代碼編譯生成catalog後發送給agent,其中master需要監聽在一個套接字上8140端口,agent會運行一個守護進程週期性(30分鐘)的向master發起請求。
master與agent之間的通信是使用加密的http,這就意味着master還得是一個CA,給自己和所有得agent簽發證書。
配置示例:
首先puppet推薦使用主機名來識別master與agent,以後得實際生產中推薦使用DNS這裏我們使用hosts文件來配置。
192.168.31.200 node1.lvqing.com
192.168.31.201 node2.lvqing.com
192.168.31.203 node3.lvqing.com
node1作master,node2與node3作agent,做之前要同步時間
然後master需要作
安裝程序包
facter, puppet, puppet-server
初始化master:
puppet master --no-daemonize --verbose
站點清單的定義
vim /etc/puppet/manifests/site.pp
node 'node2.lvqing.com'{
include chrony
}
模式匹配
node /PATTERN/ {
...puppet code...
}
node /node[0-9]+\.magedu\.com/
還可以定義節點的繼承
節點定義的繼承:
node NODE inherits PAR_NODE_DEF {
...puppet code...
}
agent向master發起請求
puppet agent --server node1.lvqing.com --no-daemonize -v --noop
Info: Caching catalog for node2.lvqing.com
Info: Applying configuration version '1546050755'
Notice: Finished catalog run in 11.54 seconds
前面只是我們讓master運行在前臺以便直觀的觀察到程序的運行狀態,實際上master只需要直接執行systemctl start puppetmaster.service
即可,agent稍微修改下配置文件也直接啓動就行了。難點在於模塊的製作與各資源之間的定義使用。
接下來我們可以直接在agent的配置文件中添加一條指向master的配置即可讓agent以守護進程的方式運行了。
vim /etc/puppet/puppet.conf
添加
server = node1.lvqing.com
啓動
systemctl start puppetagent.service
接下來模擬puppet創建nginx+tomcat實例
模塊創建目錄
mkdir ./{jdk8,tomcat}/{manifests,files,templates,lib,spec,tests} -pv
vim jdk8/manifests/init.pp
class jdk8{
package{'jdk8}:
name => 'java-1.8.0-openjdk-devel'
ensure => latest,
}
file{'java.sh':
path => '/etc/profile.d/java.sh',
source => 'puppet:///modules/jdk8/java.sh',
}
}
vim files/java.sh
export JAVA_HOME=/usr
tomcat的模板
vim modules/tomcat/manifests/init.pp
class tomcat{
package{"['tomcat','tomcat-admin-webapps']":
ensure => latest
} ->
file{'server.xml':
path => '/etc/tomcat/server.xml',
source => 'puppet:///modules/tomcat/server.xml',
} ~>
service{'tomcat':
ensure => running,
enable => true
}
}
cp /etc/tomcat/server.xml ./files
cp modules/* /etc/puppet/modules/ -a
模塊都已經準備好了,接下來我們定義主機清單,給第二個節點安裝tomcat
vim /etc/puppet/manifests/site.pp
添加
node 'node3.lvqing.com'{
include jdk8
include tomcat
}
node3修改配置文件或直接運行命令前臺拉取數據puppet agent --server node1.lvqing.com --no-daemonize -v --debug
可以看到結果:
/Stage[main]/Tomcat/Package[tomcat]/ensure: created
/Stage[main]/Tomcat/Service[tomcat]/ensure: ensure changed 'stopped' to 'running'
Finished catalog run in 12.79 seconds
/Stage[main]/Tomcat/Service[tomcat]/ensure: ensure changed 'stopped' to 'running'
如果puppet管理的主機非常多,我們也可以對清單的配置信息進行模塊化組織,不同的角色放置在不同的目錄中,再在主manifests的site.pp中導入配置
databases.d/
tomcatservers.d/
nodes.d/
可通過多個pp文件分別定義各類站點的清單;而後統一導入site.pp,方法如下:
import 'DIRECTORY_NAME/*.pp
一般的公司都擁有三種環境,開發環境,生成環境和測試環境,puppet只能針對單一的一種環境設置,默認是指Production環境
puppet3.6之後的版本配置多環境的方法
master端:
(1) 配置文件puppet.conf
[master]
environmentpath = $confdir/environments
(2) 在多環境配置目錄下爲每個環境準備一個子目錄
ENVIRONMENT_NAME/
manifests/
site.pp
modules/
agent端:
[agent]
environment = { production|development | testing }
多環境配置實例:
同一個包三種不同環境下不同的配置
每個環境下必須要有modules和manifests,這樣默認目錄下的modules就沒有用了
mkdir environments/{production,development,testing}/{manifests,modules}
cp modules/chrony/ environments/testing/modules/ -a
cp modules/chrony/ environments/development/modules/ -a
cp modules/chrony/ environments/production/modules/ -a
vim /etc/puppet/puppet.conf #添加
[main]
environmentpath = $confdir/environments
#這裏的$confdir是指/etc/puppet
對服務的配置進行區分修改
(development)node2修改chrony配置文件添加
server node2.lvqing.com iburst
(testing)node3修改chrony配置文件添加
server node3.lvqing.com iburst
接下來創建各環境下的site.pp
vim /etc/puppet/environments/development/manifests/site.pp
node 'node2.lvqing.com' {
include chrony
}
vim /etc/puppet/environments/testing/manifests/site.pp
node 'node2.lvqing.com' {
include chrony
}
這裏包括的類都一樣但因爲node2所處的環境不同,chrony指向的服務器也不同
現在我們有兩種環境,development和testing相同的服務不同的配置,agent根據自己的需求到對應的環境中拉取數據
agent端配置
vim /etc/puppet/puppet.conf
environment = development
注意不加s是讓自己處於某種環境中而不是對變量進行賦值。
額外配置文件:
文件系統:fileserver.conf
認證(URL):auth.conf
對agent請求的資源作認證
當master上定義agent的配置更改了,如何通知給agent呢,agent默認30分鐘訪問master一次。
agent配置文件中需要添加listen = true
因爲是master主動聯繫agent所以還要在agent的auth.conf文件中添加
path /run
method save
auth any
allow node1.lvqing.com
配置好後需要master使用命令主動通知agent過來拉取配置
puppet kick node2.lvqing.com
結果
Triggering node2.lvqing.com
Getting status
status is success
node2.lvqing.com finished with exit code 0
Finished
利用puppet來進行發佈和回滾
發佈
- 1、創建一個新的資源目錄,定義file資源將其推送過去
- 2、用file創建一個符號鏈接指向新的版本
回滾 - 1、定義一個資源回滾,將舊的版本推送過去。
- 2、用file創建一個符號鏈接指向舊的版本
或者可以寫在模塊裏,平時不使用,一但出現問題手動include模塊,符號鏈接指向老的版本
改完以後就使用kick將文件推到agent上。