OpenShift 3如何震撼整個(gè)Docker容器世界

責(zé)任編輯:editor006

作者:核子可樂(lè)譯

2015-11-26 14:17:05

摘自:51CTO

以下為其具體內(nèi)容:  每個(gè)pod當(dāng)中包含一套或者多套Docker容器,其共同運(yùn)行于一個(gè)node當(dāng)中,承載著應(yīng)用程序的全部代碼。一旦其構(gòu)建完成并開(kāi)始運(yùn)行,我們就能夠通過(guò)將該服務(wù)與互聯(lián)網(wǎng)對(duì)接創(chuàng)建對(duì)應(yīng)路由:

【51CTO.com快譯】紅帽打造出的這款強(qiáng)大、易于使用且極具可擴(kuò)展能力的PaaS方案如今已經(jīng)正式登陸Docker——不過(guò)其尚存在一些暫時(shí)性局限。

OpenShift 3如何震撼整個(gè)Docker容器世界

去年,OpenShift 2已經(jīng)成為我個(gè)人最為喜愛(ài)的開(kāi)源PaaS方案。那時(shí)候我曾經(jīng)評(píng)論稱,“OpenShift擁有極為驚人的易用性、易管理性與易安裝性,而且對(duì)于那些熟知Git的開(kāi)發(fā)人員以及了解Puppet的管理員而言,其幾乎沒(méi)有任何學(xué)習(xí)曲線。以自動(dòng)化方式進(jìn)行橫向擴(kuò)展簡(jiǎn)單地就像在應(yīng)用配置當(dāng)中進(jìn)行設(shè)備檢查一樣。其默認(rèn)啟用設(shè)備自動(dòng)閑置功能,而且允許用戶以極高密度進(jìn)行應(yīng)用程序部署。另外,只需進(jìn)行一次git push即可完成應(yīng)用程序更新。無(wú)論是開(kāi)發(fā)者還是運(yùn)維人員,OpenShift都可謂滿足了PaaS技術(shù)所做出的全部功能承諾。”

自那時(shí)開(kāi)始,OpenShift一直在潛心閉關(guān)以完成面向Docker容器的應(yīng)用程序部署能力轉(zhuǎn)變,其進(jìn)行了大規(guī)模重構(gòu)而非單純“cartridge”或者“gear”。從理論層面講,這應(yīng)該能夠讓OpenShift PaaS擁有更為出色的易用性并使其獲得更為可觀的編程語(yǔ)言與應(yīng)用程序支持資源池,而這都要?dú)w功于Docker Hub當(dāng)中現(xiàn)成可用的各類容器機(jī)制。不過(guò)從實(shí)踐層面看,它的具體表現(xiàn)又是如何?下面就讓我們一起探尋答案。

OpenShift 3架構(gòu)

如圖一所示,OpenShift 3仍然立足于紅帽企業(yè)Linux基礎(chǔ)之上。不過(guò)除此之外,其它的一切幾乎都做出了調(diào)整。如今的運(yùn)行單元已經(jīng)不再是“gear”——而是“pod”,每個(gè)pod由一套或者多套Docker容器所構(gòu)成,它們又共同運(yùn)行在一個(gè)“node”之上。語(yǔ)言環(huán)境不再是“cartridge”,而轉(zhuǎn)變成了Docker鏡像,并利用一款“源代碼到鏡像”工具進(jìn)行代碼結(jié)合。順帶一提,node也就是RHEL當(dāng)中應(yīng)用程序的運(yùn)行實(shí)例。

OpenShift 3如何震撼整個(gè)Docker容器世界

  圖一:OpenShift 3系統(tǒng)架構(gòu)示意圖。

調(diào)度、管理以及復(fù)制功能如此都成為主體組成部分,而主體則通過(guò)立足于RHEL的Kubernetes實(shí)現(xiàn)。其中一套服務(wù)層負(fù)責(zé)與底層虛擬或者物理硬件乃至公有或者私有云進(jìn)行通信。另有一套路由層負(fù)責(zé)將各應(yīng)用程序與互聯(lián)網(wǎng)進(jìn)行對(duì)接,如此一來(lái)它們就能夠?yàn)檫\(yùn)行在計(jì)算機(jī)或者移動(dòng)設(shè)備上的客戶端所使用。

