容器技術開源項目綜述

2015年容器大火,圍繞着容器技術的發展也涌現了許多新項目。同時,許多「老」項目也開始支持容器做爲運行環境。下面介紹這些項目:linux

規範標準類

容器使用了Linux內核的特性,Docker的成功也主要在於其充分挖掘了此類特性。但Docker流行以後,社區開始思考怎麼定義一套完整的容器規範標準,使容器的規範再也不侷限於Docker。同時,Docker僅僅定義了一個容器,多容器的互聯也須要規範標準。下面提到的項目是目前主流的標準,有的並不是爲容器而生,但也在爲容器規範化作出努力。git

OCFgithub

OCF(Open Container Format)是由OCI(Open Container Initiative)發佈的一套容器規範和運行時環境,其初步版本基於Docker鏡像和運行時,可是最終目的是定義一套不受任何軟硬件平臺、不受任何公司和項目束縛的容器標準。OCI由各大廠商組成,包括谷歌、紅帽、華爲等。OCF對標準容器規範指定了5條規則:redis

  • 標準化操做:例如,建立容器、刪除容器、打包容器等操做都必須標準化;docker

  • 內容無關性:無論容器內部內容是什麼,上述操做不能有任何行爲上的變化;json

  • 平臺無關性:在任何OCI支持的平臺上,上述操做都必須可以無差異執行;ubuntu

  • 爲自動化而設計:標準容器是爲自動化而生,其規範必須知足自動化條件;安全

  • 企業級交付:標準容器須要適用於企業級流水線交付任務。服務器

下面簡要介紹OCF標準。目前,OCI定義一個容器包含以下內容:網絡

  • config.json

  • runtime.json

  • rootfs/

config.json表示與容器相關的配置,例如啓動容器以後執行的命令,容器的環境變量等
runtime.json表示與host相關的配置,例如對cgroup、namespace的支持
rootfs表示容器可見的根目錄,即容器中的「/」目錄。OCF對其內容不做約束,常見的子目錄有lib, bin等等。

任何基於OCF規範實現的命令行工具,均可以解析上述內容並管理容器,例如runC(click here),TODO。

目前爲止,OCI主要精力集中在容器運行環境,以後,OCI還將對容器打包、驗證、分發等模塊進行標準化。總而言之,OCI是繼Docker大火以後,社區對容器標準的一種嘗試,如今已經獲得很是多大公司的承認。

appC

appC是CoreOS提出的容器運行標準,早於OCF標準。CoreOS目前是OCI成員之一,在大力推動OCI的發展,appC和OCI最終可能會合併爲一個標準。不一樣於OCI,appC更加成熟,其內容除了容器運行時環境,還包括:

  • 打包規範:appC定義瞭如何將一個應用打包(tar文件),如何保持環境變量、掛載點等內容。相比之下,OCF僅定義了目錄結構。

  • 鏡像驗證:appC定義瞭如何驗證鏡像內容未被修改過,如何保證鏡像安全傳輸;

  • 鏡像傳輸:appC定義了鏡像傳輸的機制,包括https, bittorrent等,這一點與Docker的centralized hub有明顯的區別。

目前基於appC規範已經有很多實現,如Jetpack, Kurma, rkt等。其中rkt是CoreOS對appC的標準實現。

Nulecule

Docker對應用的打包方式僅僅侷限於單個容器層面,咱們可使用Dockerfile描述一個容器配置,而後打包、分發鏡像,以後該容器即可以在任何Linux機器上運行。可是,Docker缺乏一個多容器運行的標準:既如何描述一個由多容器組成的應用。目前一些基於Docker的集羣管理系統已經可以支持多容器的部署,好比Docker Swarm,Kubernetes,可是這些系統並無定義一個標準的、通用的、可移植的格式。此外,此類系統的特色是將多容器應用的部署當作系統的狀態,即他們更多的是強調應用的調度、互聯、監控,而非應用的部署。缺乏複合應用的支持,使Docker的許多特色黯然失色,由於實際生產環境中的應用必然是由多應用構成的。例如:咱們如今能夠很方便地部署一個redis容器,可是部署redis cluster容器很困難,更不用說基於redis cluster的應用。

紅帽公司在2015年提出了Nulecule,該項目定義了一個多容器應用部署的規範,包括應用的元數據、依賴、參數配置等等。應用發佈者只須要依照Nulecule的規範提供應用的構成方式,而後將此構成方式打包成Docker鏡像發佈。Nulecule的打包方式能夠參考:點擊這裏。 具體來說,Nucecule包括如下文件:

|- Dockerfile
|-artifacts
│   └── kubernetes
│       |- pod.json
│       └── service.son
|- Nulecule
└── README.md

Dockerfile將該目錄全部文件打包成Docker鏡像;
Nulecule文件是具體的應用描述,例如每一個組件的容器鏡像,還包括上面提到的依賴、參數配置等;
artifacts目錄包括底層集羣管理系統所使用的配置文件。

Nulecule自己只是一個規範文檔,紅帽公司基於Nulecule實現了Project Atomic,包括命令行工具atomic。運行一個應用和運行一個容器的方式幾乎相同,例如:使用下述命令便可啓動一個應用:「atomic run company/myapp:v0.1」。其中鏡像company/myapp:v0.1爲前文提到的打包後的Docker鏡像。

TOSCA

TOSCA(Topology and Orchestration Specification for Cloud Applications),是OASIS維護的一套用於描述應用和基礎設施的標準,包括服務組件類型、組件關係、操做方式(例如,部署,補丁,關機)等等。這些描述獨立於建立服務的供應商、任何特定的雲服務提供商或託管服務的技術。採用TOSCA標準的項目主要有OpenStack Heat,Cloudily等。

TOSCA並不是爲容器而生,有人將TOSCA和Nulecule作對比,認爲Nulecule能夠粗略地理解成容器版的TOSCA 。儘管有類似之處,但TOSCA包含了大量規範細則,涉及面很是廣。

Cloud Native

通過長期發展,雲計算領域逐漸認識到應用架構模式已經成爲雲計算髮展的瓶頸,所以,國外幾乎全部互聯網公司聯合成立了Cloud Native Computing Foundation,來促進雲計算的發展,旨在提升企業對上述模式的採納程度。簡單來說,cloud native指的是:

  • 容器爲載體:使用容器做爲應用運行、交付的載體,能夠提升開發效率、增大代碼重用率、簡化部署等;

  • 動態管理:創建一套中心管理系統(私有云或公有云)來動態調度容器、機器資源,提升運維效率,機器使用率;

  • 微服務架構:利用服務依賴解耦合來提升敏捷性,下降代碼維護開銷。

項目類

本節綜述了目前開源社區和互聯網公司圍繞容器技術開發的相關項目。這裏只列舉出了較爲完善和流行的項目。

  1. Docker Machine
    Docker Machine是Docker公司爲解決Docker安裝、環境配置等問題而開發項目,如今已經支持10餘種雲平臺和虛擬機軟件,包括AWS、OpenStack、VirtualBox等。建立一個支持Docker的機器只須要使用命令:「docker-machine create –d virtualbox default」 。Docker Machine屏蔽了底層資源的複雜性,使得開發人員能夠自動化建立、刪除機器資源,儘量地避免在平臺差別性上消耗精力。

  2. Swarm
    Swarm是Docker公司爲解決容器集羣化而開發的項目。Swarm將多臺主機抽象成一臺主機,用戶能夠像使用一臺主機般使用Docker。例如,當使用命令「docker run app」時,Swarm會根據集羣狀態將容器調度到一臺遠程的服務器運行,用戶一樣可使用「docker ps」來查看當前容器狀態。對於用戶而言,Swarm的調度是透明的。Swarm極大程度地兼容了Docker的API,同時有效地調度集羣資源,向容器集羣化邁出了一大步。Swarm還在不斷開發中,須要解決容器互聯、數據共享等迫切問題。

  3. Compose
    Compose是Docker公司解決容器編排的項目,其前身是Fig項目。Compose解決的問題相似Nulecule規範,既如何部署多容器應用。不論是Docker自己也好,Machine、Swarm等項目也好,都集中在了單容器應用,Compose很大程度上是對前面項目的補充。用戶向Compose提交一個yaml文件,包含全部容器的配置,例如各自的端口、容器互聯信息等;Compose根據該文件內容,啓動容器。Compose的具體格式,能夠參考:https://docs.docker.com/compo...

  4. Mesos
    Mesos是一套資源管理與調度平臺,目前能夠支持上千臺機器的管理任務。Mesos對資源的管理方式是獨有的兩層調度:Mesos核心調度器負責管理全部機器資源,併爲上層Framework提供計算資源。Framework是第二層調度器,它根據核心調度器提供的資源判斷是否知足需求,若是知足需求,則運行Framework所管理的任務;不然從新像核心調度器申請資源。常見的Framework有Marathon, Chronos,分別負責長時間運行的服務和Cron任務,其餘Framework還包括經常使用的大數據平臺,例如Spark、Hadoop等。

  5. Kubernetes
    Kubernetes來自於Google內部的大規模集羣管理工具Borg,根據官方說法「Kubernetes表明了Google過去十餘年設計、構建和管理大規模容器集羣的經驗」。簡單地說,Kubernetes是一個管理跨主機的容器化應用的系統,支持多容器部署、高可用性、應用彈性伸縮、跨主機網絡、負載均衡、服務發現等應用級功能,同時支持集羣自恢復機制、資源調度、資源隔離、監控等集羣級功能。Kubernetes是目前惟一遵循「一切皆容器」的項目,既全部功能都是基於「應用容器化」實現,並穩定而快速地發展着。

  6. Hyper
    Hyper是HyperHQ公司發佈了的一個開源項目,初衷是結合Docker容器和虛擬機的優勢,能夠在hypervisor上運行Docker鏡像的引擎。根據Hyper官方的說法,他們與Docker的核心區別在於Hyper沒有使用Container技術,而是經過VM直接運行Docker鏡像,是一個徹底基於虛擬化的解決方案。

  7. Containerd
    Containerd是docker公司開源項目,旨在爲runC提供守護進程。Containerd沿襲了docker C/S的結構,server守護進程的核心是一個eventloop,負責監聽容器的建立,銷燬,快照等事件;client名爲ctr,經過gRPC與server通訊。Containerd還處在很是早期的階段,功能還並不完善。docker公司發佈該項目的主要是代表其對容器生態環境的支持,也同時汲取runC高級特性對docker進行互補。

  8. Clear Container
    Clear Container是由intel推出的Clear Linux( Clear Linux是Intel提供的面向雲場景的linux發行版)中的一項技術, 經過將虛擬機和容器結合起來,旨在提供安全容器。官方宣稱目標是讓用戶能夠充分使用虛擬機的隔離,同時擁有容器的部署能力。

