9
Ansible 實戰:top down 觀點 (www.slideshare.net)
IngramChen 積分 11 編輯於

我個人已經用了 ansible 一段時間了,像是 kaif 就是用 ansible 部署的。不過公司本身的系統已經四~五年了,長久以來都是用 scripts 管理。直到最近才花了一兩個禮拜重整,全部用 ansible 重做,去掉那些 adhoc scripts。

這過程實在是冗長,要將 ansible 每個指令都設計成 idempotent 實在是有夠久 (不斷試誤,重新 play 都要很久)。不過做完了之後就會覺得值得了,因為整個部署的歷程、做法都完整的寫在 playbook 裡。只要查 playbook,就知道哪台主機怎麼部署的,做了哪些設定,部署到哪裡。只要學 ansible 這麼一套,就可以了解整個部署的架構。不再像以前要到處找 shell script,而且中間還混了一堆 python/ruby/perl scripts (還包含它們的 dependencies 安裝,版本控制... 實在很頭痛這。)

我想 ansible 是很適合中小企業多的台灣公司吧,說真的單一服務會部署到 > 50 台以上生意真的做很大,沒幾家辦得到的。不過 ansible 就算是只部署到一台主機,也是值得投資的技術。對 ansible 來說,部署一台和五十台的技術門檻都一樣,都很低,不像其他 puppet/chef 都太複雜,太難學,只適用於大公司。我很建議管理零星主機的開發者 (比方說 3~20 台),開始導入 ansible,把過去的 script 都漸漸汱換掉。

如果是新專案,大概就是一開始就準備好 vagrant 的 playbook 給開發時用,等到專案要上線了,拿那本 playbook 改個幾行就可以上線了。你的開發團隊的環境統一,好管理,一鍵搞定他的電腦的開發環境。而你的 production 環境又跟 local 的 vagrant 很像,等於每個開發者都很自然的熟悉正式機的運作,這投資報酬率很好呀。

要說 ansible 的缺點就是他的 playbook 只是 yaml 格式,沒辦法寫簡單的 loop ( with_items 不夠用的)。遇到這問題,在實務上你會開始用其他怪招來處理這個缺點,但這就讓原本很簡單的 playbook,藏著一些別人看不懂的設定 (他得知道你繞著彎寫這麼多額外的 task,其實只是為了做一個 loop 而已… )

另外,ansible galaxy 裡面放在前人努力的成果,要裝 redis?隨便找一下就有現成的可用。不過它也個問題就是有時候你不知道該挑哪個 role 來用,因為水準撐疵不齊,它的網頁寫的不是很好,不夠你判斷哪個 role 水準比較高,有持續在維護的。你還是得去它的 github 看一下原始碼才比較有譜。

最後,來抱怨一下血淚… ansible 的 ec2 module 有個這麼樣的設定:

- ec2:
    key_name: mykey
    group: webserver
    instance_tags:
        foo: bar
    exact_count: 5
    count_tag: foo

這個 task 的是建立 ec2 裡的 instance。條件是 tag name 為 foo 的主機,保證一定開 5 台 (exact_count:5)。媽呀,這個指令有夠恐怖,我練習個幾次後,就在 production 下,結果 tag 下錯了,我線上的 server 就被胡亂的 terminate ,只剩下 5 台,其他都被殺了,整個快哭了… devop 的血淚史又翻過了另一頁…

exact_count 這功能立意很好,但除了一些 stateless 的 web server ,有什麼服務可以 random terminate 的?資料庫鐵定不行的啊,master 主機怎麼能亂殺?但就算是 slave ,它啟動也要有很長的準備時間 (要先 copy 資料),哪有說設個 slave exact_count: 3,就讓 ansible 隨便挑3台留下,胡亂殺掉任意的其他台 slave?而像 redis 這種 cache server,也會有 warm up 的期間,哪有說殺就殺,說開就開?真的能適用 exact_count 這種部署方式的,只有那些幾乎沒 state 的 nginx, ha_proxy 服務吧…

kakashi 積分 1

同意, 我覺得要弄成 idempotent 的狀態, 真的要試錯超久的, 這也算是導入的一個門檻, 如果只有一兩台機器感受不太到 ansible 的威力, 但是多台機器就可以玩得很開心

qrtt1 積分 3 編輯於

當人工安裝要花 1 整天時,你就會感覺到威力惹。

記得某 OP 最經典的評論:『沒有安裝手冊要怎麼裝』

在內心打槍:『都寫成 playbook 了,還有 README,要什鬼安裝手冊,都跟你列了有哪些是要學的,怪偶囉!?』

kaif 積分 0

我覺得台灣9成以上工程師都不會care這件事的~

「裝很久,就慢慢裝阿...」

IngramChen 積分 2

一開始投資過後,後面要再加新的就比較簡單了。都是一開始要試很久…

william 積分 1

這類 ec2 module 的問題,我比較傾向用 HashiCorp 的 Terraform

IngramChen 積分 0

又多個東西要學.... orz

william 積分 3 編輯於

Terraform 有 Execution Plans 及 Resource Graph 機制,類似 RDBMS 的那種 query plan。用起來會比較安心。

我這陣子會好好試驗看看,再到 JCConf 2015 分享(如果投稿有被接受的話⋯⋯)。