一、OpenStack是什么
OpenStack是一系列開源工具(或開源項目) 的組合,主要使用池化虛擬資源來構建和管理私有雲及公共雲。其中的六個項目主要負責處理核心雲計算服務,包括計算、網絡、存儲、身份和鏡像服務。還有另外十個可選項目,用戶可把它們捆綁打包,用來創建獨特、可部署的雲架構。
二、雲計算的三種模式
1、IaaS:基礎設施即服務(個人比較習慣的):用戶通過網絡獲取虛機、存儲、網絡,然后用戶根據自己的需求操作獲取的資源
2、PaaS:平台即服務:將軟件研發平台作為一種服務, 如Eclipse/Java編程平台,服務商提供編程接口/運行平台等
3、SaaS:軟件即服務 :將軟件作為一種服務通過網絡提供給用戶,如web的電子郵件、HR系統、訂單管理系統、客戶關系系統等。用戶無需購買軟件,而是向提供商租用基於web的軟件,來管理企業經營活動
三、OpenStack 中有哪些項目
OpenStack 架構由大量開源項目組成。其中包含 6 個穩定可靠的核心服務,用於處理計算、網絡、存儲、身份和鏡像; 同時,還為用戶提供了十多種開發成熟度各異的可選服務。OpenStack 的 6 個核心服務主要擔綱系統的基礎架構,其余項目則負責管理控制面板、編排、裸機部署、信息傳遞、容器及統籌管理等操作。
- keystone:Keystone 認證所有 OpenStack 服務並對其進行授權。同時,它也是所有服務的端點目錄。
- glance:Glance 可存儲和檢索多個位置的虛擬機磁盤鏡像。
- nova:是一個完整的 OpenStack 計算資源管理和訪問工具,負責處理規划、創建和刪除操作。
- neutron:Neutron 能夠連接其他 OpenStack 服務並連接網絡。
- dashboard:web管理界面,為OpenStack底層服務進行交互。
- Swift: 是一種高度容錯的對象存儲服務,使用 RESTful API 來存儲和檢索非結構數據對象。
- Cinder 通過自助服務 API 訪問持久塊存儲。
- Ceilometer:用於度量、監控和控制數據資源的集中來源,為OpenStack用戶提供記賬途徑
- Heat:編排
四、OpenStack的優勢
1、控制性
完全開源的平台,提供API接口,方便與第三方技術集成
2、兼容性
OpenStack兼容其他共有與,方便用戶進行數據遷移
3、可擴展性
模塊化設計,可以通過橫向擴展,增加節點、添加資源
4、靈活性
根據自己的需要建立相應的基礎設施、增加集群規模
5、行業標准
眾多IT領軍企業已經加入到OpenStack項目中
五、OpenStack架構
OpenStack 在設計過程中有幾個原則
1、按照不同的功能和通用性划分不同項目,拆分子系統
2、按照邏輯計划、規范字系統之間的通信
3、通過分層設計整個系統架構
4、不同的功能子系統間提供通用的API接口
概念架構圖
OpenStack架構概念
- 雲平台用戶在經過Keystone服務認證授權后,通過Hrizon 或者R額setAPI 模式創建虛擬機服務,創建過程中包括利用Nova 服務創建虛擬機實例,虛擬機實例采用Glance提供鏡像服務,然后使用Neutron為新建的虛擬機分配 ip 地址,並將其納入虛擬網絡中,之后在通過Cinder創建的卷為虛擬機掛載存儲快,整個過程都在Ceilometer 模塊的監控下,Cinder產生的卷(VAOLUME)和 Glance 提供的鏡像(image)可以通過Swift 的對象存儲機制進行保存。
OpenStack 邏輯架構圖
以上架構圖,包括各大組件的主要部分
Nova
Nova簡介
- Nova是負責提供計算資源的模塊,也是OpenStack中核心模塊,其主要功能是負責虛擬機實例的生命周期管理、網絡管理、用戶管理以及其他相關雲平台管理功能。
- OpenStack使用計算服務來托管和管理雲計算系統。OpenStack計算服務是基礎設施服務(IaaS)系統的主要組成部分,模塊主要由Python實現
- OpenStack計算組件請求Openstack Identify服務進行認證,請求OpenStack Image服務提供磁盤,為OpenStack提供用戶和管理接口。磁盤鏡像訪問限制在項目與用戶上,配額以每個項目進行設定。例如,每個項目下可以創建多少實例。OpenStack組件可以在標准硬件上橫向大規模擴展,並且下載磁盤鏡像啟動虛擬機實例。
Nova-api(API服務器)
- 接收和響應來自最終用戶的計算API請求,對外提供一個與雲基礎設施交互的接口,也是外部可用於管理基礎設施的唯一組件。此服務支持OpenStack計算服務API、Amazon EC2 API以及特殊管理的API。用於接收用戶管理操作的請求。管理使用EC2 API通過Web Services調用實現,然后APi Server通過消息隊列(Message Queue)輪流與雲基礎設施的相關組件通信。作為EC2 API的另外一種選擇,OpenStack也提供一個內部使用的“OpenStack API”
Nova-api-metadata服務
- 接收來自虛擬機發送的雲數據請求,Nova-api-metadata服務一般在Nova-Network服務的多主機模式下使用
Nova-Compute(運算工作站)
- Nova-compute的主要任務是管理實例的整個生命周期,他們通過消息隊列接收請求並且執行,從而對實例進行各種操作,在典型實際生產環境下,會架設很多運算工作站,根據調度算法,一個實例可以在可用的任意一台運算工作站上部署
Nova-Conductor
- Nova-Conductor模塊作用與Nova-Compute服務與數據庫之間,避免了由Nova-Compute服務對雲數據庫的直接訪問,它可以橫向擴展,但是,不要將他部署在運行Nova-Compute服務的主機節點上
Nova-Scheduler(調度器)
- 調度器負責把nova-API調用送達給目標。調度器以名為“nova-schedule”的守護進程方式運行,並根據調度算法從可用資源池中恰當地選擇運算服務器。有很多因素都可以影響調度結果,比如負載、內存、子節點的遠近、CPU架構等等。強大的是nova調度器采用的是可插入式架構。
- Nova調度器的基本調度算法有
- 隨機化:主機隨機選擇可用的節點
- 可用化:與隨機相似,只是隨機選擇的范圍被制定
- 簡單化:應用這種方式,主機選擇負載最小者來運行實例。
Nova-placement-api
- Nova-placement-api用於追蹤記錄資源提供者目錄和資源使用情況,這些資源包括計算、存儲以及IP地址池等
由於nova也有數據遷移的功能,我們來說一下,冷遷移和熱遷移 冷遷移(cold migration),也叫靜態遷移。關閉電源的虛擬機進行遷移。通過冷遷移,可以選擇將關聯的磁盤從一個數據存儲移動到另一個數據存儲。 好處:虛擬機不需要位於共享存儲器上,數據丟失率小。 缺點:需要關閉電源,業務中斷。 熱遷移(Live Migration),又叫動態遷移、實時遷移,即虛擬機保存/恢復,通常是將整個虛擬機的運行狀態完整保存下來,同時可以快速的恢復到原有硬件平台甚至是不同硬件平台上。恢復以后,虛擬機仍舊平滑運行,用戶不會察覺到任何差異。 好處:軟件和硬件系統的維護升級,不會影響用戶的關鍵服務,提高了服務的高可用性和 用戶的滿意度。 缺點:過程不可中斷,操作復雜
Keystone
Keystone為所有的OpenStack組件提供認證和訪問策略服務,它依賴資深REST(基於Identity API)系統進行工作主要對(單不限於)Swift、Glance、Nova等進行認證與授權。事實上,授權通過對動作消息來源者請求的合法性進行鑒定
- keystone采用兩種授權方式:基於用戶密碼和基於令牌
- keystone提供三種服務:令牌服務(含有授權用戶的授權信息)、目錄服務(含有用戶合法操作的可用服務列表)、策略服務(利用Keystone具體指定用戶或者群組某些訪問權限)
user(用戶)
- 在Openstack中,用戶是使用Openstack雲服務的人、系統或者服務。用戶可以登錄或者使用指定的token訪問雲中的資源,並可以被指派到指定的項目或者角色,認證服務通過對用戶身份的確認,來判斷一個請求是否被允許。用戶通過認證信息如密碼、API Keys等進行驗證
project(項目)
- 項目是各個服務中的一些可以訪問的資源集合,用來分組或者隔離資源或者身份對象。不同的服務中,項目所涉及的資源不同,在Nova服務中項目可以是雲主機,在Swift和Glance中項目可以是鏡像存儲,在Neutron中項目可以是網絡資源。默認情況下,用戶總是被綁定到項目中。一個項目可以用多個用戶,一個用戶也可以屬於多個項目
role(角色)
- 角色是一組用戶可以訪問的資源權限集合,這些資源包含虛擬機、鏡像、存儲資源等。用戶既可以被添加到全局的角色,也可以被添加到指定項目內的角色。區別是,全局的角色適用於所有項目中的資源權限,而項目內的角色只適用於該項目內的資源權限
service(服務)
- 用戶使用雲中的資源是用鍋訪問服務的方式是實現,Openstack中包含許多服務,如提供計算服務的Nova,提供鏡像服務的Glance。一個服務可以確認當前用戶是否具有訪問其資源的權限。但是當一個用戶嘗試訪問項目內的服務時,那么該用戶必須知道這個服務是否存在以及如何訪問這個服務
token(令牌)
- 令牌是一串數字字符串,用於訪問OpenStack服務API以及資源。一個令牌可以待在特定的時間內生效,並且可以在任意時間釋放。在Keystone中主要是引入令牌機制來保護用戶對資源的訪問
身份認證服務包含以下組件
- 服務器:一個中心化的服務器使用RESTful接口來提供認證和授權服務
- 驅動:驅動或者服務后端被整合到集中式服務器中。它們被用來訪問Openstack外部倉庫的身份信息,並且它們可能已經存在於Openstak被部署在的基礎設施中
- 模塊:模塊運行於使用身份認證服務的OpenStack組件的地址空間中,這些模塊攔截服務請求,獲取用戶憑證,並且將它們送入中央服務器來尋求授權,可以是實現中間件模塊和OpenStack組件間的整合
Glance
鏡像模塊簡述
- 鏡像服務允許用戶發現、注冊和獲取虛擬機鏡像。它提供了一個REST API,允許查詢虛擬機鏡像的元數據,並獲取一個現存的鏡像。可以將虛擬機鏡像存放到各種位置,從簡單的文件系統到對象存儲系統,如OpenStack Swift項目,默認是存儲在本地文件系統上的。其實在生產環境中這個模塊本身不存儲大量的數據,需要掛載后台存儲swift來存放實際的鏡像數據.,
- 在OpenStack環境中,鏡像是用於在計算節點生成虛擬機。脫離了鏡像服務,就無法創建虛擬機,所以鏡像服務是OpenStack的一一個核心服務
Glance主要組件
- glance-api用於接收鏡像API的調用,諸如鏡像發現、恢復以及存儲等。作為一個后台進程,glance-api 對外提供RESTAPI接口,響應用戶發起的鏡像查詢、獲取和存儲的調用。
- glance-registry用於存儲、處理和恢復鏡像的元數據,元數據包括鏡像的的大小和類型等屬性,registry 是-一個內部服務接口,不建議暴露給普通用戶。
- database用於存放鏡像的元數據,可以根據需要選擇數據庫,如MySQL、 SQLite 等。
- storage repository for image files, 一般情況下,glance 並不需要存儲任何鏡像,而是將鏡像存儲在后端倉庫中。Glance支持多種reposi tory.主要包括對象存儲Swift、塊存儲Cinder、VMware的ESX/ESXi或者vCenter.亞馬遜的S3、HTTP 可用服務器、Ceph等
Glance支持的鏡像格式
- Glance 支持多種鏡像格式,包括磁盤格式和容器格式。
- OpenS tack中可以支持多種虛擬化的技術,如KVM、XenServer、 Hyper-V 和VMware等。
- 用戶在上傳鏡像時,需要指定上傳鏡像文件的格式。除了磁盤格式,在Glance中還有容器的格式。- -般在 上傳鏡像時只需指定容器格式為bare,即為空。因為Glance中並沒有真正使用到容器格式。容器格式用來表示虛擬機鏡像文件是否包含了元數據,例如OVF格式
以下列出了Glance常用的鏡像文件格式
RAW是一種沒有格式或裸格式的磁盤文件類型,RAW 對數據不做任何修飾和處理,直接保存最原始的狀態,所以在性能方面非常出色。由於RAW格式保存原始數據,因此更容易和其他鏡像格式進行轉換。 QCOW2是QCOW的升級版本,其主要特性是磁盤文件大小可以動態按需增長,並且不會占用所有的實際磁盤空間大小。例如創建了100GB 的QCOW2格式的磁盤,而實際只保存了2GB數據,那么將只占用了實際物理磁盤的2GB空間。與RAW相比,使用這種格式可以節省磁盤容量。 VHD是微軟公司產品使用的磁盤格式。Virtual PC (微軟早期虛擬化產品)和Hyper-V使用的就是VHD格式.VirtualBox也提供了對VHD的支持。如需在OpenStack.上使用Hyper-V類型的虛擬化,就應上傳VHD格式的鏡像文件。 VMDK是VMware公司產品使用的磁盤格式。目前也是一個開放的通用格式,除了VMware自家的產品外,QEMU和VirtualBox也提供了對VMDK格式的支持。 VDI是Oracle公司的VirtualBox虛擬軟件所使用的格式。 ISO是指- -種存檔數據文件在光盤上的格式。 AKI、ARI、AMI是Amazon公司的AWS所使用的鏡像格式。
Cidenr
Cidenr簡介
- 塊存儲服務(Cinder)提供塊存儲。存儲的分配和消耗是由塊存儲驅動器或者多后端配置的驅動器決定的。還有很多驅動程序可用: NAS/SAN、 NFS, ISCSI、CEPH等。塊存儲適合性能敏感性業務場景,例如數據庫存儲大規模可擴展的文件系統或服務器需要訪問到塊級的裸設備存儲。典型情況下,塊服務API和調度器服務運行在控制節點上。取決於使用的驅動,卷服務器可以運行在控制節點、計算節點或單獨的存儲節點之上。
- 塊存儲服務為OpenStack中的實例提供持久的存儲,塊存儲提供-一個基礎設施,用於管理卷以及和OpenStack計算服務交互,為實例提供卷、快照、卷類型等功能。站在實例的角度,掛載的每個卷都是--塊獨立的硬盤。Cinder提供了從創建卷到刪除卷整個生命周期的管理。
其具體功能包括: 提供REST API接口,使用戶能夠查詢和管理卷、卷快照以及卷類型: 協調卷的創建請求,合理優化存儲資源的分配; 通過驅動架構支持多種后端存儲方式,包括LVM、NFS. Ceph和其他諸如EMC、IBM等商業存儲產品和方案
Cinder的組件有
- Cinder-API用來接受API請求,並將其路由到Cinder-Volume執行
- Cinder-Volume用來與塊存儲服務和Cinder-Scheduler進程進行直接交互。它也可以;與這些進程通過一個消息隊列進行交互。Cinder-Volume服務響應送到塊存儲服務的讀寫請求來維持狀態,它也可以和多種存儲提供者在驅動架構下進行交互。當用戶請求一一個存儲資 源時,由Cinder -API負責接受請求,Cinder-Scheduler負責調度資源,而真正執行存儲任務的是Cinder -Volume.這樣的工作機制使得存儲架構非常容易擴展。當存儲資源不足時,可以增加存儲節點(運行Cinder -Volume)。當客戶 的請求量太大調度不過來時,可以增加調度(運行Cinder-Scheduler)
- Cinder- -Scheduler守護進程會選擇最優存儲節點來創建卷,其工作機制與Nova-Scheduler類似。當需要創建卷時,Cinder- Scheduler根據存儲節點的資源使用情況選擇-一個最合適的節點來創建卷.
- Cinder Baeckup 守護進程服務提供任何種類備份卷到一個備份存儲提供者。就像Cinder-Volume服務,它與多種存儲提供者在驅動架構下進行交互。
- 消息隊列作用是在塊存儲的進程之間路由信息。Cinder 各個子服務通過消息隊列實現進程間通信和相互協作。
Cinder的工作流程
- 用戶向Cinder-API發送創建卷請求:“幫我創建- -個卷 ”;
- Cinder-API 對請求做一些必要處理后,向消息隊列發送一條消息:“讓Cinder- -Scheduler創建-一個卷”;
- Cinder-Scheduler 從消息隊列獲取到消息,然后執行調度算法,從若干存儲節點中選出節點A:
- Cinder-Scheduler 向消息隊列發送- -條消息: “讓存儲節點A創建這個卷”:
- 存儲節點A的Cinder-Volume從消息隊列中獲取到消息,然后通過卷提供者的驅動創建卷。
Neutron
Neutron簡述
- Neutron是 OpenStack項目中負責提供網絡服務的組件,它基於軟件定義網絡的思想,實現了網絡虛擬化下的資源管理。Neutron 的設計目標是實現“網絡即服務(Networking as a Service)”,在設計上遵循了基於 SDN 實現網絡虛擬化的原則,在實現上充分利用了 Linux 系統上的各種網絡相關的技術
Neutron功能
- 二層功能:Neutron支持多種虛擬交換機,一般使用Linux Bridge和Open vSwitch創建傳統的VLAN網絡,以及基於隧道技術的Overlay網絡,如VxLAN和GRE(Linux Bridge 目前只支持 VxLAN)。
- 三層功能:Neutron從Juno版開始正式加入的DVR(Distributed Virtual Router)服務,它將原本集中在網絡節點的部分服務分散到了計算節點上。可以通過namespace中使用ip route或者iptables實現路由或NAT,也可以通過openflow給OpenvSwitch下發流表來實現
- 負載均衡:LBaaS 支持多種負載均衡產品和方案,不同的實現以 Plugin 的形式集成到 Neutron,通過HAProxy來實現。
- 防火牆:Neutron有兩種方式來保障instance和網絡的安全性,分別是安全組以及防火牆功能,均可以通過iptables來實現,前者是限制進出instance的網絡包,后者是進出虛擬路由器的網絡包。
四種網絡
- Local網絡,本地的一個Linux Bridge,除了虛擬機的虛擬網卡不連接其他的網絡設備,實際場景很少使用,可以忽略。
- Flat網絡,不帶vlan tag的網絡,相當於Local網絡的Linux Bridge連接到一個物理網卡,該網絡中的instance能與同網絡的instance通信,且可以跨多個節點,實際場景也很少用到。
- VlAN網絡,可以跨節點,目前是私有雲網絡應用較多
- VXLAN網絡,是基於隧道技術的 overlay 網絡,通過唯一的VNI區分於其他 vxlan 網絡。vxlan中數據包通過VNI封裝成UPD包進行傳輸,因為二層的包通過封裝在三層傳輸,能夠克服vlan和物理網絡基礎設施的限制
- GRE網絡,與vxlan類似的一種overlay網絡,使用IP包進行封裝
Neutron組件
- Neutron Server:對外提供OpenStack網絡API,接收請求,並調用Plugin處理請求。
- Plugin:處理Neutron Server發來的請求,維護OpenStack邏輯網絡的狀態,並調用Agent處理請求。
- Agent:處理Plugin的請求,負責在Network Provider上真正實現各種網絡功能。
- Network Provider:提供網絡服務的虛擬或者物理網絡設備,比如Linux Bridge,OpenVSwitch或者其他支持Neutron的物理交換機。
- Queue:Neutron Server,Plugin和Agent之間通過Messaging Queue通信和調用。
- Database:存放OpenStack的網絡狀態信息,包括Network,Subnet,Port,Router等
Swift
swift簡述
- Swift為OpenStack提供一種分布式、持續虛擬對象存儲,它類似於Amazon Web Service的S3簡單存儲服務。Swift具有跨節點百級對象的存儲能力。Swift內建冗余和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆字節)和大容量(多對象數量)的測度非常高效。
- swift的功能以及特點
海量對象存儲 大文件(對象)存儲 數據冗余管理 歸檔能力-----處理大數據集 為虛擬機和雲應用提供數據容器 處理流媒體 對象安全存儲 備份與歸檔 良好的可伸縮性
swift服務的分類
- Swift代理服務器(Proxy server):用戶都是通過Swift-API與代理服務器進行交互,代理服務器正是接收外界請求的門衛,它檢測合法的實體位置並路由它們的請求。此外,代理服務器也同時處理實體失效而轉移時,故障切換的實體重復路由請求
- Swift對象服務器(Object Server):對象服務器是一種二進制存儲,它負責處理本地存儲中的對象數據的存儲、檢索和刪除。對象都是文件系統中存放的典型的二進制文件,具有擴展文件屬性的元數據(xattr)
- Swift容器服務器(Container Server):容器服務器將列出一個容器中的所有對象,默認對象列表將存儲為SQLite文件(譯者注:也可以修改為MySQL,安裝中就是以MySQL為例)。容器服務器也會統計容器中包含的對象數量及容器的存儲空間耗費。
- Swift賬戶服務器(Account Server):賬戶服務器與容器服務器類似,將列出容器中的對象
- Ring容器:Ring容器記錄着Swift中物理存儲對象的位置信息,它是真實物理存儲位置的實體名的虛擬映射,類似於查找及定位不同集群的實體真實物理位置的索引服務。這里所謂的實體指賬戶、容器、對象,它們都擁有屬於自己的不同的Rings。
Horizon
- Horizon是一個用以管理、控制OpenStack服務的Web控制面板,它可以管理實例、鏡像、創建密匙對,對實例添加卷、操作Swift容器等。除此之外,用戶還可以在控制面板中使用終端(console)或VNC直接訪問實例。
- Horizon的特點
實例管理:創建、終止實例,查看終端日志,VNC連接,添加卷等 訪問與安全管理:創建安全群組,管理密匙對,設置浮動IP等 偏好設定:對虛擬硬件模板可以進行不同偏好設定 鏡像管理:編輯或刪除鏡像 查看服務目錄 管理用戶、配額及項目用途 用戶管理:創建用戶等 卷管理:創建卷和快照 對象存儲處理:創建、刪除容器和對象
- 如上圖所示,整個OpenStack是有控制節點、計算節點、網絡節點、存儲節點四大部分組成(四個節點可以部署在一台機器上)
- 控制節點負責對其余節點的控制,包括虛擬機的建立,遷移,網絡分配,存儲等。因此控制節點需要