摘要:年容器大火,圍繞著容器技術的發展也涌現了許多新項目。項目類本節綜述了目前開源社區和互聯網公司圍繞容器技術開發的相關項目。是公司開源項目,旨在為提供守護進程。
2015年容器大火,圍繞著容器技術的發展也涌現了許多新項目。同時,許多“老”項目也開始支持容器作為運行環境。下面介紹這些項目:
規范標準類容器使用了Linux內核的特性,Docker的成功也主要在于其充分挖掘了此類特性。但Docker流行之后,社區開始思考怎么定義一套完整的容器規范標準,使容器的規范不再局限于Docker。同時,Docker僅僅定義了一個容器,多容器的互聯也需要規范標準。下面提到的項目是目前主流的標準,有的并非為容器而生,但也在為容器規范化做出努力。
OCF
OCF(Open Container Format)是由OCI(Open Container Initiative)發布的一套容器規范和運行時環境,其初步版本基于Docker鏡像和運行時,但是最終目的是定義一套不受任何軟硬件平臺、不受任何公司和項目束縛的容器標準。OCI由各大廠商組成,包括谷歌、紅帽、華為等。OCF對標準容器規范指定了5條規則:
標準化操作:例如,創建容器、刪除容器、打包容器等操作都必須標準化;
內容無關性:不管容器內部內容是什么,上述操作不能有任何行為上的變化;
平臺無關性:在任何OCI支持的平臺上,上述操作都必須能夠無差別執行;
為自動化而設計:標準容器是為自動化而生,其規范必須滿足自動化條件;
企業級交付:標準容器需要適用于企業級流水線交付任務。
下面簡要介紹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大火之后,社區對容器標準的一種嘗試,現在已經得到非常多大公司的認可。
appCappC是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的標準實現。
NuleculeDocker對應用的打包方式僅僅局限于單個容器層面,我們可以使用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鏡像。
TOSCATOSCA(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指的是:
容器為載體:使用容器作為應用運行、交付的載體,可以提高開發效率、增大代碼重用率、簡化部署等;
動態管理:建立一套中心管理系統(私有云或公有云)來動態調度容器、機器資源,提高運維效率,機器使用率;
微服務架構:利用服務依賴解耦合來提高敏捷性,降低代碼維護開銷。
項目類本節綜述了目前開源社區和互聯網公司圍繞容器技術開發的相關項目。這里只列舉出了較為完善和流行的項目。
Docker Machine
Docker Machine是Docker公司為解決Docker安裝、環境配置等問題而開發項目,現在已經支持10余種云平臺和虛擬機軟件,包括AWS、OpenStack、VirtualBox等。創建一個支持Docker的機器只需要使用命令:“docker-machine create –d virtualbox default” 。Docker Machine屏蔽了底層資源的復雜性,使得開發人員可以自動化創建、刪除機器資源,盡可能地避免在平臺差異性上消耗精力。
Swarm
Swarm是Docker公司為解決容器集群化而開發的項目。Swarm將多臺主機抽象成一臺主機,用戶可以像使用一臺主機般使用Docker。例如,當使用命令“docker run app”時,Swarm會根據集群狀態將容器調度到一臺遠程的服務器運行,用戶同樣可以使用“docker ps”來查看當前容器狀態。對于用戶而言,Swarm的調度是透明的。Swarm極大程度地兼容了Docker的API,同時有效地調度集群資源,向容器集群化邁出了一大步。Swarm還在不斷開發中,需要解決容器互聯、數據共享等迫切問題。
Compose
Compose是Docker公司解決容器編排的項目,其前身是Fig項目。Compose解決的問題類似Nulecule規范,既如何部署多容器應用。不管是Docker本身也好,Machine、Swarm等項目也好,都集中在了單容器應用,Compose很大程度上是對前面項目的補充。用戶向Compose提交一個yaml文件,包含所有容器的配置,例如各自的端口、容器互聯信息等;Compose根據該文件內容,啟動容器。Compose的具體格式,可以參考:https://docs.docker.com/compo...
Mesos
Mesos是一套資源管理與調度平臺,目前可以支持上千臺機器的管理任務。Mesos對資源的管理方式是獨有的兩層調度:Mesos核心調度器負責管理所有機器資源,并為上層Framework提供計算資源。Framework是第二層調度器,它根據核心調度器提供的資源判斷是否滿足需求,如果滿足需求,則運行Framework所管理的任務;否則重新像核心調度器申請資源。常見的Framework有Marathon, Chronos,分別負責長時間運行的服務和Cron任務,其他Framework還包括常用的大數據平臺,例如Spark、Hadoop等。
Kubernetes
Kubernetes來自于Google內部的大規模集群管理工具Borg,根據官方說法“Kubernetes代表了Google過去十余年設計、構建和管理大規模容器集群的經驗”。簡單地說,Kubernetes是一個管理跨主機的容器化應用的系統,支持多容器部署、高可用性、應用彈性伸縮、跨主機網絡、負載均衡、服務發現等應用級功能,同時支持集群自恢復機制、資源調度、資源隔離、監控等集群級功能。Kubernetes是目前唯一遵循“一切皆容器”的項目,既所有功能都是基于“應用容器化”實現,并穩定而快速地發展著。
Hyper
Hyper是HyperHQ公司發布了的一個開源項目,初衷是結合Docker容器和虛擬機的優點,可以在hypervisor上運行Docker鏡像的引擎。根據Hyper官方的說法,他們與Docker的核心區別在于Hyper沒有使用Container技術,而是通過VM直接運行Docker鏡像,是一個完全基于虛擬化的解決方案。
Containerd
Containerd是docker公司開源項目,旨在為runC提供守護進程。Containerd沿襲了docker C/S的結構,server守護進程的核心是一個eventloop,負責監聽容器的創建,銷毀,快照等事件;client名為ctr,通過gRPC與server通信。Containerd還處在非常早期的階段,功能還并不完善。docker公司發布該項目的主要是表明其對容器生態環境的支持,也同時汲取runC高級特性對docker進行互補。
Clear Container
Clear Container是由intel推出的Clear Linux( Clear Linux是Intel提供的面向云場景的linux發行版)中的一項技術, 通過將虛擬機和容器結合起來,旨在提供安全容器。官方宣稱目標是讓用戶可以充分使用虛擬機的隔離,同時擁有容器的部署能力。
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
CoreOS
CoreOS本身是Linux的一個發行版,但與其他發行版(如Centos、Ubuntu)有著很大的區別:CoreOS是為容器集群而生。不同于許多基于Linux做容器管理、編排系統的項目,CoreOS將這些功能并入了操作系統中。這樣,每個裝有CoreOS的主機就可以隨時隨地加入一個CoreOS集群而不需要額外配置。對開發人員而言,無論集群中有多少CoreOS主機,操作方法都是相同的。CoreOS主要開發了兩個項目來達到這一目的:etcd和Fleet。etcd是分布式的鍵值存儲系統,主要負責CoreOS集群中節點間的服務發現和配置共享;etcd提供多種功能來保證集群的高可用性。Fleet是分布式的systemd系統。對用戶而言,與操作單機systemd無差別,fleet會將用戶的systemd unit動態分發到集群中。
Project Atomic
Project Atomic是紅帽公司開發的操作系統,專門為運行容器而作了優化。Project Atomic采用docker運行容器、kubernetes管理容器,使用systemd做系統服務,rpm-ostree做系統包管理。其中rpm-ostree實現了Atomic升級,是紅帽主推的功能之一。它的核心原理是升級操作系統是原子操作。Atomic會將需要升級的內容保存在專門的目錄,分開存儲,如此以來,Atomic可以將操作系統的變更進行版本控制,當出現問題,可以快速回滾到上一個版本。
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,還有待時間的考量。
Microsoft Nano
Nano是Windows Server帶來一個全新的Nano Server選項。這是微軟配合Docker所產生的一個底層的OS. 據微軟稱,Nano Server體積非常苗條、極為精簡,極佳優勢,剝離了GUI,專注于云基礎設施、云應用程序以及容器。
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年參與亞太機器人大賽,代表電子科大獲全國第一名,后代表中國隊在埃及獲金牌。
(如果需要轉載,請聯系我們哦,尊重知識產權人人有責;)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26521.html
摘要:效果圖為了讓效果更明顯,特意設置了兩邊字體大小不同關鍵代碼父容器子容器這里要提一下的是,只對于內聯元素或者內聯內容有效,比如說為塊級元素標簽設置行高,實際上是為標簽中的內聯文字設置了行高。允許指定負長度值和百分比值。 前言 先扯一段廢話來引入好了。又很久沒有寫文章了(間接性躊躇滿志,持續性混吃等死),幾個月了登上來看到有人收藏和點贊,感到很慚愧,最近主要精力花費在react和redux...
摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...
閱讀 2154·2023-05-11 16:55
閱讀 3516·2021-08-10 09:43
閱讀 2632·2019-08-30 15:44
閱讀 2452·2019-08-29 16:39
閱讀 594·2019-08-29 13:46
閱讀 2016·2019-08-29 13:29
閱讀 931·2019-08-29 13:05
閱讀 703·2019-08-26 13:51