閱讀264 返回首頁    go 阿裏雲 go 技術社區[雲棲]


細數阿裏雲在使用 Docker 過程中踩過的那些坑

755ce786979fa38d9c4a7f54c65571a05ac53eaf

昨天下午道哥在微信上丟給我一條新聞,看看,我們阿裏雲支持 Docker 企業版了。我打開一看,果然,阿裏雲發布了飛天敏捷版,開始支持企業級的 Docker 容器。

美國中部時間4月19日,阿裏雲在容器技術大會 DockerCon 2017上正式推出了 Apsara Stack Agility,也就是飛天的敏捷版。Docker 公司首席執行官 Ben Golub 在大會上宣布了 Apsara Stack Agility 的正式發布,這也是國內第一個支持 Docker 官方企業版(Enterprise Edition,EE)的容器類產品,可以部署在企業自有數據中心環境內,特別適用於企業專有雲及混合雲場景。

Ben 在演講中表示,阿裏巴巴電商平台已經全麵容器化,能夠部署和管控超過幾十萬容器規模,在雙11狂歡節穩定支撐了每秒175000次的訂單交易。阿裏雲不但是 Docker 的首家業務合作夥伴,同時也在為 Docker 帶來大規模容器應用的實踐經驗。深受開發人員喜愛的 Docker Hub 服務將於近期在國內推出。

Docker 及其創始人有著一個峰回路轉的故事。Docker 是一種容器技術,但是容器技術由來已久,比如 Linux Containers,曆史悠久,爺爺輩的技術,但是真正讓容器進入人們視野的,是 Docker。


2010年,幾個年輕人在舊金山成立了一家做 PaaS 平台的公司,起名為「dotCloud」。dotCloud 主要是基於 PaaS 平台為開發者或開發商提供技術服務。什麼是 PaaS 呢?PaaS 的全稱是 Platform as a Service,也就是平台即服務,無論你選擇什麼技術棧,PaaS 都會為你提供相關的配套設置,包括語言環境、運行環境、存儲和各種基礎服務。

dotCloud 花費了大量時間把手工工作和重複勞動抽象成組件和服務,並放到了雲端,另外,它還提供了各種監控、告警和控製功能,方便開發者管理和監控自己的產品。PaaS 的概念雖好,但是由於認知、理念和技術的局限性,早期市場的接受度並不高,規模也不夠大。雖然 dotCloud 在2011年初拿到了1000萬美元的融資,但依然舉步維艱。

在這種情況下,dotCloud 的創始人 Solomon Hykes 做了一件漫不經心的小事,他把 dotCloud 的核心容器引擎開源了。這個基於 Linux Container 技術的核心管理引擎一經開源立刻得到了「業界」的熱烈追捧,容器管理引擎大大降低了容器技術的使用門檻,輕量級虛擬化,可移植,語言無關,寫了程序扔上去做成鏡像可以隨處部署和運行,開發、測試和生產環境徹底統一了,還能進行資源管控和虛擬化。程序員們流著口水驚唿,太方便了,太方便了。引擎的名字叫做 Docker,以 Go 語言寫成。

這個結果大大出乎 dotCloud 創始人的意外,從此以後,他們開始專心研發 Docker 產品和維護相關社區,2013年10月 dotCloud 公司更名為 Docker 股份有限公司,從此王子和公主過上了幸福而快樂的生活。


Docker 的技術特點現在大家都很清楚了,比如它能夠以容器的方式自動部署任何應用;容器是一係列進程的集合;基於 namespaces 和 cgroups 實現容器資源的隔離和限製;基於 copy-on-write 技術創建文件係統,分層、快速、占用空間少;提供交互式 shell 和 remote api 等等。但是,與任何一門新興技術的興起一樣,Docker 一路走來,給工程師和技術嚐鮮者挖坑無數,有進程管理的問題,資源隔離的問題,內存泄露問題,包依賴問題,網絡問題等等。

0feea4c55feddbdf6ca815c1a8bee990700a47fd

基於這些考量,我很想知道阿裏雲在這方麵到底遇到了那些坑,解決了什麼樣的技術問題。於是有了我和阿裏雲容器服務負責人易立的一段對話:

阿裏在使用 Docker 技術的時候碰到過那些坑,解決了哪些業務問題,對 Docker 做了什麼改進呢?

