使用 OpenStack 實現云計算和存儲
Infrastructure as a Service (IaaS) 云平臺種類繁多,例如像 Nebula 和 Eucalyptus 這樣為人熟知的解決方案。而此領域的一個新來者已展示了其不俗的增長,不僅包括用戶數量的增長,還包括支持公司的數量的大量增長。在本文中,我們將了解這 個開源平臺 OpenStack,發現它是否真的是一種開源云操作系統。
云和公共 Infrastructure as a Service (IaaS) 背后的理念并不算很新。實際上,Amazon Elastic Compute Cloud (Amazon EC2) 到今年已經有六歲了。有所改變的是,現在已經主要將 IaaS 作為一種私有云計算,以滿足具有敏感數據的企業計算。私有云計算將 IaaS 的理念應用到私有基礎架構。雖然這么做缺少公共云(現收現付服務)的經濟優勢,但它充分利用了云計算的核心原理,使企業數據中心內有了可伸縮和彈性的基礎 架構。
讓我們先來快速介紹一下 IaaS 及其基礎架構,然后再深入研究這個領先的開源解決方案:OpenStack。
云計算架構常常都著重于虛擬化后按需向用戶公開的一組公共資源。這些資源包括功能各異的計算資源、持久的存儲資源,以及將這些資源組合在一起并將它們有條件地公開到互聯網的可配置聯網資源。
IaaS 實現的基礎架構(參見 圖 1)就遵循了這樣的模型,并添加了其他元素,比如計量(為計費的目的來說明使用的情況)。物理的基礎架構則通過由各種技術(包括系統管理程序(用于平臺虛擬化)、虛擬網絡和存儲)實現的虛擬層提取自應用程序和用戶。
圖 1. IaaS 的高級視圖
雖然 OpenStack 是如今最為流行的一種可用的開源云解決方案,但它當然不是最早的一個。實際上,OpenStack 是在公共和私有領域開發的兩種舊解決方案的綜合。
由位于圣巴巴拉市的加州大學的一個研究項目開發的 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是更早的一種開源 IaaS 解決方案。其他的解決方案還包括 OpenNebula(一種開源的云計算工具箱)和 Nimbus(另一種面向 IaaS 云的開源工具箱)。OpenStack 集成了美國國家航空和航天局 (NASA) 的部分 Nebula 平臺和 Rackspace Cloud Files 項目(云存儲)。
OpenStack 是 IaaS 空間的一個新來者,在 2010 年末首次發布。盡管此解決方案成熟度不夠,而且面市還不到兩年時間,但是 OpenStack 現已成為了使用最為廣泛的云堆棧之一。OpenStack 不是單一的解決方案,而是一個不斷成長的開源解決方案套件(包括核心以及新孵化的項目),并共同形成了一個強大成熟的 IaaS 堆棧。
如 圖 2 所示,OpenStack 構建自幾個核心技術(多于這里所展示的,但這里所展示的代表關鍵方面)。左側是 Horizon 儀表盤,顯示了一個可為用戶和管理員用來管理 OpenStack 服務的用戶界面。Nova 提供了一個可伸縮的計算平臺,用來支持大量服務器和虛擬機(VM;以一種系統管理程序不可知的方式)的配置和管理。Swift 實現一個具有內部冗余、可大量伸縮的對象存儲系統。在底部的是 Quantum 和 Melange,二者實現了網絡連接即服務 (network connectivity as a service)。最后,Glance 項目為虛擬磁盤映象實現了一個存儲庫(映像即服務 (image as a service))。
圖 2. OpenStack 解決方案的核心和附加組件

