亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 21971 | 回復(fù): 0
打印 上一主題 下一主題

從容器規(guī)范看Docker和Rocket [復(fù)制鏈接]

論壇徽章:
6
CU大;照
日期:2013-03-14 14:14:08CU大;照
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29處女座
日期:2014-04-21 11:51:59辰龍
日期:2014-05-12 09:15:10NBA常規(guī)賽紀(jì)念章
日期:2015-05-04 22:32:03
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-01-21 09:20 |只看該作者 |倒序?yàn)g覽
在“選擇Docker還是Rocket做容器?為何不選擇兩個(gè)?”一文中,曾提到CoreOS的創(chuàng)始人Polvi和Docker的創(chuàng)始人Sonomon都認(rèn)為,Rocket和Docker沒(méi)有競(jìng)爭(zhēng)性。Docker平臺(tái)是一個(gè)產(chǎn)品,Rocket是一個(gè)組件。企業(yè)可以選擇Docker替代Cloud Foundry,也可以使用Rocket構(gòu)建Cloud Foundry。CoreOS在發(fā)布Rocket時(shí)就指出,Rocket的出現(xiàn)是因?yàn)橛行┤诵枰粋(gè)更“純凈”的容器。換句話說(shuō),Rocket算是“App Container Specification”的標(biāo)準(zhǔn)實(shí)現(xiàn)。本文作者從“App Container Specification”入手,分析了Rocket和Docker在技術(shù)實(shí)現(xiàn)上的不同。以下為原文:
Docker和Rocket,殊途同歸

首先,對(duì)于那些把Docker與Rocket放在一起比較的人,我想勸你們首先適當(dāng)?shù)卣{(diào)查一下。如果有這樣兩個(gè)軟件:一個(gè)已經(jīng)有1年多的歷史,作為一個(gè)開(kāi)源項(xiàng)目由全世界上千的開(kāi)發(fā)者共同參與,并且已經(jīng)或即將在實(shí)際的生產(chǎn)環(huán)境中被部署、測(cè)試;而另一個(gè)軟件則是“新鮮出爐”的。如果這個(gè)較成熟的軟件不是特別爛的話,那么很有可能它就是贏家。

所以,將Docker0.1.1與最近預(yù)發(fā)行的Rocket拿來(lái)比較會(huì)更公平一些。此外, CoreOS的CTO Brandon Philips也多次強(qiáng)調(diào),Docker的一些功能將不計(jì)劃加入到Rocket中——不只是現(xiàn)在,也許永遠(yuǎn)不會(huì)。為什么?因?yàn)镽ocket項(xiàng)目的重點(diǎn),至少目前的情況——不是重新實(shí)現(xiàn)Docker。Rocket是 “App Container Specification”的實(shí)現(xiàn),因此,想比較兩者,最好比較“App Container Specification”和最初的Docker清單或者Docker實(shí)現(xiàn)的其它規(guī)范。

以下的比較都將基于以上共識(shí):
Systemd

通常情況關(guān)于Rocket的討論最多的話題是systemd-spawn或者是 systemd 。 CoreOS已將systemd作為他們Linux發(fā)行版的init系統(tǒng)。他們可以接著使用Init 腳本或者upstar,但是他們選擇使用了將來(lái)會(huì)成為所有主流Linux版本標(biāo)準(zhǔn)的init系統(tǒng)。實(shí)話說(shuō)我并沒(méi)有關(guān)于systemd獨(dú)到的見(jiàn)解,只是讀過(guò)Lennart等人的一些文章。對(duì)于CoreOS來(lái)說(shuō),將systemd作為新的Linux發(fā)行版的init系統(tǒng)的是不明智的。另外,CoreOS已經(jīng)獲得了我的信任,我對(duì)此深信不疑。你可能會(huì)拋出 btrfs與我爭(zhēng)論,但是, 那個(gè)會(huì)很快消失,我希望它會(huì)被修復(fù),或者被其他可靠的方案替換。畢竟穩(wěn)定性比功能更重要。

好吧,讓我們回到問(wèn)題上來(lái)。其中systemd做的或者說(shuō)能夠做的事情多是進(jìn)程管理。你可能會(huì)認(rèn)為,systemd解決這個(gè)問(wèn)題的方式,多少有些重疊了服務(wù)、進(jìn)程管理的概念,并且將一些原本能在PID1之外很簡(jiǎn)單的任務(wù)復(fù)雜化了,但因?yàn)镃oreOS是systemd的忠實(shí)用戶(hù),如果使用其它工具來(lái)實(shí)現(xiàn)反而顯得奇怪。

