Linux puppet部署與應(yīng)用

2018-07-31 14:44 更新

防偽碼:忽如一夜春風(fēng)來,千樹萬樹梨花開。

            十二章 puppet部署與應(yīng)用

前言:作為一名運維工程師,就需要尋找一款能夠降低工作量的工具。那么今天就給大家介紹一批工具,這批工具是“可編程”的,只需要為這批工具寫上幾行代碼,它便會自動完成所有的工作,這批工具就是運維自動化puppet(為什么說是一批工具,因為軟件不止一個)。Puppet可以針對多臺服務(wù)器進行統(tǒng)一的操作,例如:軟件分發(fā),統(tǒng)一執(zhí)行腳本,在服務(wù)器上寫好腳本分發(fā)給客戶機,客戶機就會自動執(zhí)行,減少了人力及誤操作風(fēng)險。Puppet與我們之前在windows2008R2中學(xué)習(xí)過的“組策略”非常相似,所以在windows中有的功能,在linux中都能找到這些功能的影子。


2016年的第一場雪,比以往時候來的更晚一些......嘿嘿,開心^_^。

一、 工作原理和案例環(huán)境

1、 工作原理

Puppet的目的是讓管理員只集中于要管理的目標,而忽略實現(xiàn)的細節(jié)。Puppet既可以在單機上使用,也可以c/s使用,在大規(guī)模使用puppet的情況下,通常使用c/s結(jié)構(gòu),在這種結(jié)構(gòu)中puppet客戶端只運行puppetclient,puppet服務(wù)器只運行puppetmaster。

2、 工作流程

1) 客戶端puppet調(diào)用facter(facter是通過ssl加密收集及檢測分析客戶端配置信息的一個工具),facter探測出主機的一些變量,如主機名,內(nèi)存大小,ip地址等。Puppet把這些信息通過ssl連接發(fā)送到服務(wù)器器端

2) 服務(wù)器端的puppetmaster通過facter工具分析檢測客戶端的主機名,然后找到項目主配置文件mainfest里面對應(yīng)的node配置,并對該部分內(nèi)容進行解析。Facter發(fā)送過來的信息可以作為變量處理,node牽扯到的代碼才解析,其他沒牽涉的代碼不解析,解析分為幾個階段,首先進行語法檢查,如果語法沒錯,就繼續(xù)解析,解析的結(jié)果生成一個中間的“偽代碼”,然后把偽代碼發(fā)送給客戶端。

3) 客戶端接收到偽代碼,并執(zhí)行,客戶端把執(zhí)行的結(jié)果發(fā)送給服務(wù)器。

4) 服務(wù)器把客戶端的執(zhí)行結(jié)果寫入日志。

 

Puppet工作過程有以下兩點值得注意:

1) 為了保證安全,client和master之間是基于ssl和證書的,只有經(jīng)master證書認證的client可以與master通信。

2) Puppet會讓系統(tǒng)保持在人們所期望的某種狀態(tài)并一直維持下去,例如:檢測某個文件并保證其一直存在,保證ssh服務(wù)始終開啟,如果文件被刪除了或者ssh服務(wù)被關(guān)閉了,puppet下次執(zhí)行時(默認30分鐘),會重新創(chuàng)建該文件或者啟動ssh服務(wù)。

3、 案例環(huán)境

二、 安裝puppet的實驗步驟

A、搭建puppetmaster

B、搭建puppetclient

C、配置測試節(jié)點

D、客戶端主動拉取

E、服務(wù)器推送

1、 搭建puppetmaster

1) 規(guī)劃服務(wù)器主機名(小規(guī)模可以修改/etc/hosts文件,服務(wù)器多的時候我們需要搭建dns服務(wù)器來實現(xiàn)服務(wù)通過主機名進行通信,

這里就以/etc/hosts文件來實現(xiàn))

為了讓主機名立即生效,執(zhí)行下面命令(或者重啟服務(wù)器)

2) 搭建NTP服務(wù)器(前面已經(jīng)提到過facter使用證書與puppetmaster驗證身份,所以一定要確保puppetclient與puppetmaster時間保持一致,

需要單獨準備一臺時間服務(wù)器來提供時間同步)

搭建NTP服務(wù)器

yum -y ntp

