您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

白皮書《Leveraging Containers and OpenStack》(上)

2019-03-06 10:45:30   作者:   來(lái)源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  引言
  想象一下,你的任務(wù)是從頭開始構(gòu)建整個(gè)私有云基礎(chǔ)設(shè)施。你的預(yù)算有限,帶領(lǐng)一個(gè)小而專的團(tuán)隊(duì),而且被要求創(chuàng)造奇跡。
  幾年前,你會(huì)構(gòu)建一個(gè)基礎(chǔ)設(shè)施,包含在虛擬機(jī)中運(yùn)行的應(yīng)用程序,以及一些用于遺留應(yīng)用程序的裸機(jī)。隨著基礎(chǔ)設(shè)施的發(fā)展,虛擬機(jī)(VM)可以實(shí)現(xiàn)更高的效率和靈活性,但僅靠虛擬機(jī)并不能完全滿足敏捷的應(yīng)用程序部署方法的需求。它們繼續(xù)作為運(yùn)行許多應(yīng)用程序的基礎(chǔ),但越來(lái)越多的開發(fā)人員正在尋求容器的新興趨勢(shì),以進(jìn)行前沿的應(yīng)用程序開發(fā)和部署——因?yàn)槿萜魈峁┝烁叩撵`活性和效率。
  Docker和Kubernetes等容器技術(shù)正在成為構(gòu)建容器化應(yīng)用的領(lǐng)先標(biāo)準(zhǔn)。它們幫助組織消除了限制開發(fā)靈活性的復(fù)雜性。容器、容器基礎(chǔ)設(shè)施和容器部署技術(shù)已被證明是非常強(qiáng)大的抽象,可應(yīng)用于許多不同的用例。使用Kubernetes等技術(shù),組織可以提供僅使用容器進(jìn)行應(yīng)用程序交付的云。
  但是,領(lǐng)先的私有云不僅僅是容器,容器也不適合所有工作負(fù)載和用例。如今,大多數(shù)私有云基礎(chǔ)設(shè)施都需要包含用于管理基礎(chǔ)設(shè)施的裸機(jī)、用于遺留應(yīng)用程序的虛擬機(jī)以及用于新應(yīng)用程序的容器。支持、管理和協(xié)調(diào)這三種方法的能力是運(yùn)營(yíng)效率的關(guān)鍵所在。
  OpenStack是目前構(gòu)建私有云的最佳選擇,具有管理網(wǎng)絡(luò)、存儲(chǔ)和計(jì)算基礎(chǔ)設(shè)施的能力,支持來(lái)自一個(gè)控制平面的虛擬機(jī)、裸機(jī)和容器。雖然Kubernetes可以說(shuō)是最受歡迎的容器編排器并且已經(jīng)改變了應(yīng)用程序的交付,但它取決于是否有可靠的云基礎(chǔ)設(shè)施,而OpenStack為托管應(yīng)用程序提供了最全面的開源基礎(chǔ)設(shè)施。OpenStack的多租戶云基礎(chǔ)設(shè)施非常適合Kubernetes,擁有多個(gè)集成點(diǎn)、部署解決方案和跨多個(gè)云聯(lián)合的能力。
  在本文中,我們將探討容器如何在OpenStack中工作,檢查各種用例,并提供OpenStack等開源項(xiàng)目的概述——這有助于使容器成為易于采用和利用的技術(shù)。
  I. OpenStack中容器的高級(jí)視圖
  容器和OpenStack的交匯有三種主要場(chǎng)景。
  第一種場(chǎng)景稱為基礎(chǔ)設(shè)施容器,允許運(yùn)維人員以改進(jìn)云基礎(chǔ)設(shè)施部署、管理和運(yùn)維的方式利用容器。在此場(chǎng)景中,容器在裸機(jī)基礎(chǔ)設(shè)施上設(shè)置,并允許對(duì)主機(jī)資源進(jìn)行特權(quán)訪問(wèn)。此訪問(wèn)權(quán)限允許它們直接利用容器運(yùn)行時(shí)通常試圖不讓用戶感知的計(jì)算、網(wǎng)絡(luò)和存儲(chǔ)資源。容器隔離了每個(gè)應(yīng)用程序所依賴的復(fù)雜依賴關(guān)系,同時(shí)仍允許基礎(chǔ)設(shè)施應(yīng)用程序直接管理和操作底層系統(tǒng)資源。當(dāng)需要升級(jí)服務(wù)時(shí),可以在不改變依賴關(guān)系的情況下處理升級(jí),從而不破壞共址服務(wù)。
  新版本的OpenStack已經(jīng)采用了這種基礎(chǔ)設(shè)施容器模型,現(xiàn)在通過(guò)組合編排工具和容器化服務(wù)來(lái)管理OpenStack部署的整個(gè)生命周期是正常的;A(chǔ)設(shè)施容器使運(yùn)維人員能夠使用容器編排技術(shù)來(lái)解決許多問(wèn)題,尤其是在快速迭代/升級(jí)現(xiàn)有軟件(包括OpenStack)的過(guò)程中。在容器內(nèi)運(yùn)行OpenStack有助于運(yùn)維人員解決Day 2的挑戰(zhàn),包括為服務(wù)添加新組件、快速升級(jí)軟件版本以及跨機(jī)器和數(shù)據(jù)中心快速滾動(dòng)更新。這種方法將容器的敏捷性好處帶給了OpenStack的部署和升級(jí)。
  第二種場(chǎng)景涉及在云基礎(chǔ)設(shè)施上托管容器化應(yīng)用程序框架。包括像Docker Swarm和Kubernetes這樣的Container Orchestration Engines(COE),或者更輕量級(jí)的容器專用服務(wù)和無(wú)服務(wù)器API。無(wú)論是在裸機(jī)還是虛擬機(jī)上,OpenStack社區(qū)都致力于確保在安全、租戶隔離的云主機(jī)上提供容器化應(yīng)用程序。驅(qū)動(dòng)程序推動(dòng)了這種場(chǎng)景,這些驅(qū)動(dòng)程序允許像Kubernetes這樣的項(xiàng)目直接利用OpenStack API進(jìn)行存儲(chǔ)、負(fù)載均衡和身份識(shí)別。它還包括用于按需配置托管Kubernetes集群和應(yīng)用程序容器的API。借助這些功能,開發(fā)團(tuán)隊(duì)可以編寫新的容器化應(yīng)用程序,并在OpenStack云上快速配置Kubernetes集群。它是一個(gè)完整的應(yīng)用程序生命周期解決方案,提供開發(fā)、測(cè)試和調(diào)試代碼所需的資源,并具有強(qiáng)大的自動(dòng)化功能,可將應(yīng)用程序部署到生產(chǎn)環(huán)境中。
  在最后一種場(chǎng)景中,我們考慮了獨(dú)立OpenStack和COE部署之間的交互,而本文特別考慮了Kubernetes集群?鏞penStack和Kubernetes集群的API的一致性和互操作性是此方案成功的主要原因。例如,Kubernetes可以直接連接到OpenStack Cinder托管卷,使用OpenStack Keystone作為授權(quán)和身份驗(yàn)證后端,或者連接到OpenStack Neutron作為OpenStack Kuryr的網(wǎng)絡(luò)覆蓋。相反,OpenStack云可能與Kubernetes集群共享相同的網(wǎng)絡(luò)覆蓋,其中包含用于Calico等項(xiàng)目的Neutron驅(qū)動(dòng)程序。第三種場(chǎng)景不太關(guān)注如何托管云服務(wù)(無(wú)論是Kubernetes還是OpenStack),而是更關(guān)注獨(dú)立服務(wù)如何交互。
  II . OpenStack容器集成點(diǎn)
  在容器上部署OpenStack基礎(chǔ)設(shè)施
  如引言中所述,OpenStack的部署和管理隨著容器的出現(xiàn)而發(fā)生了顯著變化,因?yàn)槿萜鲙?lái)了管理基礎(chǔ)設(shè)施代碼的新方法。以前的管理策略要么需要?jiǎng)?chuàng)建和維護(hù)重量級(jí)的黃金級(jí)機(jī)器鏡像,要么使用脆弱的狀態(tài)維護(hù)配置管理系統(tǒng)。每種方法都有其復(fù)雜性和限制。難上加難的是管理一系列服務(wù)——這些服務(wù)都需要自己的依賴關(guān)系,這些依賴關(guān)系隨發(fā)布版本的變化而變。如果沒(méi)有某種形式的應(yīng)用程序隔離,解決依賴關(guān)系的問(wèn)題會(huì)很困難甚至不可能。
  基礎(chǔ)設(shè)施容器使新的OpenStack部署項(xiàng)目能夠在兩者之間取得平衡,同時(shí)很好地解決依賴關(guān)系問(wèn)題。使用輕量級(jí)、獨(dú)立、自包含且通常無(wú)狀態(tài)的應(yīng)用程序容器,云運(yùn)維人員在部署復(fù)雜控制平面時(shí)可獲得極大的靈活性。結(jié)合容器運(yùn)行時(shí)和編排引擎,基礎(chǔ)設(shè)施容器可以快速部署、維護(hù)和升級(jí)復(fù)雜且高度可用的基礎(chǔ)設(shè)施。
  在構(gòu)建OpenStack集群時(shí),選擇部署技術(shù)有幾個(gè)方面。運(yùn)維人員可以為其基本容器選擇Linux Containers(LXC)或Docker,使用預(yù)構(gòu)建或定制的應(yīng)用程序容器,并選擇傳統(tǒng)的配置管理系統(tǒng)進(jìn)行編排或更現(xiàn)代的方法(如Kubernetes)。表1總結(jié)了現(xiàn)有的OpenStack部署項(xiàng)目及其基礎(chǔ)技術(shù)。
  每個(gè)部署系統(tǒng)的基礎(chǔ)是為OpenStack代碼和支持服務(wù)構(gòu)建一組容器的不同方法。 OpenStack Ansible(OSA)和Kolla項(xiàng)目提供它們自己的項(xiàng)目管理構(gòu)建系統(tǒng),而LOCI專注于構(gòu)建項(xiàng)目應(yīng)用程序容器,而不管特定的編排系統(tǒng)。在更高的層次上,它們之間的差異是:
  OSA的獨(dú)特之處在于它依賴于較低級(jí)別的LXC容器,并且具有用于創(chuàng)建LXC應(yīng)用程序容器的自定義構(gòu)建系統(tǒng)。
  Kolla構(gòu)建系統(tǒng)生成Docker容器(每個(gè)服務(wù)一個(gè)),以及用于初始化和管理OpenStack部署的支持容器。 Kolla容器具有高度可配置性,可選擇基本操作系統(tǒng)、源或包安裝,以及用于進(jìn)一步定制的模板引擎。
  構(gòu)建OpenStack應(yīng)用程序容器的最后一個(gè)選選擇是LOCI。LOCI還構(gòu)建了一個(gè)Docker容器,并為每個(gè)項(xiàng)目提供了一個(gè)容器。LOCI專注于為所有常見版本快速生成緊湊且安全的容器,并期望它們可用作部署系統(tǒng)構(gòu)建的基礎(chǔ)。
  裸機(jī)基礎(chǔ)設(shè)施——OpenStack和解決Bootstrap問(wèn)題
  在每個(gè)云的基礎(chǔ)上,都有一個(gè)托管基礎(chǔ)設(shè)施服務(wù)的裸機(jī)服務(wù)器數(shù)據(jù)中心。甚至“無(wú)服務(wù)器計(jì)算”也在數(shù)據(jù)中心的硬件上運(yùn)行云上的軟件。如何引導(dǎo)硬件基礎(chǔ)設(shè)施是一個(gè)關(guān)鍵問(wèn)題,OpenStack軟件在這一點(diǎn)上很獨(dú)特,可為裸機(jī)管理提供類似云的質(zhì)量。
  OpenStack Ironic提供裸機(jī)即服務(wù)。作為一項(xiàng)獨(dú)立服務(wù),它可以發(fā)現(xiàn)裸機(jī)節(jié)點(diǎn),在管理數(shù)據(jù)庫(kù)中對(duì)它們進(jìn)行編目,并管理整個(gè)服務(wù)器生命周期,包括注冊(cè)、配置、維護(hù)和退役。當(dāng)用作OpenStack Nova的驅(qū)動(dòng)程序并與OpenStack服務(wù)套件結(jié)合使用時(shí),它為管理整個(gè)裸機(jī)基礎(chǔ)設(shè)施提供了強(qiáng)大的類似云的服務(wù)。
  這提出了一個(gè)問(wèn)題:引導(dǎo)OpenStack服務(wù)如何管理裸機(jī)基礎(chǔ)設(shè)施?典型的解決方案是使用上一節(jié)中描述的基于容器的安裝工具創(chuàng)建種子安裝。這種種子通常被稱為“undercloud”,可用于完全自動(dòng)化裸機(jī)集群的管理,就像它是虛擬化云一樣。
  這不僅可以在裸機(jī)云上運(yùn)行OpenStack虛擬化,還可以運(yùn)行裸機(jī)Kubernetes安裝,從而利用OpenStack服務(wù)提供的身份、存儲(chǔ)、網(wǎng)絡(luò)和其他云API。 。
  在OpenStack上提供基于容器的應(yīng)用程序
  基礎(chǔ)設(shè)施容器和裸機(jī)基礎(chǔ)設(shè)施很重要,但當(dāng)大多數(shù)人想到容器時(shí),他們會(huì)想到應(yīng)用容器。容器提供的隔離、包裝和易維護(hù)性使其成為交付應(yīng)用的理想解決方案。但是,無(wú)論是裸機(jī)、公有云還是私有云,容器仍然需要主機(jī)平臺(tái)來(lái)提供服務(wù)。
  Kubernetes是一個(gè)提供最適合云API的應(yīng)用程序的平臺(tái),可以自動(dòng)交付關(guān)鍵基礎(chǔ)設(shè)施,如永久存儲(chǔ)、負(fù)載均衡器、網(wǎng)絡(luò)和計(jì)算節(jié)點(diǎn)的動(dòng)態(tài)分配。OpenStack提供云基礎(chǔ)設(shè)施,可以是本地私有云,也可以是任何公有或托管的OpenStack云。
  OpenStack是Kubernetes的第一個(gè)上游云提供商之一,擁有一個(gè)活躍的開發(fā)團(tuán)隊(duì),負(fù)責(zé)維護(hù)“Kubernetes / Cloud Provider OpenStack”插件。該插件允許Kubernetes利用Cinder塊存儲(chǔ)、Neutron和Octavia負(fù)載均衡器,并使用Nova直接管理計(jì)算資源。使用provider就像將驅(qū)動(dòng)程序部署到Kubernetes安裝,設(shè)置標(biāo)志以加載驅(qū)動(dòng)程序并提供本地用戶云憑證一樣簡(jiǎn)單。
  有許多解決方案可以在OpenStack上安裝Kubernetes和其他應(yīng)用程序框架。提供容器框架的最簡(jiǎn)單方法之一是使用Magnum——這是一個(gè)OpenStack項(xiàng)目,提供一個(gè)簡(jiǎn)單的API來(lái)部署完全托管的集群(有多個(gè)應(yīng)用程序平臺(tái)可以,包括Kubernetes)。這是Kubernetes部署系統(tǒng)的一個(gè)例子,它依賴于OpenStack API和云提供程序插件。例如,現(xiàn)在它被用于在CERN的OpenStack現(xiàn)場(chǎng)云以及合作伙伴云上,管理200多個(gè)獨(dú)立和聯(lián)合的Kubernetes安裝。如果你在首選的OpenStack云中沒(méi)有可用的Magnum API,則可以使用任何其他Kubernetes安裝工具(如kubeadm、Kubernetes Anywhere、Cross-Cloud或Kubespray)在OpenStack上安裝和管理Kubernetes集群。由于每個(gè)都使用標(biāo)準(zhǔn)Kubernetes,因此很容易使云provider接口能夠利用存儲(chǔ)和負(fù)載均衡。
  另一個(gè)OpenStack項(xiàng)目Zun提供了一個(gè)輕量級(jí)的容器服務(wù)API,用于管理單個(gè)容器,而無(wú)需管理服務(wù)器或集群。OpenStack托管的Kubernetes集群具有彈性,因?yàn)榭梢酝ㄟ^(guò)Nova API直接向集群添加或刪除云資源來(lái)動(dòng)態(tài)調(diào)整大小。或者,Kubernetes可以作為OpenStack Zun的容器后端,將pod基礎(chǔ)設(shè)施的管理權(quán)轉(zhuǎn)交給Zun。它為運(yùn)行容器提供了輕量級(jí)和多租戶容器服務(wù)API,無(wú)需直接創(chuàng)建服務(wù)器。與Neutron和Cinder的直接集成用于為各個(gè)容器提供網(wǎng)絡(luò)和卷。
  最后,Qinling項(xiàng)目提供“功能即服務(wù)”,旨在提供支持無(wú)服務(wù)器功能的平臺(tái),類似于Lambda、Azure Functions和Google Cloud Functions。它進(jìn)一步抽象了容器的管理,并允許用戶通過(guò)按需擴(kuò)展的事件驅(qū)動(dòng)、無(wú)服務(wù)器計(jì)算體驗(yàn)來(lái)加速開發(fā)。Qinling支持不同的容器編排后端(如Kubernetes和Docker swarm)、各種流行的功能包存儲(chǔ)后端(如本地存儲(chǔ)和OpenStack Swift)。
  原文鏈接:
  https://www.openstack.org/containers/leveraging-containers-and-openstack/
  獲取更多開源云技術(shù)資訊&大咖交流&免費(fèi)活動(dòng),歡迎添加開源云中文社區(qū)小助手,備注開源云!
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題

CTI論壇會(huì)員企業(yè)