容器技術已經引起了業內的廣泛關注,有充分的證據表明,容器技術能夠大大提升工作效率。
現在,虛擬化技術已經成為一種被大家廣泛認可的服務器資源共享方式,它可以在按需構建操作系統實例的過程當中為系統管理員提供極大的靈活性。由於hypervisor虛擬化技術仍然存在一些性能和資源使用效率方面的問題,因此出現了一種稱為容器(Container)的新型虛擬化技術來幫助解決這些問題,下面我們來簡單聊聊容器(Container)的發展趨勢。
Docker的價值
- 持續集成&持續交付
- SOA化,微服務化
- 輕量虛擬化
- 軟件交付/變更模式
Docker帶來的變革的意義,不單純是對軟件技術,更是對組織,流程的影響,合理的使用docker能夠讓組織敏捷起來!
Docker & PaaS
- 以容器為單位成為PaaS的共識,基於docker的容器打包和分發有望成為PaaS平臺的標準,docker將大幅拓寬PaaS的應用範圍,並促進PaaS的快速發展
- 第三代PaaS更貼近應用(應用集群管理)也更透明化(完全基於docker,不需要有限的builpack,完全由使用者決定),第二代PaaS也在不斷改進(引進docker,增加應用集群管理)
Docker & IaaS
- OpenStack也在積極引入docker容器
- Nova調度和管理docker
- 通過Heat提供容器的編排調度,但整體上仍然是以資源為中心的調度,是否能夠充分發揮docker的價值,還存在討論與爭議
- 獨立於IaaS的容器集群調度系統(mesos,k8s...)的出現,的到了微軟,紅帽,IBM,VMware,docker,Mesosphere,CoreOS和SaltStack等多家廠商的支持,容器技術已有較完整的技術堆棧,未來獨立的IaaS以及OpenStack可能會被邊緣化。
開源容器虛擬化軟件技術堆棧和陣營
- 倉庫:提供容器倉庫,實現鏡像管理,上傳,下載,容器狀態和性能數據採集/展示
- 資源和集群管理(編排調度):提供資源調度,集群管理,組合部署,服務發現,擴容縮容,多租,支持docker Application依賴關係定義
- 容器引擎,容器網絡:提供容器引擎,容器網絡服務,實現容器異構雲部署適配,網絡隔離,浮動IP等
- 容器OS:提供輕量化的容器操作系統,實現基於容器軟件分發,動態升級等
Docker相關技術成熟度
- docker引擎經過兩年發酵和積累,目前相對成熟,而且有較多實踐案例
- 容器網絡目前熱度最高,業界關注和討論,實踐嘗試較多,正在快速催熟
- 容器編排雖然目前熱度很高,但是由於其技術複雜度及對傳統管理系統的替代/衝擊,所以成熟度並不高,而且存在一些產品化瓶頸(性能和算法),業界有參考其原理的一些實踐,但k8s本身並沒有真正的商用案例,成熟週期預計較長;但選擇性使用部分技術相對成熟,無爭議的組件,可以加速產品化節奏。
- 基於k8s支持Spark,Hadoop體現了k8s在生態上的積極進取和野心,未來可能成為大數據領域與mesos/yarn分庭抗禮的重要技術選擇;
容器技術加速了企業應用Cloud Native化,伴隨企業應用逐漸向容器遷移,用戶使用雲計算方式發生變化,從原有以VM資源為核心,轉變為以應用容器及其編排管理調度系統為核心。
Docker Swarm
Docker swarm是Docker公司推出的Docker容器原生額集群服務
- 將一群docker宿主機變成一個單一的虛擬的主機
- 負責容器集群管理,優化資源利用率,維護集群狀態
- 像使用docker一樣使用swarm
- 原生docker集群服務,前端直接使用標準docker API,docker client可以直接與swarm相連(透明,兼容)
- 發現服務(docker主機)
- 使用了docker hub內置的發現服務(token service),與hub綁定
- 調度策略
- swarm scheduler支持三種調度策略:spread,binpack,random
- Label和過濾
- swarm通過主機定義的label,以及docker運行時的filter來過濾主機
Swarm優勢
- 輕,簡單,易用
- Docker client兼容接口,透明演進
Swarm缺點
- hub發現服務綁定
- 仍然偏Resource Centric,包括filter和strategy,仍然是資源維度來描述應用
- 功能擴展依賴社區
Docker Compose
docker compose為開發者提供了應用組合的能力,旨在讓用戶很容易從眾多容器(比如前端,數據庫和負載均衡等組件)構建一個複雜的分佈式應用程序。這些應用基於獨立於任何底層基礎設施的分散的,可交互的docker容器之上構建
定義好應用的YAML文件後,運行工作將簡單到一個命令
Kubernetes
Kubernetes是Google開源的容器集群管理系統,Google內部採用的是Borg以及基於lxc自己構建的容器;
下一代集群管理系統OMEGA(共享狀態的調度架構)目前仍然停留在論文階段;
- 分佈式應用的統一描述(POD,Service,App)
- 分佈式應用的資源選擇和調度(調度算法,策略,集群管理)
- 分佈式應用的監控(cAdvisor),SLA保障(Replication)
- 分佈式應用的服務發現,服務路由
Kubernetes優勢
- 靈活,完整,可定製
- App Centric(POD/App/Service),服務發現
Kubernetes缺點
- 重,不同管理接口 VS. Docker client
Mesos & Marathon
Mesos是一個統一資源管理和調度系統,如果把雲比作Linux,Mesos相當於distributed system kernel,Mesos內核運行在每臺機器上,通過Framework,提供誇整個數據中心和雲環境進行資源管理和調度的API;
- Mesos為其上各種應用提供集群內資源調度,提高資源效率,降低相互影響
- Mesos Slave上報資源給Master,由Master分配給應用,應用決定接受與否,接受後通過Master向Slave發佈任務
- 嚴格的將,Mesos是偏任務和資源的調度系統,並不理解應用本身
- 傳統的,Mesos可用於Hadoop或者MPI
Marathon是Mesos之上的一個長生命週期應用的調度框架(Scheduler),這個應用並不限制於web應用或其他應用。
- 基於Mesos上提供應用的調度管理能力
- 支持簡單的dependency,可以據此對不同應用進行有序的啟動停止和升級
- 可以基於應用狀態/KPI進行應用可靠性管理,監控應用狀態,並保障故障時新建
- 彈性伸縮能力
- 提供部署增強能力,按主機Host和屬性Attribute選擇部署資源
Rancher OS是生產規模中運行docker最小的容器OS
- RancherOS的所有東西都作為docker管理的容器,包括udev和rsyslog
- RancherOS僅僅包括最少運行docker所需要的軟件
- RancherOS二進制下載包只有20MB
- 所有東西都能通過docker動態拉取
與CoreOS,Atomic,Photon的主要區別
- CoreOS,Atomic系統是針對企業級應用提供的OS版本,進行了精簡,內置/集成了容器引擎,還集成了容器集群/App管理軟件(Atomic集成了Kubernetes,CoreOS天生就自帶Fleet App管理軟件)
- CoreOS,Atomic和Photon並非完全基於容器,而是基於已實例有OS(sysvinit/systemd)機制,疊加了容器引擎;RancherOS啟動system docker(PID)本身就是docker,取代了(sysvinit和systemd)
- RancherOS遵從最簡單原則,只提供容器引擎,並且整個OS是完全基於容器開發的
Flocker
Flocker面向dockerized應用的開源容器數據卷管理器
- docker自身沒有管理數據卷遷移,數據卷被侷限在單一的服務器上
- Flocker數據集是可以輕便的,可被使用在任何一款容器上,並不需要關心應用集群的容器在哪裡運行
文章如有不妥之處,歡迎指正!謝謝!
閱讀更多 雲計算AND容器技術 的文章