vim /etc/ntp.conf,添加以下兩行:

啟動ntp服務(wù)并開啟iptables例外

在puppetmaster上面配置時間同步,作為ntp的客戶端

3) 安裝ruby(puppet就是基于ruby語言開發(fā)的,所以需要安裝ruby)

安裝完成之后檢查版本

4) 安裝facter

安裝facter(通過facter工具分析檢測客戶端傳來的信息)

5) 安裝puppet

編譯安裝:

復(fù)制配置文件

修改文件屬性并創(chuàng)建puppet主目錄:

6) puppet服務(wù)證書請求與簽名(生產(chǎn)環(huán)境中iptables默認全是關(guān)閉的)

Service iptables  stop

修改配置文件

在[main]標題下添加一行:配置服務(wù)器模塊路徑

啟動puppet主程序,配置防火墻策略

2、 搭建puppetclient

1) 規(guī)劃服務(wù)器主機名

Vi /etc/hosts(添加以下幾行)

2)服務(wù)器時間同步

3) 安裝ruby

4) 安裝facter

5)安裝puppet

6) 復(fù)制文件并設(shè)置執(zhí)行權(quán)限

7) puppet服務(wù)證書請求簽名

Vim /etc/puppet/puppet.conf(增加一行:設(shè)置master服務(wù)器的域名)

注意:puppetclient2的配置過程與puppetclient1類似,只需將主機名改為client2.benet.com即可,此處不再贅述

8) 注冊服務(wù)器

分別在puppetclient1和puppetclient2上進行注冊,執(zhí)行的命令一樣

上面會一直等待,可以按ctrl+c結(jié)束,但是服務(wù)器上已經(jīng)有申請信息了

可以執(zhí)行puppet  cert  --list 查看申請注冊客戶端

將未注冊的客戶端進行注冊

Puppet  cert  sign  --all

可以通過目錄去查看已經(jīng)注冊的客戶端(看到下面的信息說明注冊成功了)

三、 應(yīng)用案例

1、 配置一個測試節(jié)點

節(jié)點信息:/etc/puppet/manifests/nodes

模塊信息: /etc/pupppet/modules

實驗?zāi)繕耍簽榱吮Wolinux的ssh端口爆破,批量修改客戶端的sshd端口,將22號端口改為9922,并實現(xiàn)重啟sshd服務(wù)的工作。

想完成以上幾點,需要明確幾點:

①需確定openssh軟件包安裝

②需確定存在ssh的配置文件

③確定sshd的服務(wù)是系統(tǒng)服務(wù)

        創(chuàng)建ssh模塊,模塊的目錄為ssh,模塊下有三個文件分別是:manifests、templates、files。

        manifest里面必須包含一個init.pp文件,這是該模塊的的初始(入口)文件,導(dǎo)入一個模塊的時候需要從init.pp開始執(zhí)行,

可以把所有的代碼都寫入到這個文件中,也可以分成多個.pp文件,init在去包含其他文件,定義class類名時必須是ssh,這樣才能實現(xiàn)調(diào)動

        files目錄是該模塊的發(fā)布目錄,puppet提供了一個文件分割機制,類似rsync的模塊。

        templates目錄包含erb模塊文件、這個和file資源的templates屬性有關(guān)(很少使用)


master端:

1) 創(chuàng)建必要的目錄

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) 創(chuàng)建模塊配置文件install.pp

Vi  /etc/puppet/modules/ssh/manifests/install.pp

輸入以下信息(首先確定客戶端安裝了ssh服務(wù))

注意:presemt是以,結(jié)尾,由于配置的是ssh服務(wù),所以模塊名為ssh,如果配置http,則模塊名為http。

3) 創(chuàng)建模塊配置文件config.php

Vi  /etc/puppet/modules/ssh/manifests/config.pp,輸入以下內(nèi)容:

命令詳解:

class ssh::config{

  file{ "/etc/ssh/sshd_config":     //配置客戶端需要同步的文件

ensure=>present,      //確定客戶端此文件存在

owner =>"root",      //文件所屬用戶

 group=>"root",      //文件所屬組

 mode=>"0600",      //文件權(quán)限

  source=> "puppet://$puppetserver/modules/ssh/ssh/sshd_config",      //從服務(wù)器同步文件的路徑

  require => Class["ssh::install"],     //調(diào)用ssh::install確定

openssh已經(jīng)安裝

  notify => Class["ssh::service"],    //如果config.pp發(fā)生變化通知service.pp

   }

}

