想象一下,你的任務(wù)是從頭開(kāi)始構建整個(gè)私有云基礎設施。你的預算有限,帶領(lǐng)一個(gè)小而專(zhuān)的團隊,而且被要求創(chuàng )造奇跡。
幾年前,你會(huì )構建一個(gè)基礎設施,包含在虛擬機中運行的應用程序,以及一些用于遺留應用程序的裸機。隨著(zhù)基礎設施的發(fā)展,虛擬機(VM)可以實(shí)現更高的效率和靈活性,但僅靠虛擬機并不能完全滿(mǎn)足敏捷的應用程序部署方法的需求。它們繼續作為運行許多應用程序的基礎,但越來(lái)越多的開(kāi)發(fā)人員正在尋求容器的新興趨勢,以進(jìn)行前沿的應用程序開(kāi)發(fā)和部署——因為容器提供了更高的靈活性和效率。
Docker和Kubernetes等容器技術(shù)正在成為構建容器化應用的領(lǐng)先標準。它們幫助組織消除了限制開(kāi)發(fā)靈活性的復雜性。容器、容器基礎設施和容器部署技術(shù)已被證明是非常強大的抽象,可應用于許多不同的用例。使用Kubernetes等技術(shù),組織可以提供僅使用容器進(jìn)行應用程序交付的云。
但是,領(lǐng)先的私有云不僅僅是容器,容器也不適合所有工作負載和用例。如今,大多數私有云基礎設施都需要包含用于管理基礎設施的裸機、用于遺留應用程序的虛擬機以及用于新應用程序的容器。支持、管理和協(xié)調這三種方法的能力是運營(yíng)效率的關(guān)鍵所在。
OpenStack是目前構建私有云的最佳選擇,具有管理網(wǎng)絡(luò )、存儲和計算基礎設施的能力,支持來(lái)自一個(gè)控制平面的虛擬機、裸機和容器。雖然Kubernetes可以說(shuō)是最受歡迎的容器編排器并且已經(jīng)改變了應用程序的交付,但它取決于是否有可靠的云基礎設施,而OpenStack為托管應用程序提供了最全面的開(kāi)源基礎設施。OpenStack的多租戶(hù)云基礎設施非常適合Kubernetes,擁有多個(gè)集成點(diǎn)、部署解決方案和跨多個(gè)云聯(lián)合的能力。
在本文中,我們將探討容器如何在OpenStack中工作,檢查各種用例,并提供OpenStack等開(kāi)源項目的概述——這有助于使容器成為易于采用和利用的技術(shù)。