如圖 2 所示,OpenStack 是一個項目集合,整體提供了一個完整的 IaaS 解決方案。表 1 展示了這些項目及其起作用的方面。
表 1. OpenStack 項目和組件
項目 | 組件 | 描述 |
---|---|---|
Horizon | Dashboard | 用戶和管理員儀表盤 |
Nova | Compute/block device | 虛擬服務器和卷 |
Glance | Image service | VM 磁盤映像 |
Swift | Storage as a Service | 對象存儲 |
Quantum/Melange | Networks | 安全虛擬網絡 |
其他重要的方面還包括 Keystone,它實現了對企業私有云十分關鍵的身份識別服務(對計算服務器、Glance 內的映像以及 Swift 對象存儲區的訪問方面的管理)。
OpenStack 用三個核心開源項目(如 圖 2 所示)來表示:Nova(計算)、Swift(對象存儲)和 Glance(VM 存儲庫)。Nova(或 OpenStack Compute),提供了跨服務器網絡的 VM 實例的管理。它的應用程序編程接口 (API) 為試圖無知物理硬件和系統管理程序提供了一種計算編排方法。請注意,Nova 不僅提供了用于管理的 OpenStack API,還為那些習慣該界面的人提供了一種 Amazon EC2-兼容 API。Nova 支持組織所使用的專有系統管理程序,但更為重要的是,它支持像 Xen 和 Kernel Virtual Machine (KVM) 這樣的系統管理程序,也支持像 Linux? Container 這樣的操作系統虛擬化。出于開發的目的,還可以使用 QEMU 這樣的仿真解決方案。
Swift(或 OpenStack Object Storage)項目可通過配置了普通硬盤的標準服務器提供可伸縮的冗余存儲集群。Swift 并不代表一個文件系統,它實現的是一個更為傳統的對象存儲系統,可用于主要是靜態數據(一種關鍵的使用模型是靜態 VM 映像)的長期存儲。Swift 不具備集中式控制器,它能改善整體的可伸縮性。它在內部管理跨集群的復制(無需獨立磁盤冗余陣列)來提高可靠性。
Glance(或 OpenStack Image Service)為 Nova 能夠使用(此選項存儲在 Swift 內)的虛擬磁盤映像提供了一個存儲庫。Glance 提供了一個 API 來注冊磁盤映像,此外還提供了通過一個簡單的 Representational State Transfer (REST) 界面的發現和交付。Glance 很大程度上對虛擬磁盤映像格式不可知,支持各種標準,包括 VDI (VirtualBox)、VHD (Microsoft? Hyper-V?)、QCOW2 (QEMU/KVM)、VMDK/OVF (VMware) 以及原始格式。Glance 還提供了磁盤映像校驗和、版本控制(和其他元數據)以及虛擬磁盤驗證和審計/調試日志。
此核心 OpenStack 項目(Nova、Swift 和 Glance)是使用 Python 開發的,它們都可以在 Apache License 下使用。
因為有大量獨立項目需要安裝并配置以便能夠相互協作,安裝 OpenStack 可能會非常耗時(參見 參考資料 獲取完整安裝的更多信息)。但是對于好奇的讀者來說,有其他一些選項可以極大地簡化 OpenStack 的啟動和運行。
閱讀過我之前文章的讀者都知道我是一個 VM 映像迷,熱衷于基于 Linux 軟件的簡化使用。VM 允許您輕松地創建一個新實例來嘗試或演示軟件。此 VM 是一個自包含的 Linux 實例(有時稱作虛擬設備),可以用必要的軟件預安裝并預配置以供使用。以這種方式配置的軟件可極大地簡化其使用,讓您得以試驗那些否則很難掌握或掌握起來很耗時的軟件。參閱 參考資料 獲取滿足您特定的硬件和基礎操作系統需求的安裝選項。
對于本次展示,我決定使用最新的 Ubuntu 發布版 (12.04) 和 OpenStack Essex 發布版。Essex 的 ISO 版本可以使用 uksysadmin 安裝程序進行安裝(參見 參考資料)。 在 Ubuntu Precise 上成功安裝了 OpenStack Essex 后,使用一個外部的 Web 瀏覽器能夠登錄 OpenStack 儀表盤。圖 3 顯示了具有兩種容器格式的來賓(Guest) VM 映像的 System Panel Images 選項卡界面。
圖 3. 可用來賓映像的 OpenStack Dashboard 視圖

此映像可用來創建一個演示實例,正如圖 4 所示,創建已經開始。這個實例現在就可以使用了。
圖 4. 計算實例的 OpenStack Dashboard 視圖

現在,有了運行于 OpenStack 之上的計算映像,我可以通過一個簡單的 Secure Shell (SSH) 會話使用其 IP 地址 (172.16.1.1) 對其進行訪問(參見清單 1,用戶輸入以粗體顯示)。
清單 1. 通過 SSH 訪問 OpenStack 計算實例
$ ssh -i Downloads/demo.pem ubuntu@172.16.1.1 The authenticity of host '172.16.1.1 (172.16.1.1)' can't be established. RSA key fingerprint is df:0e:d0:32:f8:6d:74:49:ea:60:99:82:f1:07:5d:3b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.1' (RSA) to the list of known hosts. Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-virtual x86_64) * Documentation: https://help.ubuntu.com/ System information disabled due to load higher than 1.0 0 packages can be updated. 0 updates are security updates. Get cloud support with Ubuntu Advantage Cloud Guest http://www.ubuntu.com/business/services/cloud The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@demo1 :~$ ubuntu@demo1 :~$ hostname demo1 ubuntu@demo1 :~$ ps PID TTY TIME CMD 835 pts/0 00:00:06 bash 948 pts/0 00:00:00 ps ubuntu@demo1 :~$ |
所有這些層都運行后,可能很難想象所發生的事情。圖 5 展示了整個堆棧,希望能幫助解釋清楚。在這個演示中,運行 Mac OS X 的 Mac 提供了基礎平臺。VirtualBox 運行于 Mac OS X 之上,提供了 OpenStack 的執行平臺(運行于 Ubuntu Linux 上)。注意,VirtualBox 是一個類型-2 的虛擬化管理程序。在 OpenStack Linux 層,QEMU 被用作一個來賓系統管理程序,從硬件角度來看,這很理想,但缺乏真正的產品設置所需的性能。
圖 5. 在普通硬件上運行的 OpenStack 演示堆棧