此外,據(jù)Brandon介紹,Rocket的最初實(shí)現(xiàn)使用systemd-nspawn的原因是他們想用systemd,Systemd-naspawn 已經(jīng)實(shí)現(xiàn),而且正在做他們想做的東西,所以它有助于項(xiàng)目的開(kāi)始。坦率地說(shuō),在0.1.1版本,我并不關(guān)心他們使用的技術(shù),沒(méi)準(zhǔn)以后都會(huì)變的,因?yàn)镽ocket的設(shè)計(jì)是可插拔的。如果你不喜歡systemd-nspawn,可以用你自己的stage1實(shí)現(xiàn),Rocket已經(jīng)提供了詳細(xì)的命令行參數(shù)。

另外需要指出的是,那些認(rèn)為想使用Rocket,就必須運(yùn)行systemd的人就完全錯(cuò)了。Rocket根本不需要systemd。它也能與其它init系統(tǒng),如SysV或upstart配合工作。我在upstart上測(cè)試了Rocket,沒(méi)有遇到任何問(wèn)題。Rocket僅僅是“重用”了systemd和systemd-nspawn,處理stage1和stage2。
App Container

有些人可能還沒(méi)有準(zhǔn)確地理解“App Container Specification”。他們一直在說(shuō)systemd,并說(shuō)Docker是如何好,不需要在容器中用systemd運(yùn)行進(jìn)程。Docker通過(guò)后臺(tái)進(jìn)程管理單進(jìn)程的容器。Docker后臺(tái)進(jìn)程未被寫(xiě)成一個(gè)進(jìn)程管理工具,當(dāng)你的容器停止時(shí),這種設(shè)計(jì)的弊端就會(huì)顯現(xiàn)出來(lái)。你最終要通過(guò)主機(jī)或者容器中的進(jìn)程管理工具來(lái)應(yīng)付它。如果你還沒(méi)有經(jīng)歷過(guò)這樣的事,要么你可能是幸運(yùn)的,又或者沒(méi)有在環(huán)境中運(yùn)行大量的容器。

我們需要進(jìn)程管理,或進(jìn)程管理提供的某些功能。如果讀過(guò)“App Container Specification”,你會(huì)理解這點(diǎn)的。我將其中一部分摘錄如下:

    容器執(zhí)行一個(gè)或多個(gè)應(yīng)用程序,共享PID namespace、network namespace、mount namespace、IPC namespace和UTS namespace。執(zhí)行之前,每個(gè)應(yīng)用程序?qū)㈤_(kāi)始轉(zhuǎn)為(比如chroot)自己特有的讀寫(xiě)根文件系統(tǒng)。容器的定義是,包含一系列應(yīng)該在一起啟動(dòng)的應(yīng)用,以及應(yīng)用與整個(gè)容器的隔離器。

上面明確提到了幾個(gè)進(jìn)程共享Linux的命名空間。換言之,Kubernetes的Pod與以上對(duì)容器的定義很像,我不知道這是否與CoreOS正在積極參與Kubernetes的開(kāi)發(fā)有什么關(guān)系。但Kubernetes Pod是一組容器,而不是容器中的一組進(jìn)程。這讓你能從多個(gè)Docker鏡像組成一個(gè)Pod中獲益。這是App Container Specification定義了 依賴(lài)關(guān)系的地方,所以你的容器可以依賴(lài)于其他容器,因此通過(guò)Stage0創(chuàng)造的最終容器runtime可能是 這樣的。

現(xiàn)在,你已經(jīng)在容器中運(yùn)行多個(gè)進(jìn)程,其中一些可能是后臺(tái)進(jìn)程,并且可能需要被監(jiān)督,你需要一個(gè)進(jìn)程管理器。至今我用過(guò)最好的管理器是runit,但話說(shuō)回來(lái),當(dāng)你已經(jīng)積累了大量關(guān)于systemd的經(jīng)驗(yàn)時(shí),你為什么會(huì)想要寫(xiě)runit腳本或使用其他管理器?如果我是CoreOS,也會(huì)做出一樣的決定——systemd。
Docker和命名空間

現(xiàn)在,讓我們回到Docker。Docker一直倡導(dǎo)一個(gè)容器運(yùn)行一個(gè)進(jìn)程?偟膩(lái)說(shuō),我同意這一點(diǎn),因?yàn)長(zhǎng)inux容器主要是為了實(shí)現(xiàn)主機(jī)的進(jìn)程隔離,而每個(gè)容器運(yùn)行一個(gè)進(jìn)程,會(huì)給你帶來(lái)更多的靈活性和復(fù)合型,獨(dú)立的更新、回滾等,操作更加簡(jiǎn)單。然而,當(dāng)你創(chuàng)建一個(gè)新的Docker容器或事實(shí)上LXC容器,容器被重新分配一套由libcontainer提供的全新的Linux命名空間。實(shí)話說(shuō),我覺(jué)得這有點(diǎn)浪費(fèi)。于Docker還挺有意義,因?yàn)槟阋谝粋(gè)容器中運(yùn)行一個(gè)單獨(dú)的進(jìn)程,并且如果你想提供更通用的進(jìn)程環(huán)境,來(lái)覆蓋大多數(shù)的用例,你可能需要libcontainer高效提供的大量可用命名空間。

