Ansible 深度解析
至頂網軟體頻道消息: 2018年1月23日,紅帽聯合至頂網在上海舉辦了「Ansible Automates」大會,本地大會以「智能 自動 規範——迎接自動化運維新時代」為主題。大會上,紅帽首席方案架構師張家駒對Ansible產品進行了深度解析。(以下為錄音整理)
紅帽首席方案架構師 張家駒
Ansible的設計哲學
首先我們來看Ansible的設計哲學、設計理念。我們看它的logo非常簡潔,一筆寫出這樣的A字,沒有多餘的部分。它在表達一個非常簡單的哲學信仰,我們認為是複雜性是抹殺生產力的。
舉一個非常簡單的例子:早年我做開發的時候,做了很多高可用的系統,無論是閉源的還是開源的高可用的系統。我們要考慮,是不是要做雙機之間的熱備,做心跳的監控。當我們做這些事情的時候,發現即使做了熱備和監控,還是不能滿足要求,所以我們要加很多的策略、很多規則。規則加多了之後,我們系統變得越來越複雜。Ansible,它很大的價值或者說設計理念,就是盡量的簡單化,我們通過簡單的手段去保證一個複雜可用性、可靠性的問題、擴展的問題。不用做過度的設計。
第二點,整個設計過程中,我們要最大程度貼近自然語言。這塊我們更多考慮到人機交互的界面,因為軟體畢竟是給人用的,所以人機之間的交互界面很重要。最精確的語言是面向機器的語言,你告訴它往計數器寫這樣的數字,它就是寫這樣的數字,但是過多面向機器的語言,人理解起來就比較費勁。如果更多的面向人,可能它是不是保證很大的確定性,是不是有技巧在裡面就有這樣的問題。折中這兩點,Ansible給大家提供的界面就是這樣的語言,後面我們也可以通過我的演講,和大家儘可能探討一下Ansible到底是什麼。我覺得確實不是簡單的標記性的語言。
第三點,以確定性替代不確定性。其實我們講確定性、不確定性,我們中國有一家著名企業的老總經常講,以確定性代替不確定性,包括我們給客戶服務的時候,這種要求客戶也非常需要的。如何以確定性代替不確定性,比如設定這樣一個Ansible:30秒種之內返回給我一個確定的結果,如果不返回,就是失敗了。把它調用過來,給我一個返回,要麼是成功,要麼是失敗。後來為了提供系統整體高並發,高可靠的東西,我們採取了一些非同步的消息隊列。
Ansible 概覽前面說的方法論大家會覺得雲里霧裡,下面我們深入Ansible裡面,因為Ansible本身部署起來就是非常簡單的。看這個圖中間畫了筆記本,就是Ansible整個運行時的環境,這部分程序代碼是可以跑在你的任何一個設備上,基本上只要是一台機器就可以跑Ansible這樣的軟體。
那Ansible這個軟體是管理大多數機器的,它是管理端,是管到若干台機器,它通過SSH這個通道管理這麼多台機器。這裡面有一個好處,它最大程度地利用本身的功能,所以說我們講Ansible要管理另外一台機器,如果另外一台機器沒有和你對應的介面,你是沒有辦法管理的。對於不同的網路設備、存儲設備也會有對外暴露的介面,通過這樣的介面管理。左邊有Inventory,也就是說我們做什麼事情,我們像一個劇本一樣,所有事情都寫在這個文件裡面,通過這台機器就可以分散到不同機器上執行了。當然了,對於裡面細節的東西,比如這個東西你要推到一千台機器或者一萬台機器上,你是一起推還是分批推,也裡面有細節的東西,就不再深入太多了。
我們看一下Inventory這裡,這是靜態的列表,是不變的。另外一種情況是動態的,我被管理的機器是發生變化的,現實中我們也經常遇到這樣的問題,比如我將機器放到裡面,需要做同樣的配置,這裡面Inventory比較方便的地方就是列表的格式,實際上就直接解析為這樣的文件,如果你是可執行的腳本。右邊我是簡單把流程寫了一下,如果是簡單的腳本,會通過你腳本取得你當前的列表。大家如果這個環節裡面,對接不同的底下的平台,實際上通過這個腳本你就可以取得當前的動態節點列表。
這裡面可能大家會問這樣的問題,靜態的很好理解,靜態就三台機器,如果是動態,有可能我取的時候,把節點取出來了,然後運行了,再取就不一樣了,這樣同步的一致性肯定是需要考慮的。這個裡面實際上就印證了我開始說了Ansible簡潔的設計。對於這裡面的運維操作,實際上就像互聯網很多應用的推送一樣,我不一定所有東西都是實時的,所以這裡面讓你業務部需要那麼強的實時性。
第二點,簡單說一下Ansible的模塊,在第一張簡單架構圖裡面沒有顯現出來,另外就是playbook要執行哪些劇本,這些最基本的功能模塊。通過這兩條簡單的命令,就很容易熟悉Ansible各個模塊,以及他們是怎樣使用的。
接下來說一下冪等性,就是這個東西是可重複的,我們不管執行多少遍,結果都是一致的。這裡面舉了一個簡單的例子,比如我們要啟這樣的服務,實際上這裡面我們對應了Ansible裡面是以模塊指定名字和它的狀態是Started。這是簡單的例子,可能這個例子太簡單了。我舉另外一個例子,比如你拷貝一個文件,在你拷貝的時候,我要確認你在目標有沒有這樣的文件,如果有就不用拷貝了,如果沒有就拷貝一下。所有的功能都在這裡的模塊實現的。
模塊過去之後,我們對模塊進行編排,這樣的話,我們就有劇本這樣的概念,也就是playbook。playbook是以YAML的格式寫的,實際上在Ansible裡面,我們有這樣的一個執行引擎,解釋引擎解釋這個YAML文件。
我們簡單看一下劇本長什麼樣子,這裡就是簡單的一個playbook,我大概從上到下捋一下,幾個關鍵的東西,當然裡面可能有其他的關鍵字,這裡面簡單的playbook,我是了解Ansible,我不了解Ansible也理解了八九不離十,但是我們理解了裡面的關鍵字,可能我們就裡面的程序是語言關鍵字:name、host、vars、tasks,這是一個簡單的playbook。
Ansible的大部分東西,還有很多細節無法通過30分鐘的演講展現出來,但是Ansible出現之後,我覺得它很大價值就是相當於通用的語言,之前我們的很多配置、運維,在不同組織內部都有自己的一套東西。提到這種運維,大家可能說,我們現在也運行一個系統非常良好,但是有了Ansible之後,我們發現以它的簡潔這種方式,可以把你之前很多的業務流程進行簡化並且統一過來。我們通過Ansible,可以在不同語言之間進行溝通。時間關係我就講到這裡,謝謝大家。


TAG:至頂網 |