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