只為一個(gè)進(jìn)程創(chuàng)建一組命名空間,增加了內(nèi)核大量的額外管理工作。如果你的主機(jī)上運(yùn)行了很多的容器,可能會(huì)出現(xiàn)內(nèi)核某些方面的瓶頸。你可能會(huì)說(shuō)開(kāi)銷(xiāo)很小,但是為什么非要過(guò)度占用內(nèi)核呢?

因此,為了節(jié)省開(kāi)銷(xiāo),可以共享進(jìn)程之間的命名空間。但是有個(gè)問(wèn)題,如果你開(kāi)始共享命名空間,并且創(chuàng)建它的容器已經(jīng)終止,它會(huì)刪除共享命名空間的所有的進(jìn)程。Kubernetesde在設(shè)計(jì)Pod時(shí),就考慮到這個(gè)問(wèn)題了。 Kubernetes Pod中第一個(gè)被創(chuàng)建的容器,會(huì)被從internal/24 VLAN中分配一個(gè)IP地址,該IP地址也被Pod內(nèi)共享一個(gè)network namespaces的容器共享。

你可以看到這里微妙之處。每當(dāng)“網(wǎng)絡(luò)”創(chuàng)建的容器停止時(shí),他會(huì)撤銷(xiāo)Pod中所有的其它容器,因?yàn)闆](méi)有可以共享的命名空間了,所以需要從頭創(chuàng)建新的Pod,重新分配IP。更糟糕的是,你的連接也沒(méi)了。所以,當(dāng)你的容器停止后,不能自動(dòng)重啟它們。我相信通過(guò)觀察Docker銷(xiāo)毀容器的過(guò)程,可以找到解決辦法,但是,那有些繞。所以,如果你想要在Docker容器中運(yùn)行多個(gè)進(jìn)程,你會(huì)需要一個(gè)進(jìn)程管理工具。
監(jiān)管日志

最后,講一下日志。日志由管理進(jìn)程負(fù)責(zé)。通常這個(gè)進(jìn)程管理器通過(guò)捕獲進(jìn)程的stdout/stderr,并將其記錄到一個(gè)日志!癆pp Container Specification”上有關(guān)日志的說(shuō)明如下:

    應(yīng)用程序應(yīng)登錄到stdout和stderr。容器執(zhí)行程序負(fù)責(zé)捕捉和不斷輸出。

對(duì)于CoreOS來(lái)說(shuō),systemd似乎是一個(gè)顯而易見(jiàn)的選擇。Runit在這方面做得很好,但這又回到我已經(jīng)在前面提到的,專(zhuān)業(yè)上來(lái)講,這是不必要的額外工作。

Docker的做法是,把近六個(gè)月的日志記錄到日志插件prosposal文檔中。雖然還未實(shí)現(xiàn),但考慮到這是由Michael Crosby提出的,我對(duì)它有信心。
用戶(hù)體驗(yàn)和使用經(jīng)驗(yàn)

大家對(duì)Rocket的另一個(gè)不滿(mǎn)在于用戶(hù)體驗(yàn)。但請(qǐng)記住,Rocket最新發(fā)布的版本是0.1.1。你知道第一輛車(chē)的樣子嗎?它看起來(lái)是這樣的。這當(dāng)然不是最好的用戶(hù)體驗(yàn),然而這是朝著法拉利和保時(shí)捷的第一步。



但同樣也是最重要的是,Rocket是App Container Specification的實(shí)現(xiàn),不會(huì)強(qiáng)加給你任何東西。同樣,Dockerfiles、Docker daemon以及其它你想要的實(shí)現(xiàn),都只能靠你自己了。甚至是Stage1!你想讓Docker作為管理器?破解它,并把它作為參數(shù)傳遞給rkt run,成為一個(gè)Stage1進(jìn)程。我都能想象在未來(lái),CoreOS很可能會(huì)實(shí)現(xiàn)一些很棒的工具,甚至提升Ops 和Devs的用戶(hù)體驗(yàn)。但那些工具可能會(huì)作為單獨(dú)的項(xiàng)目,而不是Rocket的核心部分。在這一點(diǎn)上我認(rèn)為最重要的是項(xiàng)目的穩(wěn)定。
結(jié)束語(yǔ)

我要十分明確地說(shuō),我喜歡Docker,并且一直在關(guān)注Docker。這篇博文并不是在討論Docker或Rocket好與壞。大多數(shù)人都是沒(méi)有讀過(guò)“App Container Specification”,才會(huì)總是要比較這兩者的好壞。

最后,強(qiáng)烈建議你去了解一下Docker和Rocket。如果你喜歡用C編碼,你也應(yīng)該試試LXC或其它類(lèi)似的技術(shù)。還有很多事情可以做,很多機(jī)會(huì),讓你成為目前這個(gè)行業(yè)巨變的一部分!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP