一、puppet簡介
1.Puppet是一款自動化運維工具,屬於C/S架構,客戶端運行puppet client,服務端運行puppet master
2.puppet的工作流程
1)客戶端調用facter(收集及檢測分析客戶端配置信息的工具),把這些信息發送到服務端
2)服務端通過facter分析檢測客戶端的主機名,然後找到項目主配置文件mamnifest裏面對應的node配置,並對該部分進行解析,facter發送來的信息作爲變量處理,node牽涉到的代碼才進行解析,其他沒牽涉到代碼的不解析
3)解析分爲幾個階段,首先檢測語法,如果語法沒錯就繼續解析,解析結果生成一箇中間的僞代碼,然後把僞代碼發送給客戶端
4)客戶端收到僞代碼並且執行,然後把執行結果反饋給服務端
5)服務端把客戶端的執行結果寫入日誌
3.puppet工作過程中要注意以下兩點
1)爲了保證安全,client和master之間基於證書和ssl,只有經master證書認證的client才能與master通信
2)puppet會讓系統保持某種狀態並一直維持,如檢測某個文件並一直保持它存在,保證ssh服務一直開啓,若果文件被刪除或ssh服務被關閉,puppet下次執行時(默認30分鐘)會重新創建改文件或開啓ssh服務
三、配置部署puppet
節點詳情
1.配置master端
1)因爲要使用證書認證,所以要規劃master和client主機名,修改hosts文件,並且時間必須同步,否則證書認證會報錯
vim /etc/hosts
192.168.1.2 www.server.com
192.168.1.3 www.http1.com
192.168.1.4 www.http2.com
2)將修改的hosts文件複製到其他主機
scp /etc/hosts [email protected]:/etc/hosts
3)配置yum源
wget http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
rpm -Uvh puppetlabs-release-el-6.noarch.rpm
#這是centos6的yum源
4)安裝puppet服務端
yum -y install puppet-server
5)啓動puppet-server並設置開機啓動
server puppet-server start
chkconfig puppet-server on
2.配置client端
1)配置yum源
wget http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
rpm -Uvh puppetlabs-release-el-6.noarch.rpm
2)安裝puppet客戶端
yum -y install puppet
3)修改client配置文件
vim /etc/puppet/puppet.conf
[main]
server = www.server.com #添加puppet master的地址
4)啓動puppet並設置開機啓動
server puppet start
chkconfig puppet on
3.申請與註冊證書
1)client端:
puppet agent --server=www.server.com --no-daemonize --verbose
2)master端
查看申請註冊的客戶端
puppet cert --list
對未註冊的客戶端進行註冊
puppet cert sign --all
在目錄中查看已註冊的客戶端
4)在客戶端執行命令來檢查
puppet agent -t
三、配置實例
以ssh爲例,將sshd的端口改爲9922端口
1.客戶端主動下拉
1)創建必要的目錄
cd /etc/puppet
mkdir -p modules/ssh/{manifests,templates,files}
mkdir manifests/nodes
mkdir modules/ssh/files/ssh
chown -R puppet modules/ #修改權限
選項解釋:
manifests:裏面必須包含一個init.pp文件,這是該模塊的入口文件,導入一個模塊的時候,會從init.pp開始執行,可以把所有代碼都寫入init.pp文件
files:該模塊的文件發佈目錄,puppet提供一個文件分發機制,類似rsync的模塊
templates:包含erb模型文件,這個和file資源的template屬性有關(很少用)
2)創建模塊配置文件install.pp
vi /etc/puppet/modules/ssh/manifests/install.pp
class ssh::install{
package{ "openssh":
ensure => present,
}
}
#該文件用來判斷openssh是否安裝
3)創建模塊配置文件config.pp
vi /etc/puppet/modules/ssh/manifests/config.pp
class ssh::config{
file { "/etc/ssh/sshd_config": #配置文件模板
ensure => present, #確認客戶端中此文件存在
owner =>"root" #文件所屬用戶
group =>"root" #文件所屬組
mode =>"0600" #文件屬性
source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
#從服務端同步文件
require => Class["ssh::install"], #調用install.pp確定ssh已安裝
notify => Class["ssh::service"], #如果config.pp發生變化,則通知server.pp
}
}
4)創建模塊配置文件service.pp
vi /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
service {"sshd":
ensure=>running, #確認ssh運行
hasstatus=>true, #該服務支持status命令
harestart=>true, #該服務支持start命令
enable=>true, #服務器是否開機啓動
require=>Class["ssh::config"] #確認config.pp調用
}
}
5)創建模塊主配置文件init.pp
vi /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
include ssh::install,ssh::config,ssh::service
}
6)建立服務端ssh統一維護文件
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/
7)創建測試節點配置文件
vim /etc/puppet/manifests/nodes/ssh.pp
node 'www.http1.com'{
include ssh
}
node 'www.http2.com'{
include ssh
}
8)將測試節點載入puppet,即修改site.pp
vim /etc/puppet/manifests/site.pp
import "nodes/ssh.pp"
9)修改維護端的sshd_config配置文件
vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922
10)重啓puppet
11)客戶端主動拉取
puppet agent -t
12)檢查客戶端是否執行成功
2.服務器推送同步
大規模部署時,採用服務端推送
client端
1)修改配置文件
vim /etc/puppet/puppet.conf
listen = true #最後一行添加
2)驗證配置文件auth.conf定義了一些驗證信息及訪問權限
vim /etc/puppet/auth.conf
allow * #最後一行添加,允許任何服務端推送
3)啓動puppet客戶端
service puppet start
4)因爲剛纔在master端將ssh的端口改成了9922,現在將ssh的端口改回22,便於測試服務端的推送
vim /etc/ssh/sshd_config
port 22
master端
5)開始推送至服務端
puppet kick www.http2.com