乾貨整理 | 容器是 DevOps 的必由之路——標準化帶來的 DevOps(上)
分享人:希雲合伙人張春源
大家好,我來自希雲 cSphere 的張春源,今天給大家分享的主題是「容器是 DevOps 的必由之路——標準化帶來 DevOps 」。談到 DevOps 話題特別大,我從容器的角度給大家分享一下,為什麼容器是 DevOps 的必由之路。先簡單介紹我自己,我比較遵守「恪守契約精神,務實開放合作」的精神,同時這也是希雲 cSphere 的公司文化。我從 2013 年開始接觸到 Docker 技術,並且有幸加入到希雲 cSphere 這家專門為企業客戶提供容器雲平台的公司。在近 3 年時間,我一直在為企業提供容器雲解決方案。
今天我和大家分享一下什麼是創造力,提到這個詞大家會想到飄忽不定。人的大腦思維狀態大致有兩種:一種是專註狀態,這種狀態下的大腦模式被稱為「Executive Network」,執行網路,簡稱 EN。另一種是放空狀態,相應開啟的是「Default Network」,默認網路,簡稱 DN。專註模式我們比較熟悉,我們在學校接受教育主要訓練的就是 EN,它是大腦中靠近前側頭蓋骨的區域,能助你專註和完成任務。但是光靠 EN 是不能產生創造力的,還需要一個能幫助我們放空的網路 DN,它是我們突破性想法的聚集地,但是很多時候我們並意識不到它的存在。那麼一個偉大的創造中,EN 和 DN 如何協同工作?根據神經研究表明,如果說 EN 幫助你專註和完成一件事,那 DN 則是幫助你從更高的角度縱觀事情的複雜程度,透視全局。所有我們需要同時具備開啟兩種模式的能力,而且能在它們之間自由切換。
我之所以和大家分享什麼是創造力,主要是想說明現在隨著企業業務的迅速發展,IT 系統也要能及時響應業務的需求。我們需要一種全新的思維、全新的方法來構建企業的 IT 系統。
DevOps 主要用於開發、測試以及運維之間的協作管理,並且通過自動化流程,更加快捷、頻繁、易重複且可靠的構建軟體、測試及發布部署。在容器沒有出現之前也有 DevOps,並且發展了這麼多年,企業常用的做法是通過自動化腳本去實現配置引擎,例如:Puppet、Chef、Ansible 等工具。基於以上工具來實踐 DevOps,為什麼沒有使得 DevOps 發展起來,而且在企業中落地艱難。其中第一個原因包括是腳本缺陷。主要體現在:
- 人員強依賴:比如這個腳本是我寫的,另外一同事不一定能把這個腳本用起來;
- 不具備收斂:發現問題,首先要使問題收斂,目前使用的方法是不具備收斂的;
- 非標準:不同人腳本的寫法是不一樣的,但實現的結果都一樣;
- 不具備回退:沒有做版本管理。講到版本管理,我們的代碼都有版本管理,但是我們的代碼的運行環境,這個環境是沒有做過版本管理的,所以回退操作難度高。
第二個原因是配置引擎的缺陷,像 DSL 語言,使用門檻太高。解耦也不夠,特定的人去特定的事,如果這個人因為生病了或者請假了,這個發布就會終止。這些問題都導致了 DevOps 無法在企業落地。
給大家分享一個客戶實踐 DevOps 失敗後的案例這位客戶是個國企。對於國企來說,招人難度很高,很難招到技術特別高的人才,而且他們也想要通過 DevOps 這個技術實現增長,難度也就比較大。另外開發和運營分裂,系統開發是第三方廠商,真正運營的時候是自己在運營。兩團隊不在同一個公司,要讓開發掌握這些工具,難度更大。而且開發根本不關心底層的機器是什麼,他們說儘可能不讓我們看到機器最好,這他們真正的訴求。說白了,為什麼 DevOps 這麼難落地,就是在企業中很難形成從開發到測試再到生產統一的一致性流水線工作。
接下來給大家說說容器是什麼,在這裡我可以肯定地告訴大家,容器不是虛擬機。大家可以從 PPT 上看到容器、虛擬機、物理機的對比。容器到底是什麼,先來看第一張圖,物理機和容器,物理機安裝 OS ,再安裝 Docker 引擎,然後容器就可以運行在物理機中了;第二張圖,物理機之上運行虛擬機,然後容器運行在虛擬機之上,這種架構,我們看到它有兩個 OS ,一個 OS 是物理機的,一個是虛擬機的,然後上面才是容器;第三張圖,不知道大家有沒有想過,容器就是一個進程,對於 KVM 虛擬機其實在容器來看,它也只是一個進程而已,所以可以把一個虛擬機跑到一個容器里。重點說一下第三張圖,容器運行在虛擬機下層,容器是直接跑到裸機里的。說到這裡大家會問,容器到底跑虛機好還是跑裸機好,回答這個問題主要從 2 個方面來考慮,因為容器技術也有限制,比如我們的業務系統,多個系統之間對安全性沒有特彆強的需求,此時可以跑裸機裡面;如果隔離性是強需求,那麼推薦運行到虛擬機中,使用虛擬機來做徹底地隔離,容器是沒法實現多租戶的。容器是增強版的進程,我們來看傳統的 Linux,如我們去裝系統或者裝軟體,都通過 RPM 包,容器是使用鏡像來安裝,yum -y install 後會安裝很多包,包與包之間的依賴關係複雜,很難一眼看出是誰依賴誰。對於傳統的 Linux 是一個普通的進程,所有的程序、所有的進程是在同一個平面上,通過容器相當於給每個進程都做了一個"箱子",雖然「容器」都是運行在操作系統中,但彼此之間相互做了隔離。
容器鏡像的一個機制——COW ,大家比較熟,我就不多說了。大家比較關注的是容器的性能,這個測試報表是基於IBM伺服器機器做的,可以看到物理機和容器性能之間是基本一致,無損耗,但虛擬機損耗大約在 50% ,損耗比較大。
為什麼說容器技術恰恰能克服這些阻力呢。第一,開發使用簡單,因為在開發的時候不需要關注這個機器還有運行環境是什麼,而能更加清晰的規劃開發和運維的界面。第二、抽象層次足夠高,解耦徹底,而且容器是行業通用的標準,DevOps 發展那麼多年,為什麼說它沒有流行起來,比如說剛才提到實現 DevOps 平台多種技術多種工具,這些工具的標準搬到其他的公司它未必適用,不同公司的文化也不一樣。容器標準的生命力特彆強,容器可以讓 DevOps 普及發展以及流行,並且走出陰霾,證明 DevOps 的先進性,也確實是可以落地的。
以上就是技術總監張春源大大的演講內容(上篇),下篇將主要為大家講解容器在開發領域是怎樣的流程以及容器為什麼是 DevOps 的必由之路。敬請期待呦~
http://weixin.qq.com/r/mkwDG1fEbwoQrRN49xmI (二維碼自動識別)
推薦閱讀:
※探討一下,docker/compose 中關於 link 的設計怎麼樣?
※在Ubuntu 16.04環境下安裝Docker-CE(附視頻教程)
※如何評價docker?
※Kubernetes指南開源電子書
※[52ABP實戰課程系列]Docker&Ubuntu從入門到實戰開課啦~