1. 程式人生 > >只有考慮這些關鍵因素,才能跟上Docker為代表的容器時代! – 運維派

只有考慮這些關鍵因素,才能跟上Docker為代表的容器時代! – 運維派

好像一夜之間好多人都突然投靠Docker了,畢竟現在這個技術就是那麼火爆。如果你也想上Docker?先恭喜你,懂得擁抱時代變化,其次確實你有很多細節要考慮。我們來看看Docker的部署經歷,探討下容器技術的實施落地,也順手把不可變部署和部署工具的計劃搞懂。

為什麼會想到用Docker?

這個有很多方面的思考。在LivePerson的評估過程中我就很清楚,倘若對外分享一些對Docker方案的見解,一定能給很多人以啟示。這樣一種基礎架構發生巨大變化的方式,對開發人員,CI,CD,配置,監控,打包,安全以及軟體開發和交付的幾乎任何方面都有很大的影響。所以在這改造發生之前,負責人就應該先去仔仔細細的趟一遍雷,總結好最佳實踐,形成框架專案和模板,這才有助於在轉換新專案時對解決方案的側重執行。將其與現有部署工具整合到現有服務中的挑戰不容小覷。所以,如果你還在躊躇不動,甚至剛開始趟雷,我則非常希望你看到接下來的系列文字,因為它很有可能啟示你接下來的步驟。

當下,docker和kubernetes是容器化部署的主流技術,正是我們評估和執行過的技術。但是場景等有一些差異,但對於任何容器類的解決方案來說,許多見解具備通用性。好了,我們開始深入流程細節。

回顧你青睞容器的原因

這當然最好是從必要動機開始。不過要是你已經為部署使用了配置工具,而且很滿意,那就該問清楚自己:為什麼要替換現有方式而採用基於容器化部署的方法?這樣吧,我先給你總結兩個理由:
  1. 你是一個開發者,推崇不變性和功能編排的概念。這種情況下,容器允許你把這些思維糅合到部署檔案中,即容器化部署允許你以更容易和有意思的方式得到不可變部署。而且容器如果設定只讀,更接近純部署概念,該換換,修改都省了。
  2. 採用基於容器化的部署方式可以讓你更接近持續部署的實現。在容器火起來之前的好書《持續交付:通過構建,測試和部署自動化釋出可靠的軟體》裡,作者眼中成功的持續部署就有許多元件在基於容器的部署裡出現過,這包括:自動化構建的所有方面,部署管道,開發人員測試者之間的協同操作,管理基礎架構,依賴關係,審計等。這裡面就有許多都是Docker基礎設施或周邊專案的一部分。
不過,任何技術都不存在所謂的多方面完美。你用了容器,那就得試著接受一些該技術在某個階段難以克服的短板。可能有人認為用了Docker牌神油就能提高伺服器效能,真的嗎?我舉個栗子,如果一個容器表現不好(差的意思),那麼這個容器就會耗著你的process,然後死迴圈。在這種不太多見的情況下,由於虛擬機器們耗了大量物理機器記憶體,導致“Docker牌神油萬能論”的高調破產。不過,如果此時如果跑的是更輕量級的程序,在資源共享上表現就會更好一些,也能減少一些不必要的尷尬。

是否在準備開展不可變部署?

綜合上文,我們現在有了採取容器部署的動機。那麼現在我們來檢查下你是否已準備好搬家到容器。這裡得先透徹若干問題以評估準備情況:
  1. 你是從頭開始安裝應用程式的嗎?生產環境中呢?
  2. 如果沒有,你是否已應用部署到虛擬機器,或者更好的雲虛擬機器?
  3. 部署/生產團隊在不聯絡相關團隊的情況下能新增你的應用新例項嗎?
  4. 如果有人要重啟你的應用,它會照常執行嗎(這點通常沒有問題)?
如果你針對上面的問題答過“是”,注意,這裡是“答過”即可,那麼開始容器化部署就沒太大阻力;反之就不是,而你那時應首先檢視更新你的部署,或者在準備基於容器做部署時就要做更多的工作。這裡注意下,如果你打算用容器化部署來更改環境,那這個方向/想法本身就不靠譜了。

你對現有工具有什麼想法或計劃?

大多數情況下,如果你已經用了像puppet,rpm等部署工具…
  1. 這很好,意味著你現有的部署很接近完全自動化(或已經實現完全自動化)。
  2. 也意味著你可以做出選擇。轉儲它們並使用單個容器包構建器(Dockerfile),或者繼續使用rpm指令碼和Docker指令碼,以及puppet指令碼。
個人建議,如果你可以使用單一指令碼語言,那把整件事簡單化。如果已經有了很多基礎架構,rpm的去留問題就多琢磨琢磨。畢竟,如果繼續用rpm做大部分打包任務,這至少意味你在即使沒有Docker的情況下也應該還是希望能夠正常執行安裝。對於puppet,你應該要傾向於考慮通過Docker指令碼及外設指令碼(即k8s)全部替換。
文章來自微信公眾號:DevOps研究院