I. OpenStack中容器的高級視圖
容器和OpenStack的交匯有三種主要場(chǎng)景。
第一種場(chǎng)景稱(chēng)為基礎設施容器,允許運維人員以改進(jìn)云基礎設施部署、管理和運維的方式利用容器。在此場(chǎng)景中,容器在裸機基礎設施上設置,并允許對主機資源進(jìn)行特權訪(fǎng)問(wèn)。此訪(fǎng)問(wèn)權限允許它們直接利用容器運行時(shí)通常試圖不讓用戶(hù)感知的計算、網(wǎng)絡(luò )和存儲資源。容器隔離了每個(gè)應用程序所依賴(lài)的復雜依賴(lài)關(guān)系,同時(shí)仍允許基礎設施應用程序直接管理和操作底層系統資源。當需要升級服務(wù)時(shí),可以在不改變依賴(lài)關(guān)系的情況下處理升級,從而不破壞共址服務(wù)。
新版本的OpenStack已經(jīng)采用了這種基礎設施容器模型,現在通過(guò)組合編排工具和容器化服務(wù)來(lái)管理OpenStack部署的整個(gè)生命周期是正常的。基礎設施容器使運維人員能夠使用容器編排技術(shù)來(lái)解決許多問(wèn)題,尤其是在快速迭代/升級現有軟件(包括OpenStack)的過(guò)程中。在容器內運行OpenStack有助于運維人員解決Day 2的挑戰,包括為服務(wù)添加新組件、快速升級軟件版本以及跨機器和數據中心快速滾動(dòng)更新。這種方法將容器的敏捷性好處帶給了OpenStack的部署和升級。
第二種場(chǎng)景涉及在云基礎設施上托管容器化應用程序框架。包括像Docker Swarm和Kubernetes這樣的Container Orchestration Engines(COE),或者更輕量級的容器專(zhuān)用服務(wù)和無(wú)服務(wù)器API。無(wú)論是在裸機還是虛擬機上,OpenStack社區都致力于確保在安全、租戶(hù)隔離的云主機上提供容器化應用程序。驅動(dòng)程序推動(dòng)了這種場(chǎng)景,這些驅動(dòng)程序允許像Kubernetes這樣的項目直接利用OpenStack API進(jìn)行存儲、負載均衡和身份識別。它還包括用于按需配置托管Kubernetes集群和應用程序容器的API。借助這些功能,開(kāi)發(fā)團隊可以編寫(xiě)新的容器化應用程序,并在OpenStack云上快速配置Kubernetes集群。它是一個(gè)完整的應用程序生命周期解決方案,提供開(kāi)發(fā)、測試和調試代碼所需的資源,并具有強大的自動(dòng)化功能,可將應用程序部署到生產(chǎn)環(huán)境中。
在最后一種場(chǎng)景中,我們考慮了獨立OpenStack和COE部署之間的交互,而本文特別考慮了Kubernetes集群。跨OpenStack和Kubernetes集群的API的一致性和互操作性是此方案成功的主要原因。例如,Kubernetes可以直接連接到OpenStack Cinder托管卷,使用OpenStack Keystone作為授權和身份驗證后端,或者連接到OpenStack Neutron作為OpenStack Kuryr的網(wǎng)絡(luò )覆蓋。相反,OpenStack云可能與Kubernetes集群共享相同的網(wǎng)絡(luò )覆蓋,其中包含用于Calico等項目的Neutron驅動(dòng)程序。第三種場(chǎng)景不太關(guān)注如何托管云服務(wù)(無(wú)論是Kubernetes還是OpenStack),而是更關(guān)注獨立服務(wù)如何交互。
II . OpenStack容器集成點(diǎn)
在容器上部署OpenStack基礎設施
如引言中所述,OpenStack的部署和管理隨著(zhù)容器的出現而發(fā)生了顯著(zhù)變化,因為容器帶來(lái)了管理基礎設施代碼的新方法。以前的管理策略要么需要創(chuàng )建和維護重量級的黃金級機器鏡像,要么使用脆弱的狀態(tài)維護配置管理系統。每種方法都有其復雜性和限制。難上加難的是管理一系列服務(wù)——這些服務(wù)都需要自己的依賴(lài)關(guān)系,這些依賴(lài)關(guān)系隨發(fā)布版本的變化而變。如果沒(méi)有某種形式的應用程序隔離,解決依賴(lài)關(guān)系的問(wèn)題會(huì )很困難甚至不可能。
基礎設施容器使新的OpenStack部署項目能夠在兩者之間取得平衡,同時(shí)很好地解決依賴(lài)關(guān)系問(wèn)題。使用輕量級、獨立、自包含且通常無(wú)狀態(tài)的應用程序容器,云運維人員在部署復雜控制平面時(shí)可獲得極大的靈活性。結合容器運行時(shí)和編排引擎,基礎設施容器可以快速部署、維護和升級復雜且高度可用的基礎設施。
在構建OpenStack集群時(shí),選擇部署技術(shù)有幾個(gè)方面。運維人員可以為其基本容器選擇Linux Containers(LXC)或Docker,使用預構建或定制的應用程序容器,并選擇傳統的配置管理系統進(jìn)行編排或更現代的方法(如Kubernetes)。表1總結了現有的OpenStack部署項目及其基礎技術(shù)。

