[自動化]Puppet服務安裝和部署

puppet簡介

puppet是一種基於ruby語言開發的Lnux、Unix、windows平臺的集中配置管理系統。它使用自有的puppet描述語言,可管理配置文件file、用戶user、cron任務、軟件包、系統服務等系統實體。node

puppet依賴於C/S(客戶端/服務器)的部署架構。它須要在puppet服務器上安裝puppet-server軟件包(如下簡稱master),在須要管理的目標主機上安裝puppet客戶端軟件(如下簡稱client)。windows

爲了保證安全,master和client之間是基於SSL和證書的,只有通過master證書認證的client才能夠與master通訊。安全

puppet工做原理

  • 一、客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL鏈接發送給服務器端;
  • 二、服務器端的puppetmaster經過fast工具分析檢測客戶端的主機名,而後找到項目的主配置文件manifest裏面對應的node配置,並對該部份內容進行解析,fast發送過來的信息能夠做爲變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分爲語法檢查,若是語法沒錯,繼續解析,解析結果生成一個結果‘僞代碼’,而後把‘僞代碼’發給客戶端;
  • 三、客戶端收到‘僞代碼’而且執行,客戶端把執行結果發給服務器;
  • 四、服務器端把客戶端的執行結果寫入日誌。

實驗:

使用四臺服務器模擬搭建Puppet環境,具體拓撲圖以下:
[自動化]Puppet服務安裝和部署ruby

1.安裝NTP Server

因爲Puppet須要使用SSL證書,依賴時間同步,全部須要搭建NTP服務器。服務器

(1)關閉全部服務器的防火牆和安全性策略架構

systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

(2)yum安裝NTP並修改配置文件ssh

yum install ntp -y    #安裝ntp  

vi /etc/ntp.conf  
                            #24行添加兩行記錄
    server 127.127.26.0
    fudge 127.127.26.0 stratum 8

(3)啓動ntp服務ide

service ntpd start    #啓動ntp服務
chkconfig ntpd on

(4)查看同步狀態`工具

ntpstat   #查看同步狀態

[自動化]Puppet服務安裝和部署

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地址)

[自動化]Puppet服務安裝和部署

(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
    ......

[自動化]Puppet服務安裝和部署
(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

[自動化]Puppet服務安裝和部署

(2)將未申請的客戶端進行受權

puppet cert sign --all

[自動化]Puppet服務安裝和部署
(3)經過目錄查看已經申請註冊的客戶端

ll /var/lib/puppet/ssl/ca/signed/

[自動化]Puppet服務安裝和部署

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

[自動化]Puppet服務安裝和部署
在客戶端查看/etc/ssh/sshd_config的內容
[自動化]Puppet服務安裝和部署
查看服務器ssh服務是否重啓,端口是否生效
[自動化]Puppet服務安裝和部署
(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的端口內容
[自動化]Puppet服務安裝和部署
查看服務器ssh服務是否重啓,端口是否生效
[自動化]Puppet服務安裝和部署
master端:

3)修改服務端維護的sshd_cofig配置文件

vi /etc/puppet/modules/ssh/files/ssh/sshd_config  #修改19行
Port 8822

4)開始往客戶端推送

puppet kick client2.test.cn

[自動化]Puppet服務安裝和部署
在客戶端查看/etc/ssh/sshd_config的內容
[自動化]Puppet服務安裝和部署
在客戶端查看ssh服務是否重啓,端口是否生效
[自動化]Puppet服務安裝和部署

相關文章
相關標籤/搜索