[自動化]Puppet服務安裝和部署
puppet是一種基於ruby語言開發的Lnux、Unix、windows平臺的集中配置管理系統。它使用自有的puppet描述語言,可管理配置文件file、用戶user、cron任務、軟件包、系統服務等系統實體。
puppet依賴於C/S(客戶端/服務器)的部署架構。它需要在puppet服務器上安裝puppet-server軟件包(以下簡稱master),在需要管理的目標主機上安裝puppet客戶端軟件(以下簡稱client)。
為了保證安全,master和client之間是基於SSL和證書的,只有經過master證書認證的client才可以與master通信。
puppet工作原理
- 1、客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL連接發送給服務器端;
- 2、服務器端的puppetmaster通過fast工具分析檢測客戶端的主機名,然後找到項目的主配置文件manifest裏面對應的node配置,並對該部分內容進行解析,fast發送過來的信息可以作為變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分為語法檢查,如果語法沒錯,繼續解析,解析結果生成一個結果‘偽代碼’,然後把‘偽代碼’發給客戶端;
- 3、客戶端收到‘偽代碼’並且執行,客戶端把執行結果發給服務器;
- 4、服務器端把客戶端的執行結果寫入日誌。
實驗:
使用四臺服務器模擬搭建Puppet環境,具體拓撲圖如下:
1.安裝NTP Server
由於Puppet需要使用SSL證書,依賴時間同步,所有需要搭建NTP服務器。
(1)關閉所有服務器的防火墻和安全性策略
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(2)yum安裝NTP並修改配置文件
yum install ntp -y #安裝ntp vi /etc/ntp.conf #24行添加兩行記錄 server 127.127.26.0 fudge 127.127.26.0 stratum 8
(3)啟動ntp服務
service ntpd start #啟動ntp服務
chkconfig ntpd on
(4)查看同步狀態`
ntpstat #查看同步狀態
2.安裝Puppet Master
(1)規劃主機名
vi /etc/hostname
master.test.cn #修改相應的主機名
vi /etc/hosts #添加
192.168.26.131 master.test.cn
192.168.26.132 client1.test.cn
192.168.26.133 client2.test.cn
然後重啟,將安全性策略再關一下
setenforce 0
(2)搭建NTP客戶端服務
yum install ntp -y
service ntpd start #啟動ntp服務
ntpdate 192.168.26.130 (NTPserver地址)
(3)安裝puppet控制端
yum install -y epel-replease #安裝epel源
yum install -y puppet-server #yum安裝puppet服務端
(4)啟動Puppet主程序
systemctl enable puppetmaster.service
systemctl start puppetmaster.service
3.安裝Puppet client(client1 client2配置一樣)
(1)規劃主機名
vi /etc/hostname
client1.test.cn #修改相應的主機名
vi /etc/hosts #添加
192.168.26.131 master.test.cn
192.168.26.132 client1.test.cn
192.168.26.133 client2.test.cn
然後重啟,將安全性策略再關一下
setenforce 0
(2)搭建NTP客戶端服務
yum install ntp -y
service ntpd start #啟動ntp服務
ntpdate 192.168.26.130 (NTPserver地址)
(3)安裝puppet控制端
yum install -y epel-replease #安裝epel源
yum install -y puppet #yum安裝puppet控制端
(4)編輯puppet配置文件
vi /etc/puppet/puppet.conf
[main]
server = master.test.cn
......
(5)client端申請證書
puppet agent --server=master.test.cn --no-daemonize --verbose #兩個client端執行命令一樣
執行完會有如下提示:
Info: Creating a new SSL key for client2.test.cn
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for client2.test.cn
Info: Certificate Request fingerprint (SHA256): 9E:E6:4D:3F:5B:03:D2:72:08:FF:0B:E7:92:48:45:FA:B7:2C:89:B5:12:CB:EC:8F:2E:50:B4:02:5F:4C:DF:17
Info: Caching certificate for ca
等待一會兒按ctrl+c組合鍵結束
4.回到Puppet Master端查看申請信息
(1)查看申請證書的客戶端
puppet cert list
(2)將未申請的客戶端進行授權
puppet cert sign --all
(3)通過目錄查看已經申請註冊的客戶端
ll /var/lib/puppet/ssl/ca/signed/
5.批量修改客戶端ssh端口
master端配置:
(1)創建ssh模塊,模塊下面有3個文件:manifests、templates和files
mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files} #模塊信息
mkdir /etc/puppet/manifests/nodes #節點信息
mkdir /etc/puppet/modules/ssh/files/ssh #模塊的文件發布目錄
chown -R puppet /etc/puppet/modules/ #修改權限
(2)創建模塊配置文件install.pp
vi /etc/puppet/modules/ssh/manifests/install.pp #新建文件(首先確定客戶端安裝ssh服務)
class ssh::install{
package{"openssh":
ensure => present,
}
}
(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發生變化,則通知service.pp
}
}
(4)創建模塊配置文件service.pp
vi /etc/puppet/modules/ssh/manifests/service.pp #新建server模塊文件
class ssh::service {
service {"sshd":
ensure=>running, #確定ssh已運行
hasstatus=>true, #puppet服務支持status命令
hasrestart=>true, #puppet服務支持restart命令
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 #將以上配置文件加載進去
}
此時/etc/puppet/modules/ssh/manifests目錄下有四個文件:
(6)建立服務端ssh統一維護文件
將服務端ssh配置文件sshd_config復制到模塊默認路徑
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/sshd_config #修改權限
(7)創建測試節點配置文件,並將ssh加載進去
vi /etc/puppet/manifests/nodes/ssh.pp
node ‘client1.test.cn‘ {
include ssh
}
node ‘client2.test.cn‘ {
include ssh
}
(8)將測試節點載入puppet,創建站點文件site.pp
vi /etc/puppet/manifests/site.pp //將測試節點載入puppet//
import "nodes/ssh.pp"
(9)修改服務端維護的sshd_cofig配置文件
vi /etc/puppet/modules/ssh/files/ssh/sshd_config #修改19行
Port 9922
(10)重新啟動puppet
systemctl restart puppetmaster
下面就是介紹客戶端怎麽獲取到服務器端的資源的方式:
(1)一般在小規模自動化集群中,客戶端主動拉取
puppet agent -t
在客戶端查看/etc/ssh/sshd_config的內容
查看服務器ssh服務是否重啟,端口是否生效
(2)當大規模部署時,采用服務器推送
client端(192.168.26.133)為例:
1)修改配置文件
vi /etc/puppet/puppet.conf #最後一行添加監聽8139端口
listen = true
vi /etc/puppet/auth.conf #最後一行添加允許任何服務器推送
allow *
2)啟動puppet客戶端
systemctl start puppetagent
在客戶端查看/etc/ssh/sshd_config的端口內容
查看服務器ssh服務是否重啟,端口是否生效
master端:
3)修改服務端維護的sshd_cofig配置文件
vi /etc/puppet/modules/ssh/files/ssh/sshd_config #修改19行
Port 8822
4)開始往客戶端推送
puppet kick client2.test.cn
在客戶端查看/etc/ssh/sshd_config的內容
在客戶端查看ssh服務是否重啟,端口是否生效
[自動化]Puppet服務安裝和部署