開(kāi)發(fā)人員可以利用oc命令行界面或者Web控制臺(tái)在OpenShift 3上完成自助配置。目前一部分功能只適用于命令行界面,不過(guò)其將在未來(lái)的OpenShift 3.1版本當(dāng)中為Web控制臺(tái)所全面支持。

OpenShift SKU與安裝

OpenShift目前擁有四套彼此獨(dú)立但又密切相關(guān)的產(chǎn)品:OpenShift Origin、OpenShift Online、OpenShift Dedicated以及OpenShift Enterprise。

OpenShift Origin 3的主要賣點(diǎn)為開(kāi)源與靈活性:大家可以將其自身作為容器加以運(yùn)行、利用Ansible將其作為集群、或者利用Amazon Web Services或者Google Cloud Engine為其提供公有云運(yùn)行環(huán)境。此版本屬于上游代碼,而且明確表現(xiàn)出了與OpenShift 2的差異之處。另外其還提供OpenShift Origin 3 Vagrant VirtualBox VM,大家能夠在數(shù)分鐘之內(nèi)將其安裝完成。

Online版本則需要托管于公有云之上,而且相當(dāng)于直接從Origin代碼當(dāng)中剝離出的一部分。不過(guò)Online版本繼續(xù)使用gear機(jī)制,這一點(diǎn)可以說(shuō)已經(jīng)與OpenShift 3完全脫離了。因此,我們可以認(rèn)為Online仍然運(yùn)行在OpenShift 2模式之下。

OpenShift Dedicated負(fù)責(zé)提供一套立足于公有云的專用、定制化且受管理應(yīng)用平臺(tái),其被托管于Amazon Web Services內(nèi)的任意可用區(qū)當(dāng)中。這套版本由OpenShift 3 Enterprise提供支持并由紅帽方面加以管理。

OpenShift Enterprise則是目前穩(wěn)定性最出色且最為典型的安裝選項(xiàng)。大家需要?jiǎng)?chuàng)建一套主節(jié)點(diǎn)、基礎(chǔ)設(shè)施(包括注冊(cè)表、路由器以及存儲(chǔ)機(jī)制)以及至少兩個(gè)節(jié)點(diǎn),而且需要首先以RHEL啟動(dòng),之后陸續(xù)添加Docker、Kubernetes以及OpenShift。在理想狀態(tài)下,每個(gè)主機(jī)與節(jié)點(diǎn)將至少配備8 GB內(nèi)存以供生產(chǎn)型使用。Enterprise版本與Pivotal CF以及Apprenda存在競(jìng)爭(zhēng)關(guān)系,而且我個(gè)人利用由紅帽公司提供的“巡演環(huán)境”對(duì)其進(jìn)行了上手評(píng)測(cè)。

大家可以在筆記本電腦上安裝并運(yùn)行OpenShift Enterprise,而這也正是OpenShift Enterprise首席技術(shù)營(yíng)銷經(jīng)理Erik Jacobs在首次為我進(jìn)行演示時(shí)選擇的方式。Jacobs將其稱為“一套三虛擬機(jī)”配置,其中利用一套虛擬機(jī)作為主節(jié)點(diǎn)與基礎(chǔ)設(shè)施主機(jī)(包括注冊(cè)表與路由器),而另兩個(gè)節(jié)點(diǎn)則負(fù)責(zé)托管應(yīng)用程序。

利用OpenShift 3進(jìn)行開(kāi)發(fā)

為了理解如今的OpenShift Enterprise如何與用戶的開(kāi)發(fā)需求相匹配,我放棄了自己原先經(jīng)常使用的隨機(jī)PaaS評(píng)測(cè)方式,而選擇了采用紅帽方面提供的“九實(shí)驗(yàn)室”機(jī)制。Lab 1基本上包含oc,即命令行界面工具的安裝與運(yùn)行。需要注意的是,雖然在實(shí)驗(yàn)室流程中的某些具體步驟方面有所區(qū)別,但OpenShift Enterprise當(dāng)中的oc版本與OpenShift Origin其實(shí)并沒(méi)有多大不同。

