程序員的 Puppet 體驗(yàn)之旅:真心不好用
作為程序員,我卻有好幾年的時(shí)間都要替公司管理服務(wù)器,所以對各種運(yùn)維技術(shù)都研究了一番。2010年的時(shí)候,調(diào)研了 Puppet、Chef 等工具,當(dāng)時(shí)就覺得不適用。 后來隨著 Devops 概念越演越烈,Puppet名氣變到:
不puppet,無devops |
嚇的我每隔幾個(gè)月就要去翻Puppet的文檔,害怕錯(cuò)過了大時(shí)代,但是每次的結(jié)論都和當(dāng)初一樣:Puppet不好用。
服務(wù)器軟件安裝界最大的痛點(diǎn)是:
各種依賴包凌亂復(fù)雜,下載安裝都非常困難 |
人們?yōu)榱私鉀Q這個(gè)痛點(diǎn),開發(fā)了一系列軟件:
- Redhat/centos的yum
- ubuntu/debian的apt-get
- 甚至編程軟件也來插一腳:java的maven,python的pip,ruby的gem 等等
這些工具都很好用,基本上解決了問題。
而Puppet并不解決這個(gè)痛點(diǎn),它是建立在軟件管理程序之上的,就是說 在Redhat上跑Puppet,它用up2date更新軟件,在Ubuntu上跑Puppet,它用apt-get下載軟件。
Puppet是什么?
在我看來,Puppet有兩大功能:
- 一種方言,用來格式化寫作軟件安裝腳本;
- 服務(wù)器集群操作工具 ,你可以在一臺(tái)機(jī)器上指揮N臺(tái)服務(wù)器運(yùn)行/下載/安裝。
第1點(diǎn),Puppet的寫作語法相當(dāng)復(fù)雜,對比 Markdown之于文本寫作來說,puppet的語法稱得上謷牙詰屈,需要花大量時(shí)間學(xué)習(xí),而且難于記憶。
安裝一個(gè)軟件,用shell命令寫的安裝腳本可能只有50行,puppet要寫200-300行,還非常不直觀,難以看懂。
因?yàn)檐浖惭b的最大痛點(diǎn)已經(jīng)被軟件安裝器解決了,puppet能做的很少,你隨便找一個(gè)現(xiàn)成的puppet mannifests看看,你會(huì)覺得它相當(dāng)無聊。
幸虧,有好心人 Example(42) 提供了一堆已經(jīng)寫好的puppet manifesthttps://github.com/example42/puppet-modules,我覺得puppet大半的價(jià)值都在這里。
第2點(diǎn),對于普通人來說,能夠像木馬一樣批量操作多臺(tái)服務(wù)器,太酷了! 但是對于SA,這是日常工作。
最通常的做法,是先找一臺(tái)服務(wù)器做登陸機(jī),然后把它和其它所有服務(wù)器用ssh keygen打通登錄。 sshd安裝包自帶一個(gè)ssh-copy-id腳本,執(zhí)行,輸入一次密碼就可以打通。
在登錄機(jī)上裝一個(gè)web server,把各種軟件/包/安裝目錄 放在web server的http document目下,要用的時(shí)候wget -O就可以。
要把一個(gè)軟件部署在多臺(tái)服務(wù)器上,寫一段 for ip in ip_lists :ssh ip -e "" 這樣的shell就可以了。
如果用python寫批量安裝腳本,可以直接使用pssh、Fabric 等包,它們都需要 提前打通服務(wù)器之間的ssh keygen 登錄。
用ssh keygen打穿服務(wù)器,可能會(huì)有安全隱患,那臺(tái)登錄機(jī)太要命了。但是不打穿,用直接登錄的方式,那么系統(tǒng)管理員的電腦就是成了火藥庫,所以風(fēng)險(xiǎn)不在這里。
結(jié)論
Puppet逃避了軟件安裝的最大痛點(diǎn),能做的事情很少,學(xué)習(xí)曲線還這樣陡峭,雞肋都算不上。