沒有了對嵌套虛擬化(在另一個系統管理程序之上有效運行一個系統管理程序)的支持,我依賴于 QEMU 作為我在 OpenStack 上運行的來賓系統管理程序。這讓我能夠在一個來賓系統管理程序上運行一個來賓 VM,該來賓 VM 在一個類型-2 的虛擬化管理程序上運行。雖然這種設置可能會很慢,但它充分展示了一個在普通計算機系統上運行的 IaaS 堆棧。注意,如今某些 AMD 處理器可提供一種有效的支持嵌套虛擬化的方式。
雖然使用 QEMU 對于性能而言并不理想,但它與 KVM (Linux as a hypervisor) 極為兼容,因而很容易在兩個系統管理程序之間遷移(除了在這兩者之前兼容的 VM 映像)。在這種情況下,讓 QEMU 之所以理想的原因是它可以在未提供虛擬化支持的硬件上執行。注意,我的平臺在這個例子中是具有虛擬化功能的,但是由于我在 VirtualBox(一個憑借自身力量的虛擬化管理程序)上運行,嵌套虛擬化的缺乏讓我不得不使用一個不依賴虛擬化擴展的來賓系統管理程序。不管在哪種 情況下,我都使用 libvirt 來管理 VM(啟動、停止、監視等),所以,在一個有虛擬化功能的硬件上遷移到 KVM 簡單至極,只需在 OpenStack 配置文件內進行兩行修改即可。
即便您沒有自己的集群,也可采用其他選項來享受 OpenStack 帶來的益處。OpenStack 的創作者之一 Rackspace,就提供了它寄予厚望的云的 Linux。Rackspace 的 OpenStack 云平臺提供了 OpenStack 在公共云基礎架構的靈活性和可伸縮性方面的優勢。
為了簡化 OpenStack 面向私有云的安裝,很多公司都關注于簡化 OpenStack 在私有集群內的使用。比如,Piston Cloud Computing 公司就提供了 Piston Enterprise OS 這種基于 OpenStack 的私有云操作系統。Mirantis 則向企業提供了專業的構建 OpenStack 基礎架構的服務。
OpenStack 將繼續集成新的功能,提高了 IaaS 解決方案的定義。OpenStack 旗下有許多其他項目可用,但還有很多仍在孵化進程中。Keystone 項目提供的身份識別服務統一了跨 OpenStack 組件的身份驗證,同時又集成了現有的身份驗證系統。還存在目的各異的社區項目,比如負載均衡即服務 (Atlas-LB);云安裝和維護系統 (Crowbar);云可配置和可伸縮的關系數據庫 (RedDwarf);面向云編排的基于REST 的 API (Heat);以及涵蓋了監視、計費等的云管理工具 (Clanavi)。在 OpenStack 項目內外還有無數其他項目正在開發當中,只要 OpenStack 的構建勢頭不減,這個列表每天都在增長。
OpenStack 并非沒有競爭,隨著舊項目的不斷發展,新的項目也會出現。例如,CloudStack(在 2009 年首次發布)具有幾個產品安裝,但缺乏 OpenStack 所具備的開源貢獻者支持的級別。
繼 Linux 發展成為能符合所有使用模型的通用操作系統之后,OpenStack 也正在向代表云操作系統的方向前進。與管理有限集的核心和本地資源不同,OpenStack 管理的是包含計算和存儲資源的龐大的服務器網絡,以及將它們連接在一起的虛擬網絡膠。
自它在 2010 年末首次發布以來 (Austin),OpenStack 項目已經又發布了四個版本,最新的一個版本在 2012 年 4 月發布 (Essex)。對于每次發布,OpenStack 都繼續推動新的、改進了的功能,這也提高了其他 IaaS 解決方案的競爭門檻。如今,在 Apache 旗下,OpenStack 成為云堆棧內的標準實在不足為奇。