Lab 2則要求我們運(yùn)行一套Smoke Test項(xiàng)目,了解如何使用oc并學(xué)習(xí)Web控制臺(tái)的使用技巧,如圖二所示。

OpenShift 3如何震撼整個(gè)Docker容器世界

圖二:OpenShift中Web控制臺(tái) Smoke Test應(yīng)用概述。右側(cè)的細(xì)節(jié)描述解釋了與pod、服務(wù)以及部署相關(guān)的信息。

在圖二右側(cè),大家可以看到項(xiàng)目概述屏幕中的細(xì)節(jié)面板所提供的幫助性定義信息。以下為其具體內(nèi)容:

每個(gè)pod當(dāng)中包含一套或者多套Docker容器,其共同運(yùn)行于一個(gè)node當(dāng)中,承載著應(yīng)用程序的全部代碼。

一個(gè)服務(wù)組通過(guò)pod提供一個(gè)通用DNS名稱外加一個(gè)用于訪問(wèn)的可選負(fù)載均衡式IP地址。

一套部署相當(dāng)于應(yīng)用程序的一套更新,由鏡像或者配置信息變更而觸發(fā)。

在圖二左側(cè),大家可以看到底部所示為當(dāng)前正在運(yùn)行的兩個(gè)pod,頂部則為該服務(wù)URL。Smoke Test基本上屬于一款“hello, world” Web應(yīng)用。其全部源代碼如下所示:

echo "Welcome to the OpenShift 3 Roadshow Smoke Test Application";

圖三所示為兩個(gè)正在運(yùn)行的Smoke Test pod與一個(gè)已經(jīng)完成的Build pod。

OpenShift 3如何震撼整個(gè)Docker容器世界

圖三:OpenShift 3 Web控制臺(tái)中的Smoke Test應(yīng)用Pod視圖。其中兩個(gè)pod負(fù)責(zé)容納正在運(yùn)行的應(yīng)用程序;第三個(gè)pod則顯示已成功build。

Lab 3的作用是引導(dǎo)大家從Docker Hub當(dāng)中獲取一套鏡像,即Kubernetes Guestbook應(yīng)用程序,并將該鏡像部署至OpenShift Enterprise當(dāng)中以創(chuàng)建一個(gè)運(yùn)行pod及服務(wù)。在這一流程當(dāng)中,大家將查看到以下提示信息:

注意:需要強(qiáng)調(diào)的是,出于安全性考量,OpenShift 3在默認(rèn)情況下不允許將Docker鏡像部署作為root加以運(yùn)行。如果大家希望或者需要允許OpenShift用戶部署Docker鏡像并將其作為root運(yùn)行(或者只針對(duì)特定用戶),則必須對(duì)相關(guān)配置稍加變更。

換句話來(lái)說(shuō),大家無(wú)法在正常的安全設(shè)置之下在OpenShift當(dāng)中運(yùn)行任意隨機(jī)Docker鏡像。根據(jù)我了解到的情況,OpenShift Enterprise在未來(lái)的版本——有可能是3.1.1版本——當(dāng)中,將會(huì)面向特定用戶為Docker鏡像提供沙箱環(huán)境:當(dāng)前運(yùn)行中的鏡像將在該沙箱之內(nèi)擁有root權(quán)限,但在其它OpenShift Enterprise環(huán)境下則不會(huì)以root方式運(yùn)行。

Lab 4指導(dǎo)大家如何為自己的服務(wù)創(chuàng)建路由機(jī)制,從而允許其與外界進(jìn)行通信。Lab 5則負(fù)責(zé)引導(dǎo)各位利用如下命令行對(duì)應(yīng)用程序進(jìn)行規(guī)模伸縮:

$ oc scale --replicas=3 rc guestbook-1