Docker 的版本迭代速度很快,在快速發展的同時,必然會給使用者帶來很多挑戰,比如:

  • Docker Engine 和 Swarm 在可伸縮性上的問題。在早期版本中,集群規模比較大的情況下 Swarm 調度會變很慢,CPU 利用率非常高,同時 Docker Engine 中 libnetwork 對 etcd 的壓力會非常大,也存在死鎖的風險。我們對此做了大量改進,若幹個 PR 已經被合並到 Docker 主幹,大大提升了 Docker 集群的伸縮性。
  • 阿裏雲服務的集成和優化。在雲端 Docker 環境的部署和線下有一些不同之處。比如,我們為阿裏雲 VPC 提供了符合 CNM 網絡規範的容器網絡驅動,其帶寬和時延都優於原生的 overlay 網絡,可以方便地實現混合雲環境中容器的互聯互通。為了便於 K8S/Mesos 用戶在阿裏雲部署,我們也將其貢獻給了開源的 Flannel 項目。
  • 內核兼容性。長時間壓測容器還是會遇到各種奇怪的問題。阿裏雲容器服務為用戶提供經過兼容性測試的 OS 和 Kernel 版本。由於社區的努力,目前主流操作係統 CentOS 7.3和 Ubuntu 16.04/14.04的最新版本內核對容器兼容性的支持也越來越好。
  • Docker Hub 訪問是國內開發者普遍的痛,阿裏雲提供了免費的加速器服務和鏡像倉庫服務,可以幫助用戶方便地拉取和構建鏡像。另外也為 Docker 社區貢獻了 Docker Registry 的阿裏雲 OSS 存儲後端,支持海量數據的低成本鏡像存儲,同時修複不少 Registry 相關的性能和兼容性問題,這些也都回饋給社區了。

使用阿裏雲提供的 Docker 服務和自建 Docker 環境有什麼不同?

Docker Engine 在單機上使用很方便,但要部署出一個可用於生產的集群,有很多問題需要考慮。跟手工部署 Docker Engine 和 Swarm 相比,使用阿裏雲容器服務有下列優勢:

  • 一鍵部署安全的集群。阿裏雲容器服務幫助用戶自動完成 ECS 創建、安全組配置、Docker Engine 和 Swarm 部署等繁瑣工作。更加重要的是集群自帶 SSL 證書,且支持證書下載、吊銷等。
  • 針對阿裏雲能力進行了優化和集成,內置了容器在雲上最佳部署和運維實踐:比如支持阿裏雲 VPC/經典網絡/SLB 負載均衡;集成日誌服務 SLS、雲監控;支持阿裏雲 OSS,NAS 的共享數據存儲卷和雲盤等等。
  • 容器服務在兼容原生 Docker 編排技術的同時進行了擴展。
  • 支持GPU/CPU混合的資源調度,可以輕鬆部署深度學習應用。
  • 提供離線應用、定時任務等擴展的調度能力,適應不同應用需求。
  • 支持藍綠發布等多種發布方式,可以更快、更安全地發布應用。
  • 容器啟動順序依賴困擾了很多用戶,我們結合容器的健康檢查,提供了優雅的依賴檢測方案。

共用 Linux Kernel,讓 Docker 安全性先天不足,阿裏是怎麼解決的?

安全性是一個係統性問題,這裏隻針對 runtime 安全說一下。

  • 一方麵,我們可以借助於虛擬化的隔離能力來達到更強的隔離。比如,在阿裏雲容器服務中,集群裏所有 ECS 節點都是同一個用戶的,不會和其他用戶共享資源,這樣避免了用戶間的資源爭搶和安全問題。
  • 另一方麵,在針對需要采用容器進行多租戶支持的場景中,比如我們對容器 User Namespaces 進行了映射,對操作係統配置了 security profile 和內核加固,同時對容器使用的存儲,網絡資源進行了額外限製。這些可以解決限定場景下的安全和資源隔離問題。

提升容器的資源隔離性和安全性,還有很多的路要走。也在和其他團隊配合,在Linux 內核層麵進行探索。任何一項新技術的應用、推廣和普及都需要大量的實踐和改進,一個技術或者環境,能夠在你自己的筆記本上跑起來和投入成千上萬台集群機器中完全是兩個概念。我在錘子科技和極客邦科技的研發和生產環境裏都用到了 Docker 技術,但數據體量和實踐讓我們很難進行類似的改進,因為你正常使用就沒問題啊,隻有數據量足夠大,機器足夠多的時候,很多瓶頸,比如擴展性、安全性、兼容性和長期的可用性才會出現挑戰,如果是提供給別人的商用係統,要求就更多了。

飛天敏捷版充分體現了雲 + 容器的獨特價值。不僅大大了降低容器服務的操作難度,移植性也很強,能在不同環境中進行應用部署。有了它,客戶可以在一組主機上通過 Docker 容器來進行分布式應用的部署、更新和彈性伸縮,輕鬆實現混合雲方案。當業務出現峰值流量時,快速將本地數據中心應用擴展到雲端,利用雲資源更好的進行災備、應對峰值流量。


易立對我說,「除了產品技術層麵的合作,阿裏雲還將加大在社區的投入,並通過一係列技術活動提升中國 Docker 技術和應用的水平。」 

我曾經寫過一句話,大數據量勝於優秀算法,如果數據足夠多,可能產生出意想不到的應用。無論算法好壞,更多的數據總是能夠帶來更好的效果。目前這些數據和機器節點都在中國的大型互聯網公司裏。

算法再好,沒有量,也是無源之水,無本之木。從這個角度看,大型互聯網公司更有責任去推進技術社區的發展,基於數據優勢對開源社區做出更多貢獻。當然,極客邦科技也會在其中發揮重要的作用。


來源:MacTalk 作者:池建強
原文鏈接

最後更新:2017-04-22 13:30:29

  上一篇:go 阿裏NASA計劃“亮劍”:謝崇進和他追求的科學極限
  下一篇:go java基礎之集合類