歡迎光臨
每天分享高質量文章

Puppet,Ansible,Saltstack 有哪些區別和聯繫

作者:talkwithtrend

來源:talkwithtrend

有一種病癥叫做“選擇障礙症”,實際上工程師更容易被這個病癥纏繞。

但是,實際上沒那麼複雜,抓鬮就行了。

目前主流的自動化運維工具有puppet、ansible、saltstack,實際上每一個工具都基本上能夠完成你的運維任務,也都是久經考驗的。都有NB的地方,也有挫的地方,所以,完全沒法從功能、特性等等這些方面去選擇。

如果考慮到快速使用,建議puppet,有一個foreman做web平臺,上手快。

如果考慮後期自己開發,並且是無agent方式,可以用ansible,基於ssh的,比較直接粗暴,會有種很“爽“的感覺。

ansible主要是遠程命令執行,比較適合做“一次性”的工作。

saltstack用的不多,不做評論。

我個人比較喜歡用puppet和ansible,倒不是說saltsatack不好,是我從開始就在用puppet,所以,就沒有再去學習saltsatck的必要了。


ansible的優勢是什麼,如何在企業中更好地使用ansible?


ansible比較適合做“一次性”的工作,例如,系統部署、應用發佈、打補丁等等。

在企業中使用ansible,要註意以下幾點:

1. 安全控制,簡單來說就是避免用root用戶來執行。

2. 控制好依賴 在寫playbook的時候,控制好先後順序和依賴關係。

3. 結果的收集和分析 因為一下子幾百台機器一起幹活,所以,就要自己寫外置腳本,更好地收集ansible的操作結果,並且進行直觀的彙總和展現。


Foreman的作用是什麼?


foreman是基於puppet的一個“增強工具”,主要能夠幫到我們運維狗的有:

1. 操作系統的部署

foreman提供了一個基於kickstart的部署工具,輸入一臺服務器的部署網卡的mac地址和hostname、ip等信息,就能自動的幫我們部署完,並且,還可以生成一個部署iso,用於該服務器的重新部署。

2. puppet的節點管理(ENC)

原聲的puppet管理節點分類以及節點和puppet類之間的映射靠檔案描述,企業客戶更希望有一個直觀的工具,foreman可以通過Web界面將節點分組,將類分組,並且構建兩者的映射關係。

3. puppet的Web界面

有個Web總是比命令列要方便,foreman提供了一個還算的過去的web界面,用於節點管理、類管理、變數管理、配置管理、部署管理等功能。


如何利用foreman呢?


說實話,相比運維狗能寫出來的界面,foreman已經很高大上了,所以,我們前面幾個專案都是基於foreman進行擴展的,當時學習ruby,做需求分析,苦逼的用ruby實現功能,當時實現了自動化的安全檢查、系統升級等功能。

後來客戶需求越來越多,我們覺得不能局限於foreman的限制,就開始利用foreman的REST API實現功能的擴展,保證一個乾凈、原生的foreman。

foreman給我們的一個很大幫助就是,他把所有的配置、fact結果、運行結果什麼都放到了mysql資料庫里,所以,我們在做一些運行分析的時候,可以直接從資料庫中獲取資料進行分析即可。

foreman幫我們搞定了節點管理、資料入庫,剩下的就是你的想象力了。


puppet的fact機制是什麼,如何利用fact?


簡單來說,fact就是puppet的一個組件,這個組件以一堆ruby腳本的形式存在在被管理服務器上,每次運行puppet命令的時候,都會先執行這一堆腳本,獲得一堆變數=>值對,然後傳回給服務器。

可以在一個安裝了puppet的服務器上執行facter命令:

[root@fm-server ~]# facter

architecture => x86_64

augeasversion => 1.0.0

bios_release_date => 12/01/2006

bios_vendor => innotek GmbH

bios_version => VirtualBox

……

interfaces => eth0,lo

ipaddress => 192.168.56.30

ipaddress_eth0 => 192.168.56.30

ipaddress_lo => 127.0.0.1

is_virtual => true

kernel => Linux

kernelmajversion => 3.8

kernelrelease => 3.8.13-44.1.1.el6uek.x86_64

kernelversion => 3.8.13

具體腳本的位置在:/usr/lib/ruby/site_ruby/1.8/facter/ 這個目錄中,有興趣的同學可以自己看看。

系統預設了將近100個fact變數,實際上我們也可以自己擴展自己需要的fact變數,擴展fact有4種方法:

1. 直接在/usr/lib/ruby/site_ruby/1.8/facter/目錄中自己寫一個fact腳本,看看其他的怎麼寫的,比划著寫就行了

2. 自己隨便找個目錄,把你自己的ruby腳本放到哪個目錄中,然後定義變數:export FACTERLIB=/mypuppet/myfact/,腳本寫法同上

3. fact支持外部fact,這個定義寫在了/usr/lib/ruby/site_ruby/1.8/facter/util/config.rb檔案中:

@external_facts_dirs = [“/opt/puppetlabs/facter/facts.d”,

                                “/etc/facter/facts.d”,

                                “/etc/puppetlabs/facter/facts.d”]

把你的fact定義放到那些目錄中(可能需要自己創建),fact定義支持txt、yaml、json、sh四種方式,我比較喜歡用sh:

[root@fm-server ~]# mkdir -p /etc/facter/facts.d

[root@fm-server ~]# cd /etc/facter/facts.d/

[root@fm-server facts.d]# vi test.sh

#!/bin/bash

echo “testfact=Test”

[root@fm-server facts.d]# chmod 755 test.sh

[root@fm-server facts.d]# facter |grep test

testfact => Test

4. 用pluginsync發佈,這個方法我用的很少,因為太麻煩了,我是極簡主義者

對於自定義facter,大家可以參考

https://docs.puppetlabs.com/facter/3.1/fact_overview.html

找到了這個機制,我們如何利用facter呢? 通常來說,有2個用法:

1. 使用fact變數來實現配置的自動調節

例如apache服務器,希望按照cpu的核數調整併發的行程數

fact變數中有一個:

[root@fm-server ~]# facter |grep process

physicalprocessorcount => 1

processor0 => Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz

processorcount => 1

processors => {“physicalcount”=>1, “count”=>1, “models”=>[“Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz”]}

就可以在apache的puppet類中寫:


StartServers

這樣不同的服務器的apache的啟動行程就不同了

2. 利用fact收集想收集的信息

這個在自定義配置中已經講了方法,反正是shell腳本,你想乾啥就乾啥,

foreman會把fact入庫,你可以很方便的通過api或者直接訪問資料庫來獲得你想要的資料。

文本分享者:galaxy1975 ,專註於傳統企業的自動化運維環境構建。

《Linux雲計算及運維架構師高薪實戰班》2018年11月26日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~

    *宣告:推送內容及圖片來源於網絡,部分內容會有所改動,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

    – END –


    赞(0)

    分享創造快樂