以上命令會(huì)在復(fù)制控制器(簡(jiǎn)稱rc)當(dāng)中將guestbook-1控制器的必要復(fù)制pod數(shù)量設(shè)定為3。在此之后,該rc將檢查當(dāng)前服務(wù)當(dāng)中的實(shí)際pod數(shù)量,如果當(dāng)前數(shù)量為1,則創(chuàng)建另外2個(gè)pod。如果大家關(guān)閉了其中一個(gè)pod,也許是因?yàn)槠渫V鬼憫?yīng)并需要重建,那么該復(fù)制控制器將以幾乎即時(shí)的方式快速創(chuàng)建1個(gè)新pod。

Lab 6負(fù)責(zé)為大家講解s2i(即源代碼到鏡像),這項(xiàng)“magic”服務(wù)(屬于免費(fèi)開(kāi)源項(xiàng)目)能夠“通過(guò)將源代碼直接轉(zhuǎn)化為Docker鏡像的方式為用戶提供可直接使用的鏡像,且該新Docker鏡像當(dāng)中囊括了builder鏡像以及build源代碼。”在這一步驟當(dāng)中,大家可以嘗試在GitHub上fork一套JBoss應(yīng)用庫(kù)并以自己的repo為基礎(chǔ)利用s2i與JBoss EAP鏡像實(shí)現(xiàn)應(yīng)用程序的創(chuàng)建、構(gòu)建并運(yùn)行:

$ oc new-app jboss-eap6-openshift~https://github.com//openshift3mlbparks.git

一旦其構(gòu)建完成并開(kāi)始運(yùn)行,我們就能夠通過(guò)將該服務(wù)與互聯(lián)網(wǎng)對(duì)接創(chuàng)建對(duì)應(yīng)路由:

$ oc expose service openshift3mlbparks

該服務(wù)的作用是顯示北美區(qū)域地圖,但不包含任何球場(chǎng)位置。

在Lab 7當(dāng)中,我們要做的是向該服務(wù)中添加一個(gè)MongoDB pod,同時(shí)向數(shù)據(jù)庫(kù)憑證提供各類環(huán)境變量。接下來(lái),大家需要在部署控制器(簡(jiǎn)稱dc)當(dāng)中設(shè)定同樣的環(huán)境變量;OpenShift會(huì)立即檢測(cè)到已變更環(huán)境,獲取該dc版本并進(jìn)行重新部署。與此同時(shí),應(yīng)用程序會(huì)與該數(shù)據(jù)庫(kù)相對(duì)接,這樣就能保證各球場(chǎng)位置皆可正常顯示。圖四所示為各重新部署的pod。

圖四:Openshift 3 mlbparks應(yīng)用各pod。這款應(yīng)用負(fù)責(zé)顯示各主要聯(lián)盟球場(chǎng)位置。第一個(gè)pod用于運(yùn)行MongoDB數(shù)據(jù)庫(kù),第二個(gè)用于運(yùn)行Java應(yīng)用,第三個(gè)則為已經(jīng)完成的build。

在Lab 8當(dāng)中,大家需要在自己的GitHub repo當(dāng)中設(shè)置一個(gè)Web鉤子,其會(huì)在檢測(cè)到有代碼推送至當(dāng)前repo時(shí)向OpenShift Enterprise部署控制器發(fā)出通知。接下來(lái),各位要做的是對(duì)Web頁(yè)面的源代碼進(jìn)行修改、檢查并將成果提交至GitHub。OpenShift會(huì)檢查發(fā)來(lái)的通知信息,做出對(duì)應(yīng)變更,進(jìn)行應(yīng)用程序重構(gòu),而后成功構(gòu)建該dc的增量版本并重新加以部署。圖五所示為經(jīng)過(guò)數(shù)次登記之后該openshift3mlbparks應(yīng)用的運(yùn)行效果。

圖五:運(yùn)行在OpenShift之上的美國(guó)棒球大聯(lián)盟球場(chǎng)應(yīng)用。該應(yīng)用依靠Java代碼實(shí)現(xiàn)并與一套MongoDB數(shù)據(jù)庫(kù)加以配合。標(biāo)題當(dāng)中的“InfoWorld”與“mod2”來(lái)自我在源代碼庫(kù)中添加的部分,旨在觸發(fā)Web鉤子來(lái)實(shí)現(xiàn)OpenShift對(duì)該應(yīng)用的重構(gòu)與重新部署。