每個(gè)部署系統的基礎是為OpenStack代碼和支持服務(wù)構建一組容器的不同方法。 OpenStack Ansible(OSA)和Kolla項目提供它們自己的項目管理構建系統,而LOCI專(zhuān)注于構建項目應用程序容器,而不管特定的編排系統。在更高的層次上,它們之間的差異是:
OSA的獨特之處在于它依賴(lài)于較低級別的LXC容器,并且具有用于創(chuàng )建LXC應用程序容器的自定義構建系統。
Kolla構建系統生成Docker容器(每個(gè)服務(wù)一個(gè)),以及用于初始化和管理OpenStack部署的支持容器。 Kolla容器具有高度可配置性,可選擇基本操作系統、源或包安裝,以及用于進(jìn)一步定制的模板引擎。
構建OpenStack應用程序容器的最后一個(gè)選選擇是LOCI。LOCI還構建了一個(gè)Docker容器,并為每個(gè)項目提供了一個(gè)容器。LOCI專(zhuān)注于為所有常見(jiàn)版本快速生成緊湊且安全的容器,并期望它們可用作部署系統構建的基礎。
裸機基礎設施——OpenStack和解決Bootstrap問(wèn)題
在每個(gè)云的基礎上,都有一個(gè)托管基礎設施服務(wù)的裸機服務(wù)器數據中心。甚至“無(wú)服務(wù)器計算”也在數據中心的硬件上運行云上的軟件。如何引導硬件基礎設施是一個(gè)關(guān)鍵問(wèn)題,OpenStack軟件在這一點(diǎn)上很獨特,可為裸機管理提供類(lèi)似云的質(zhì)量。
OpenStack Ironic提供裸機即服務(wù)。作為一項獨立服務(wù),它可以發(fā)現裸機節點(diǎn),在管理數據庫中對它們進(jìn)行編目,并管理整個(gè)服務(wù)器生命周期,包括注冊、配置、維護和退役。當用作OpenStack Nova的驅動(dòng)程序并與OpenStack服務(wù)套件結合使用時(shí),它為管理整個(gè)裸機基礎設施提供了強大的類(lèi)似云的服務(wù)。
這提出了一個(gè)問(wèn)題:引導OpenStack服務(wù)如何管理裸機基礎設施?典型的解決方案是使用上一節中描述的基于容器的安裝工具創(chuàng )建種子安裝。這種種子通常被稱(chēng)為“undercloud”,可用于完全自動(dòng)化裸機集群的管理,就像它是虛擬化云一樣。
這不僅可以在裸機云上運行OpenStack虛擬化,還可以運行裸機Kubernetes安裝,從而利用OpenStack服務(wù)提供的身份、存儲、網(wǎng)絡(luò )和其他云API。 。
在OpenStack上提供基于容器的應用程序
基礎設施容器和裸機基礎設施很重要,但當大多數人想到容器時(shí),他們會(huì )想到應用容器。容器提供的隔離、包裝和易維護性使其成為交付應用的理想解決方案。但是,無(wú)論是裸機、公有云還是私有云,容器仍然需要主機平臺來(lái)提供服務(wù)。
Kubernetes是一個(gè)提供最適合云API的應用程序的平臺,可以自動(dòng)交付關(guān)鍵基礎設施,如永久存儲、負載均衡器、網(wǎng)絡(luò )和計算節點(diǎn)的動(dòng)態(tài)分配。OpenStack提供云基礎設施,可以是本地私有云,也可以是任何公有或托管的OpenStack云。
OpenStack是Kubernetes的第一個(gè)上游云提供商之一,擁有一個(gè)活躍的開(kāi)發(fā)團隊,負責維護“Kubernetes / Cloud Provider OpenStack”插件。該插件允許Kubernetes利用Cinder塊存儲、Neutron和Octavia負載均衡器,并使用Nova直接管理計算資源。使用provider就像將驅動(dòng)程序部署到Kubernetes安裝,設置標志以加載驅動(dòng)程序并提供本地用戶(hù)云憑證一樣簡(jiǎn)單。
有許多解決方案可以在OpenStack上安裝Kubernetes和其他應用程序框架。提供容器框架的最簡(jiǎn)單方法之一是使用Magnum——這是一個(gè)OpenStack項目,提供一個(gè)簡(jiǎn)單的API來(lái)部署完全托管的集群(有多個(gè)應用程序平臺可以,包括Kubernetes)。這是Kubernetes部署系統的一個(gè)例子,它依賴(lài)于OpenStack API和云提供程序插件。例如,現在它被用于在CERN的OpenStack現場(chǎng)云以及合作伙伴云上,管理200多個(gè)獨立和聯(lián)合的Kubernetes安裝。如果你在首選的OpenStack云中沒(méi)有可用的Magnum API,則可以使用任何其他Kubernetes安裝工具(如kubeadm、Kubernetes Anywhere、Cross-Cloud或Kubespray)在OpenStack上安裝和管理Kubernetes集群。由于每個(gè)都使用標準Kubernetes,因此很容易使云provider接口能夠利用存儲和負載均衡。
另一個(gè)OpenStack項目Zun提供了一個(gè)輕量級的容器服務(wù)API,用于管理單個(gè)容器,而無(wú)需管理服務(wù)器或集群。OpenStack托管的Kubernetes集群具有彈性,因為可以通過(guò)Nova API直接向集群添加或刪除云資源來(lái)動(dòng)態(tài)調整大小。或者,Kubernetes可以作為OpenStack Zun的容器后端,將pod基礎設施的管理權轉交給Zun。它為運行容器提供了輕量級和多租戶(hù)容器服務(wù)API,無(wú)需直接創(chuàng )建服務(wù)器。與Neutron和Cinder的直接集成用于為各個(gè)容器提供網(wǎng)絡(luò )和卷。
最后,Qinling項目提供“功能即服務(wù)”,旨在提供支持無(wú)服務(wù)器功能的平臺,類(lèi)似于Lambda、Azure Functions和Google Cloud Functions。它進(jìn)一步抽象了容器的管理,并允許用戶(hù)通過(guò)按需擴展的事件驅動(dòng)、無(wú)服務(wù)器計算體驗來(lái)加速開(kāi)發(fā)。Qinling支持不同的容器編排后端(如Kubernetes和Docker swarm)、各種流行的功能包存儲后端(如本地存儲和OpenStack Swift)。
原文鏈接:
https://www.openstack.org/containers/leveraging-containers-and-openstack/
獲取更多開(kāi)源云技術(shù)資訊&大咖交流&免費活動(dòng),歡迎添加開(kāi)源云中文社區小助手,備注開(kāi)源云!