目前主流的自動(dòng)化運(yùn)維工具有puppet、ansible、saltstack,實(shí)際上每一個(gè)工具都基本上能夠完成你的運(yùn)維任務(wù),也都是久經(jīng)考驗(yàn)的。都有NB的地方,也有挫的地方,所以,完全沒法從功能、特性等等這些方面去選擇。
如果考慮到快速使用,建議puppet,有一個(gè)foreman做web平臺(tái),上手快。
如果考慮后期自己開發(fā),并且是無agent方式,可以用ansible,基于ssh的,比較直接粗暴,會(huì)有種很“爽“的感覺。
ansible主要是遠(yuǎn)程命令執(zhí)行,比較適合做“一次性”的工作。
saltstack用的不多,不做評(píng)論。
我個(gè)人比較喜歡用puppet和ansible,倒不是說saltsatack不好,是我從開始就在用puppet,所以,就沒有再去學(xué)習(xí)saltsatck的必要了。
ansible的優(yōu)勢(shì)是什么,如何在企業(yè)中更好地使用ansible?
ansible比較適合做“一次性”的工作,例如,系統(tǒng)部署、應(yīng)用發(fā)布、打補(bǔ)丁等等。
在企業(yè)中使用ansible,要注意以下幾點(diǎn):
1. 安全控制,簡(jiǎn)單來說就是避免用root用戶來執(zhí)行。
2. 控制好依賴 在寫playbook的時(shí)候,控制好先后順序和依賴關(guān)系。
3. 結(jié)果的收集和分析 因?yàn)橐幌伦訋装倥_(tái)機(jī)器一起干活,所以,就要自己寫外置腳本,更好地收集ansible的操作結(jié)果,并且進(jìn)行直觀的匯總和展現(xiàn)。
Foreman的作用是什么?
foreman是基于puppet的一個(gè)“增強(qiáng)工具”,主要能夠幫到我們運(yùn)維狗的有:
1. 操作系統(tǒng)的部署
foreman提供了一個(gè)基于kickstart的部署工具,輸入一臺(tái)服務(wù)器的部署網(wǎng)卡的mac地址和hostname、ip等信息,就能自動(dòng)的幫我們部署完,并且,還可以生成一個(gè)部署iso,用于該服務(wù)器的重新部署。
2. puppet的節(jié)點(diǎn)管理(ENC)
原聲的puppet管理節(jié)點(diǎn)分類以及節(jié)點(diǎn)和puppet類之間的映射靠文件描述,企業(yè)客戶更希望有一個(gè)直觀的工具,foreman可以通過Web界面將節(jié)點(diǎn)分組,將類分組,并且構(gòu)建兩者的映射關(guān)系。
3. puppet的Web界面
有個(gè)Web總是比命令行要方便,foreman提供了一個(gè)還算的過去的web界面,用于節(jié)點(diǎn)管理、類管理、變量管理、配置管理、部署管理等功能。
如何利用foreman呢?
說實(shí)話,相比運(yùn)維狗能寫出來的界面,foreman已經(jīng)很高大上了,所以,我們前面幾個(gè)項(xiàng)目都是基于foreman進(jìn)行擴(kuò)展的,當(dāng)時(shí)學(xué)習(xí)ruby,做需求分析,苦逼的用ruby實(shí)現(xiàn)功能,當(dāng)時(shí)實(shí)現(xiàn)了自動(dòng)化的安全檢查、系統(tǒng)升級(jí)等功能。
后來客戶需求越來越多,我們覺得不能局限于foreman的限制,就開始利用foreman的REST API實(shí)現(xiàn)功能的擴(kuò)展,保證一個(gè)干凈、原生的foreman。
foreman給我們的一個(gè)很大幫助就是,他把所有的配置、fact結(jié)果、運(yùn)行結(jié)果什么都放到了mysql數(shù)據(jù)庫里,所以,我們?cè)谧鲆恍┻\(yùn)行分析的時(shí)候,可以直接從數(shù)據(jù)庫中獲取數(shù)據(jù)進(jìn)行分析即可。
foreman幫我們搞定了節(jié)點(diǎn)管理、數(shù)據(jù)入庫,剩下的就是你的想象力了。
puppet的fact機(jī)制是什么,如何利用fact?
簡(jiǎn)單來說,fact就是puppet的一個(gè)組件,這個(gè)組件以一堆ruby腳本的形式存在在被管理服務(wù)器上,每次運(yùn)行puppet命令的時(shí)候,都會(huì)先執(zhí)行這一堆腳本,獲得一堆變量=>值對(duì),然后返回給服務(wù)器。
可以在一個(gè)安裝了puppet的服務(wù)器上執(zhí)行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/ 這個(gè)目錄中,有興趣的同學(xué)可以自己看看。
系統(tǒng)默認(rèn)了將近100個(gè)fact變量,實(shí)際上我們也可以自己擴(kuò)展自己需要的fact變量,擴(kuò)展fact有4種方法:
1. 直接在/usr/lib/ruby/site_ruby/1.8/facter/目錄中自己寫一個(gè)fact腳本,看看其他的怎么寫的,比劃著寫就行了
2. 自己隨便找個(gè)目錄,把你自己的ruby腳本放到哪個(gè)目錄中,然后定義變量:export FACTERLIB=/mypuppet/myfact/,腳本寫法同上
3. fact支持外部fact,這個(gè)定義寫在了/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定義放到那些目錄中(可能需要自己創(chuàng)建),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發(fā)布,這個(gè)方法我用的很少,因?yàn)樘闊┝?,我是極簡(jiǎn)主義者
對(duì)于自定義facter,大家可以參考
https://docs.puppetlabs.com/facter/3.1/fact_overview.html
找到了這個(gè)機(jī)制,我們?nèi)绾卫胒acter呢? 通常來說,有2個(gè)用法:
1. 使用fact變量來實(shí)現(xiàn)配置的自動(dòng)調(diào)節(jié)
例如apache服務(wù)器,希望按照cpu的核數(shù)調(diào)整并發(fā)的進(jìn)程數(shù)
fact變量中有一個(gè):
[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 %>
這樣不同的服務(wù)器的apache的啟動(dòng)進(jìn)程就不同了
2. 利用fact收集想收集的信息
這個(gè)在自定義配置中已經(jīng)講了方法,反正是shell腳本,你想干啥就干啥,
foreman會(huì)把fact入庫,你可以很方便的通過api或者直接訪問數(shù)據(jù)庫來獲得你想要的數(shù)據(jù)。
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9796瀏覽量
88017 -
root
+關(guān)注
關(guān)注
1文章
86瀏覽量
21737
原文標(biāo)題:Puppet,Ansible,Saltstack 有哪些區(qū)別和聯(lián)系
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Ansible軟件平臺(tái)
ansible調(diào)用playbook遠(yuǎn)程mvn顯示找不到JAVA_HOME
ansible 某臺(tái)機(jī)器的ssh端口不是默認(rèn)端口,如何解決?
使用用Ansible重復(fù)部署ELK STACK

Ansible Container容器自動(dòng)化構(gòu)建部署工具

什么是Ansible
網(wǎng)絡(luò)設(shè)備自動(dòng)化運(yùn)維工具—ansible入門筆記介紹

評(píng)論