Lab 9負(fù)責(zé)指導(dǎo)大家如何利用應(yīng)用程序模板來(lái)加快部署流程。其并不會(huì)實(shí)際教授大家如何創(chuàng)建模板,這部分內(nèi)容可以點(diǎn)擊此處查看開(kāi)發(fā)者指南中的對(duì)應(yīng)說(shuō)明(英文原文)。

OpenShift Enterprise 2中的幾項(xiàng)功能如今在OpenShift Enterprise 3當(dāng)中已經(jīng)被舍棄。其中比較重要的一項(xiàng)就是gear閑置:OpenShift Enterprise 3目前無(wú)法對(duì)未獲取到任何流量的pod進(jìn)行閑置。也許這一功能缺失將在OpenShift Enterprise 3.2當(dāng)中得到解決。同樣的,OpenShift Enterprise 3也無(wú)法以自動(dòng)方式在負(fù)載提升或者下降時(shí)進(jìn)行pod規(guī)模伸縮;但可以肯定這個(gè)問(wèn)題在后續(xù)版本中必然得到修正。

而在另一方面,OpenShift Enterprise 3能夠支持藍(lán)/綠部署。立足于存在問(wèn)題的“綠”部署進(jìn)行回滾可謂非常簡(jiǎn)單:

$ oc edit route/blue

另外,OpenShift Enterprise 3并不像我想象的那樣能夠面向多種鏡像實(shí)現(xiàn)Docker容器切換,據(jù)說(shuō)這是出于安全性方面的考量。而一旦OpenShift Enterprise的下個(gè)版本迎來(lái)了沙箱機(jī)制,各類鏡像將都能夠以root方式運(yùn)行,而這個(gè)問(wèn)題也將自然得到解決。

總體而言,我對(duì)于OpenShift 3的評(píng)價(jià)還是非常積極的。而且在這里我可以嚴(yán)肅地向大家保證,“對(duì)于開(kāi)發(fā)人員與運(yùn)維工作者,OpenShift實(shí)現(xiàn)了PaaS技術(shù)所做出的全部承諾。”

整體概述

OpenShift Enterprise 3已經(jīng)經(jīng)過(guò)全面重寫(xiě)以對(duì)接Docker容器技術(shù)。盡管目前尚有一部分必要功能存在缺失,但將在下個(gè)版本當(dāng)中得到妥善解決,而這套PaaS方案具備著毋庸置疑的強(qiáng)大性、易用性以及出色的可擴(kuò)展能力。

OpenShift Origin:免費(fèi); OpenShift Enterprise起步價(jià)格為每年4000美元,具體取決于配置情況(核心/虛擬機(jī)或者插槽數(shù)量)。 OpenShift Online目前仍然處于版本2階段,因此并不在本評(píng)測(cè)的涵蓋范疇之內(nèi)。OpenShift Dedicated目前為早期開(kāi)放使用階段,已升級(jí)至版本3且運(yùn)行在任意AWS可用區(qū)當(dāng)中。

優(yōu)勢(shì)

擁有廣泛的容器、語(yǔ)言、Web框架、數(shù)據(jù)庫(kù)以及應(yīng)用程序堆??捎眯耘c支持能力。

易于使用且可快速自助部署。

在源代碼層面實(shí)現(xiàn)Git集成。

可運(yùn)行在任意支持紅帽企業(yè)Linux系統(tǒng)的硬件、云或者虛擬機(jī)當(dāng)中。

能夠運(yùn)行任意滿足安全要求的Linux Docker容器系統(tǒng)。

缺點(diǎn)

不少常見(jiàn)Docker容器無(wú)法滿足其嚴(yán)苛的安全要求。

目前尚不提供等同于“gear閑置”的新版本功能。

目前尚不支持Windows Docker容器。

目前只允許通過(guò)手動(dòng)方式在命令行界面當(dāng)中進(jìn)行pod規(guī)模伸縮調(diào)節(jié)。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)