1. 程式人生 > >自動化運維工具之Puppet

自動化運維工具之Puppet

安裝 使用 puppet

一、ruby介紹(pupet4以上已用其他語言重寫)

puppet3以下版本是由ruby語言研發的,所以在學習Puppet之前,可以先了解下ruby語言。

ruby 是一種面向對象、命令式、函數式、動態的通用編程語言。在20世紀90年代中期由日本人松本行弘設計並開發,遵守BSD許可證和Ruby License。它的靈感與特性來自於Perl、Smalltalk、Eiffel、Ada以及Lisp語言。

Ruby的作者--松本行弘於1993年2月24日開始編寫Ruby,直至1995年12月才正式公開發布於fj(新聞組)。之所以稱為Ruby是取法自Perl,因為Perl的發音與6月的誕生石pearl(珍珠)相同,Ruby選擇以7月的誕生石ruby(紅寶石)命名。

特色

完全面向對象:任何東西都是對象,沒有基礎類型

變量沒有類型(動態類型)

任何東西都有值:不管是四則運算、邏輯表達式還是一個語句,都有回傳值。

運算符重載

垃圾回收

強類型

變量無需聲明

在Windows上,加載DLL

註:puppet4已經“重構”,對比puppet3已經發生了“很大”的改變。可以看以下文章更詳細的了解。http://www.cnblogs.com/yuxc/p/5945944.html

二、puppet介紹

puppet是一種Linux、Unix、windows平臺的集中式的配置管理工具,通過自有配置語言對節點進行目標狀態定義,並能夠基於網絡實現目標狀態的維護。使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、

系統服務等。puppet把這些系統實體稱之為資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關系。

puppet采用C/S星狀的結構,所有的客戶端和一個或幾個服務器交互。每個客戶端周期的(默認半個小時)向服務器發送請求,獲得其最新的配置信息,保證和該配置信息同步。每個puppet客戶端每半小時(可以設置)連接一次服務器端, 下載最新的配置文件,並且嚴格按照配置文件來配置客戶端. 配置完成以後,puppet客戶端可以反饋給服務器端一個消息. 如果出錯,也會給服務器端反饋一個消息.

master: 中心配置庫

agent: 讀取並應用配置的節點

puppet工作過程

技術分享圖片

1)定義:使用puppet特定的語言定義基礎配置信息。通常將信息寫在modules中。

2)模擬:在配置執行之前檢測代碼,但不真正執行。

3)執行:按步驟1)定義的配置自動部署。檢測並記錄下所發生變化的部分。

4)報告:將期待的變化、實際發生的變化及任何修改發送給報告系統。

puppet工作模型

技術分享圖片

三、puppet安裝

3.1 安裝puppet

解決依賴關系安裝ruby模塊:

yum install ruby ruby-libs ruby-shadow

安裝puppet3

rpm -Uvh http://yum.puppetlabs.com/el/6Server/products/x86_64/puppetlabs-release-6-6.noarch.rpm 
yum clean all

服務器端安裝:

yum install puppet-server

客戶端安裝:

yum install puppet

安裝puppet4

yum localinstall http://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

服務器安裝:

Yum install puppetserver

客戶端安裝:

yum install puppet

3.2 配置puppet

配置防火墻

iptables -A INPUT -m tcp -p tcp --dport 8140 -j ACCEPT

啟動puppetserver服務:

技術分享圖片

設置主機名和指定的host。

Master

#hostname centos

Agent(3個客戶端)

#hostname centos-test1
#hostname centos-test2
#hostname centos-test3

兩端/etc/hosts同時添加:

192.168.39.135 centos  
192.168.39.200 centos-test1  
192.168.39.201 centos-test2 
192.168.39.202 centos-test3

Master端/etc/puppetlabs/puppet/puppet.conf

指定cert服務器名:

技術分享圖片

Agent端/etc/puppetlabs/puppet/puppet.conf:

指定puppet server端:

技術分享圖片

3.3 puppet agent ca認證

puppet認證機制:

master/agent:

1、master啟動時會為自己生成Key, 並簽署證書;

2、agent首次啟動要為自己生成Key, 生成證書簽署請求;

3、master收到agent端的簽署請求後,要先驗正請求是否合法,而後做證書簽署;

Agent發起認證請求:

# puppet agent --test    (同puppet agent -t)

技術分享圖片

Master查看認證請求:

[root@centos puppet]# puppet cert --list

技術分享圖片

# puppet cert list --all

查看所有客戶端的請求(有+號的代表已經簽好證書可以通信,沒有加號的代表尚未簽好證書)

技術分享圖片

Master下發認證:

[root@centos puppet]# puppet cert sign centos-test1

技術分享圖片

也可以使用命令puppet cert sign -all 受理所有認證

此時,認證請求已經沒有了。

技術分享圖片

Agent確認已經成功:

技術分享圖片\

Master清理證書:

[root@centos puppet]# puppet cert clean centos-test1

註:所有證書文件在/etc/puppetlabs/puppet/ssl目錄,證書文件可以刪除但之後需要從新頒發認證。

可以通過以下命令查看ca證書文件內容。

openssl x509 -text -noout -in  /etc/puppetlabs/puppet/ssl/certs/ca.pem —查看ca證書裏面的內容

四、puppet資源詳解

4.1 puppet資源

如果把OS的所有配置,如用戶賬號、特定的文件、文件所屬的目錄、運行的服務、程序包以及cron任務等,看作是許多獨立原子單元的集合的話,這些所謂的“單元”就是“資源”,不過,這些資源在其大小、復雜程度以及生命周期的跨度上等多個維度上可能會各不相同。

通常來說,類屬於同一種資源的屬性是相近的,如文件都有其屬主和屬組,而用戶賬號則由用戶名、UID、GID等組成。但,即便是同一種資源,其在不同OS上的實現方式卻又可能各不相同,例如,在windows上和Linux上啟動和停止服務的方式相去甚遠。

因此,puppet從以下三個維度來對資源完成抽象。

相似的資源被抽象成同一種資源“類型”,如程序包資源、用戶資源及服務資源等;

將資源屬性或狀態的描述與其實現方式剝離開來,如僅說明安裝一個程序包而不用關心其具體是通過yum、pkgadd、ports或是其它方式實現;

僅描述資源的目標狀態,也即期望其實現的結果,而不是其具體過程,如“確定nginx運行起來”而不是具體描述為“運行nginx命令將其啟動起來”;

這三個也被稱作puppet的資源抽象層(RAL)。RAL由type(類型)和provider(提供者,即不同OS上的特定實現)組成。

1.2 puppet資源解構

在為puppet定義一個資源時,需要為其指定所屬的類型和資源標題,並同時配置一系列的屬性和對應的值。puppet通過其特有的語言來描述和管理資源,如下面所示的資源定義。

user { ‘test‘:

ensure => present,

uid => ‘601‘,

gid => ‘601‘,

shell => ‘/bin/bash‘,

home => ‘/home/test‘,

managehome => true,

}

這種語法被稱作“資源申報(resource declaration)”,它是puppet語言的核心組成部分。上述的定義中,僅描述了資源的目標狀態而沒有提到為達成目標所需要采取的任何步驟。而資源定義的核心也可以抽象為type、title、attribute和value四個部分。

puppet有許多內置的資源類型,而通過安裝插件還可以繼續新增額外的類型。可以通過puppet官方的類型參考頁面(http://docs.puppetlabs.com/references/latest/type.html)獲取詳細的信息。也可以使用“puppet describe”命令來獲取puppet當前所支持的類型列表及每種類型的詳細信息,下面給出了一個簡要的使用說明。

puppet describe -l:例如puppet支持的所有資源類型及其描述信息;

puppet describe -s <TYPE>:列出指定資源的簡要說明;

puppet describe <TYPE>:顯示指定資源的詳細說明;



未完待續....

本文出自 “Hello,World!” 博客,請務必保留此出處http://bovin.blog.51cto.com/7402899/1983534

自動化運維工具之Puppet