這個文件的內(nèi)容主要是定義,發(fā)布的配置文件權(quán)限以及調(diào)用ssh::install檢查client是否安裝了ssh服務(wù),以及調(diào)用ssh::service重新啟動sshd服務(wù)。

4) 創(chuàng)建模塊配置文件service.pp

Vi /etc/puppet/modules/ssh/manifests/service.pp

命令詳解:

 class ssh::service{

        service{ "sshd":                                        

           ensure =>running,                         //確定sshd運行        

            hasstatus=>true,                      //puppet該服務(wù)支持status命令,即類似servicesshd status命令                

           hasrestart=>true                  //puppet該服務(wù)支持status命令,即類似servicesshd status命令  

            enable=>true,                                                //服務(wù)是否開機啟動

            require=>Class["ssh::config"]       //確認config.pp調(diào)用

                }

}

5) 創(chuàng)建模塊主配置文件init.pp

Vi  /etc/puppet/modules/ssh/manifests/init.pp

上面一共建立了4個文件,確保建立好

6) 建立服務(wù)器端ssh統(tǒng)一維護文件

由于服務(wù)器端和客戶端的sshd_config文件默認一樣,此時將服務(wù)器端/etc/ssh/sshd_config復(fù)制到模塊默認路徑。

7) 創(chuàng)建測試節(jié)點配置文件,并將ssh加載進去

Vi /etc/puppet/manifests/nodes/ssh.pp,輸入以下信息

8) 將測試節(jié)點載入puppet,即修改site.pp

Vi  /etc/puppet/manifests/site.pp,輸入以下信息:

9) 修改服務(wù)器端維護的sshd_config配置文件

Vi  /etc/puppet/modules/ssh/files/ssh/sshd_config

10) 重新啟動puppet

2、 配置客戶端主動拉取

一般在小規(guī)模自動化群集中,如代碼上線需要重新啟動服務(wù)時,為了防止網(wǎng)站暫時性無法訪問的問題,每臺客戶端需要運行一次puppet agent -t命令,所以選擇模式時需要根據(jù)規(guī)模的大小來決定,一般運維工程師puppet服務(wù)器到各客戶端建立ssh信任,然后自定義腳本,ssh讓客戶端批量執(zhí)行puppet命令同步。

在客戶端puppetclient1上執(zhí)行命令

然后在客戶端上查看ssh配置文件的端口是否改變,并查看端口運行狀態(tài):

Vi /etc/ssh/sshd_config

    由上圖可以看出,客戶端的ssh端口已經(jīng)變成9922,而且ssh服務(wù)自動重啟了,說明我們的實驗做對了。但是如果都由客戶端自己拉取的話,可以想象如果有幾百甚至上千臺服務(wù)器呢,客戶端拉取一定是不可取的,所以我們可以采用另一種方式,就是服務(wù)器推送,只需要在服務(wù)器上執(zhí)行一次命令,所有的客戶端都會同步,這樣工作會更輕松一些。

3、 服務(wù)器推送同步

1) 修改puppet主配置文件

在客戶端上執(zhí)行下面命令:

Vi  /etc/puppet/puppet.conf,在最后添加一行,使puppet監(jiān)聽8139端口

2) 修改puppet驗證配置文件,定義權(quán)限

在客戶端上執(zhí)行:vim /etc/puppet/auth.conf

在最后一行添加下面的內(nèi)容

3)啟動puppet客戶端

4)再次把服務(wù)器的ssh配置文件端口改為12345(換一個試試)

5)服務(wù)器推送給客戶端

6)在客戶端查看端口是否改變

客戶端ssh端口已經(jīng)改變,實驗正確。但是今天僅僅是做了ssh同步的一個應(yīng)用案例,實際上puppet功能十分強大,應(yīng)用非常靈活,運維的工作基本上它都可以完成自動化,相關(guān)腳本在網(wǎng)上有很多,大家可以查詢練習(xí)。

謝謝觀看,真心的希望能幫到您!

 

本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號