目前主流的自動化運維工具有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 <%= @processorcount.to_i*12 %>
這樣不同的服務器的apache的啟動進程就不同了
2. 利用fact收集想收集的信息
這個在自定義配置中已經講了方法,反正是shell腳本,你想干啥就干啥,
foreman會把fact入庫,你可以很方便的通過api或者直接訪問數據庫來獲得你想要的數據。
-
服務器
+關注
關注
12文章
9218瀏覽量
85594 -
root
+關注
關注
1文章
86瀏覽量
21400
原文標題:Puppet,Ansible,Saltstack 有哪些區別和聯系
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論