天天看點

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

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環境,具體拓撲圖如下:

[自動化]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   #檢視同步狀态           
[自動化]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配置一樣)

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           
yum install ntp -y
service ntpd start  #啟動ntp服務
ntpdate 192.168.26.130 (NTPserver位址)           
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服務安裝和部署
[自動化]Puppet服務安裝和部署

master端:

vi /etc/puppet/modules/ssh/files/ssh/sshd_config  #修改19行
Port 8822           
puppet kick client2.test.cn             

繼續閱讀