最小OS

  1. RancherOS
    RancherOS是Rancher Labs的一個開源項目,其宗旨是開發一個支持docker的最小化操做系統。在RancherOS中,全部應用都採用容器,包括系統程序udev, rsyslog等;同時,RancherOS用docker daemon取代了傳統的初始化系統如sysvinit、systemd。承載初始化任務的docker daemon稱爲系統Docker,該系統docker會建立一個特殊的系統服務容器,即用戶Docker,來負責管理用戶的docker容器,避免了用戶對系統docker容器的直接操做。具體系統結構能夠參加github項目主頁:https://github.com/rancher/os

  2. CoreOS
    CoreOS自己是Linux的一個發行版,但與其餘發行版(如Centos、Ubuntu)有着很大的區別:CoreOS是爲容器集羣而生。不一樣於許多基於Linux作容器管理、編排系統的項目,CoreOS將這些功能併入了操做系統中。這樣,每一個裝有CoreOS的主機就能夠隨時隨地加入一個CoreOS集羣而不須要額外配置。對開發人員而言,不管集羣中有多少CoreOS主機,操做方法都是相同的。CoreOS主要開發了兩個項目來達到這一目的:etcd和Fleet。etcd是分佈式的鍵值存儲系統,主要負責CoreOS集羣中節點間的服務發現和配置共享;etcd提供多種功能來保證集羣的高可用性。Fleet是分佈式的systemd系統。對用戶而言,與操做單機systemd無差異,fleet會將用戶的systemd unit動態分發到集羣中。

  3. Project Atomic
    Project Atomic是紅帽公司開發的操做系統,專門爲運行容器而做了優化。Project Atomic採用docker運行容器、kubernetes管理容器,使用systemd作系統服務,rpm-ostree作系統包管理。其中rpm-ostree實現了Atomic升級,是紅帽主推的功能之一。它的核心原理是升級操做系統是原子操做。Atomic會將須要升級的內容保存在專門的目錄,分開存儲,如此以來,Atomic能夠將操做系統的變動進行版本控制,當出現問題,能夠快速回滾到上一個版本。

  4. Ubuntu Core
    Ubuntu是一個專爲雲平臺和智能設備打造的全新ubuntu操做系統。Canonical公司對Ubuntu Core的核心優點作出如下幾點評論:安全:Snappy應用受Canonical的AppArmor內核安全系統限制,該系統提供了嚴格的、基於MAC的隔離和人性化的安全配置文件。可靠性:Snappy能夠提供可靠的更新,在自動修復安全問題的同時,它還可以更快地更新雲上的服務器。更好的開發體驗:建立snappy Ubuntu應用比傳統打包方式簡單許多。擴展性:Ubuntu Core支持許多模塊化框架,它們能夠由與Canonical合做的供應商提供。ubuntu core包含四層:Application, Framework, Ubuntu Core和Enablement層。Application層將全部應用進行了隔離,所以用戶能夠下載安裝任意的應用;fromework曾用來擴張ubuntu core,例如docker便是ubuntu core中的一個framework,爲ubuntu core提供運行容器的框架。Ubuntu Core層即Canonical提供的最小OS,用戶能夠經過snappy命令行安裝多個ubuntu core,來對系統進行原子更新。Enablement層是硬件層,由設備提供商或者Canonical公司提供。Canonical公司有意將snappy安裝模式引入到新的ubuntu桌面系統,使snappy包管理和debian packages (deb)共存。至因而否snappy會代替dpkg,還有待時間的考量。

  5. Microsoft Nano
    Nano是Windows Server帶來一個全新的Nano Server選項。這是微軟配合Docker所產生的一個底層的OS. 據微軟稱,Nano Server體積很是苗條、極爲精簡,極佳優點,剝離了GUI,專一於雲基礎設施、雲應用程序以及容器。

  6. VMware Photon
    Vmare Photon是Vmware爲vSphere而優化的Linux發行版,專門爲運行容器而生,支持多項容器技術如docker, rkt和pivatal garden container。Vmware Photon的設計也遵循了其餘最小化OS,具備運行快,體積苗條,強化容器安全等優勢。Photon的主要使用對象是採用了Vmware虛擬化技術的客戶 - Photon可使他們輕鬆地在已有的基礎設施中運行容器,並獲得企業級的支持。

原文做者:

才雲科技首席技術官 鄧德源

曾爲美國谷歌(Google)集羣管理組核心成員(Cluster Management Team),主要參與開發集羣管理系統:該系統爲谷歌全部運維工程師提供統一的集羣管理入口,是谷歌自動化運維的重要組成部分,其主要職責:管理運維工程師提交的生產環境變動請求,自動化風險分析,自動化生產環境準備工做,以及各類集羣容錯處理。此係統保證了系統升級、軟硬件錯誤等均能及時被發現並處理,保證谷歌集羣能24/7小時不間斷工做。在谷歌期間做爲核心成員參加了開發基於容器集羣的谷歌開源項目(Kubernetes),一度成爲全球前十的貢獻者和貢獻最高的華人。該項目將谷歌多年內部使用容器的經驗以開源的形式呈現給全部開發者,被稱爲谷歌用來顛覆現有云計算市場和技術,在谷歌內部受到極高的重視和優先級,在開源和雲計算社區也得到了極高地反響。
於2013年獲美國頂級計算機學府Carnegie Mellon University (CMU)大學電子與計算機工程學位,專修操做系統、分佈式計算等方向。2011年畢業於電子科技大學機械與自動化專業。於2010年參與亞太機器人大賽,表明電子科大獲全國第一名,後表明中國隊在埃及獲金牌。

(若是須要轉載,請聯繫咱們哦,尊重知識產權人人有責;)

相關文章
相關標籤/搜索