openstack概述
如何理解雲?
雲是基於“雲計算”技術,實現各種終端設備之間的互聯互通。手機、電視機等都只是一個單純的顯示和操作終端,它們不再需要具備強大的處理能力。用戶享受的所有資源、所有應用程序全部都由一個存儲和運算能力超強的雲端後臺來提供。像我們現在經常使用的在線殺毒、網絡硬盤、在線音樂等都屬於雲服務範疇。
雲計算的概念可以從用戶、技術提供商和技術開發人員三個不同角度來解讀。
用戶看雲計算
從用戶的角度考慮,主要根據用戶的體驗和效果來描述,雲計算可以總結爲:雲計算系統是一個信息基礎設施,包含有硬件設備、軟件平臺、系統管理的數據以及相應的信息服務。用戶使用該系統的時候,可以實現“按需索取、按用計費、無限擴展,網絡訪問”的效果。
簡單而言,用戶可以根據自己的需要,通過網絡去獲得自己需要的計算機資源和軟件服務。這些計算機資源和軟件服務是直接供用戶使用而無需用戶做進一步的定製化開發、管理和維護等工作。同時,這些計算機資源和軟件服務的規模可以根據用戶業務變化和需求的變化,隨時進行調整到足夠大的規模。用戶使用這些計算機資源和軟件服務,只需要按照使用量來支付租用的費用。
技術提供商看雲計算
技術提供商對雲計算理解爲,通過調度和優化的技術,管理和協同大量的計算資源;針對用戶的需求,通過互聯網發佈和提供用戶所需的計算機資源和軟件服務;基於租用模式的按用計費方法進行收費。
技術開發人員看雲計算
技術開發人員作爲雲計算系統的設計和開發人員,認爲雲計算是一個大型集中的信息系統,該系統通過虛擬化技術和麪向服務的系統設計等手段來完成資源和能力的封裝以及交互,並且通過互聯網來發布這些封裝好的資源和能力。
所謂大型集中的信息系統,指的是包含有大量的軟硬件資源,並且通過技術和網絡等對其進行集中式的管理的信息系統。通常這些軟硬件資源在物理上或者在網絡連接上是集中或者相鄰的,能夠協同來完成同一個任務。
信息系統包含有軟硬件和很多軟件功能,這些軟硬件和軟件功能如果需要被訪問和使用,必須有一種把相關資源和軟件模塊打包在一起並且能夠呈現給用戶的方式。虛擬化技術和Web服務爲最爲常見的封裝和呈現技術,可以把硬件資源和軟件功能等打包,並且以虛擬計算機和網絡服務的形式呈現給用戶使用。
所以雲計算(CloudComputing)是分佈式計算(Distributed Computing)、並行計算(Parallel Computing)、效用計算(Utility Computing)、網絡存儲(Network Storage Technologies)、虛擬化(Virtualization)、負載均衡(Load Balance)等傳統計算機和網絡技術發展融合的產物。
好比是從古老的單臺發電機模式轉向了電廠集中供電的模式。它意味着計算能力也可以作爲一種商品進行流通,就像煤氣、水電一樣,取用方便,費用低廉。最大的不同在於,它是通過互聯網進行傳輸的。
雲計算的部署類型
雲計算可以分成三種不同的類型進行部署,分別是私有云、公有云、混合雲。
私有云指的是部署在一個封閉和特定環境(網絡封閉或者服務範圍封閉)中的一個雲計算系統。該系統的系統邊界明確,僅對指定範圍內的人員提供服務。該範圍以外的人員和系統無法使用該雲,比如非服務區域或者非指定內部網絡的人不能使用私有云上的雲服務。
公有云指的是部署在一個開放環境中,爲所有具備網絡接入能力的人和系統提供服務。用戶通過互聯網訪問和使用公有云的服務,但不擁有云也不管理雲。
混合雲指的是以私有云爲基礎,能夠在業務負載超越私有云自身能力或其它指定的情況下,把部分業務負載透明地分流到其它雲上進行處理,使得私有云和部分其它雲的資源整合在一起形成的一個系統。
雲計算的服務類型
雲計算的服務類型可以分爲基礎設施即服務(IaaS)、應用平臺即服務(PaaS)以及軟件即服務(SaaS)三個層次。
基礎設施即服務(IaaS)對雲計算系統的軟硬件和網絡等基礎設施進行集中管理和調度,並且把這些基礎設施以一種可以通過網絡進行訪問和使用的形式進行封裝,並對外以服務的方式提供這些封裝好的IT能力。
應用平臺即服務(PaaS)在雲基礎設施上運行的應用軟件支撐平臺,其提供業務軟件開發所需的業務接口和公共基礎處理的支持,方便開發人員開發特定業務的雲服務;同時,應用平臺即服務(PaaS)爲業務軟件的運行提供運行時刻的語言運行、網絡交互、進程通信、同步控制以及調度等支持,使得雲服務能夠高效可控地運行。
軟件即服務(SaaS)指在雲計算平臺上,通過互聯網直接爲用戶提供軟件服務。軟件即服務(SaaS)使得用戶不用再購買軟件,而是向提供商租用通過互聯網即可使用的軟件來管理企業經營活動,且用戶無需對軟件進行維護。
Openstack的歷史:
2010年,美國國家航空航天局聯手Rackspace,在建設美國國家航空航天局的私有云過程中,創建了openstack的項目,之後他們邀請其他供應商提過組件,建立了一個完整的開源雲計算解決方案。
注:Rackspace (NYSE:RAX)全球三大雲計算中心之一,1998年成立,是一家全球領先的託管服務器及雲計算提供商。
2010年誕生的第一個版本Austin,只包含Rackspace和美國國家航空航天局的組件。之後發佈的版本包含了已加入該項目的供應商開發的附加組件。最初Rackspace獨立管理openstack項目,隨着openstack的不斷髮展,在2012年創建了openstack基金會,該基金會又選舉產生的董事會監管。Openstack的技術委員會由每個核心的軟件項目和項目領導組成。
目前openstack有來自87個國家或地區的850個基金會成員,白金會員提供最高水平的支持,其次是黃金會員,贊助企業和個人會員。
Cloudstack的歷史:
Cloudstack始於cloud.com,其目標是使服務供應商和企業創建,運營能力類似於亞馬遜公司的公有云,私有云。2010年,cloud.com提供了基於GPLv3的社區版本,供用戶免費下載。
思傑公司在2011年7月收購了cloud.com。思傑公司是openstack社區最早期的成員之一,但在2012年決定離開Openstack社區。根據媒體報道,做出這一決定是因爲思傑公司認爲,最初由cloud.com提供的代碼相比openstack更穩定,可爲用戶提供更多的功能。
2012年4月,思傑公司提交了cloud.com的代碼給apache軟件基金會,現在在apache基金會的apache2.0許可證下進行代碼開發,思傑公司將繼續提供版本支持及解決方案支持。由於過度到了apache,其他廠商也紛紛加入到了開發隊伍,增加功能和增強核心軟件。
有一點不同的是,openstack的基金會中會有供應商的名單,不同於cloudstack的發佈者名單。因爲apache基金會負責了大量的項目,而Apache項目成員均爲個人名義被列入,而不是他們所代表的公司。
在apache項目中,由感興趣的公司制定獨立工作人員的工作項目。當前cloudstack項目成員有一些思傑公司的員工和一些不太知名的公司,項目的發展方向由個別參與者所代表的僱主的意願來決定。
Openstack與cloudstack的歷史比較
Cloud.com致力於開發和發展一個更大的開源社區,因此,大部分cloudstack核心組件由cloud.com開發,然後由思傑公司增強。
相比之下,openstack項目從最開始就發展開放社區,其直接結果是,openstack裏聚集了比cloudstack更多的主流供應商。在大多數情況下,這些廠商開發的組件第一時間提供給openstack,之後纔是cloudstack提供接口。
此外,思科和Nicira公司已經成爲openstack網絡組件neutron的主要開發者。Neutron接收來自虛擬機的指令來定義虛擬機所需的網絡,然後發送指令給交換機和路由器來創建這些網絡。
每個交換機的供應商必須爲Neutron提供插件,這個插件在Neutron中轉換爲特定廠商設備的特定命令語法。Extreme Networks和brocade這兩個openstack基金會成員同樣先爲openstack提供插件,在進行cloudstack支持。
Openstack也有不完善的地方,如openstack相對於cloudstack來說更加複雜,對終端用戶的支持不夠,在安裝部署上不如cloudstack便捷,在界面顯示方面也不如cloudstack豐富。
要確定企業的合適部署,就必須自行對比每一個解決方案,然後進行選擇,思傑公司向大型服務提供商,大學以及其他機構展現了cloudstack的成熟和穩定。而要關注openstack的穩定性可以查看IBM,戴爾和rackspace等公司的解決方案,這兩款產品一直在持續發展,提供了一系列的存儲和網絡選項。相比開源項目,openstack是一個更高級且更現代化的開源項目,因爲它是高度協作的產物。Openstack的支持者都是世界頂級的供應商,可以看出openstack備受青睞,也是開源界的明星產品。
支持openstack項目的主流供應商
X86服務器供應商 | HP(惠普) | DELL(戴爾) | IBM |
Linux供應商 | Redhat | Suse | Canonical |
路由器供應商 | Cisco | Juniper network | Alcatel-luceent |
刀片服務器供應商 | HP | Cisco | IBM |
交換機供應商 | Cisco | HP | Juniper network |
存儲供應商 | Emc | IBM | NetApp |
Hypervisor供應商 | Vmware | Kvm | Xen |
Openstack的功能與作用
當今的數據中心,許多服務器都遇到過同樣的問題,即計算,電源,網絡帶寬等資源的利用率不足。例如,某個項目可能會需要大量的計算資源來完成計算,而一旦完成了計算任務,將不再需要那麼多的計算資源。當用戶想要一種靈活的,按需供給計算資源的服務,通過自動化或很少的人工干預就能使用時,那麼雲計算就是最好的選擇之一。雲計算通常包含了一個服務責任,表示雲計算服務提供商承諾的性能,規格,可用率等。雲計算服務讓用戶通過一個共享的計算資源,網絡帶寬,存儲池,運行應用程序或服務來完成計算工作,並按資源的使用來計費。
關於雲計算服務的主要特點如下:
按需自助服務:用戶可以提供自己的需要訂購所需的計算、存儲和網絡資源,而幾乎無需人工干預。
網絡訪問:可以通過網絡使用任意類型的異構計算能力,通過標準化的機制調用計算資源而不受限於具體的訪問設備
資源池:多個用戶可以同時訪問和使用雲計算提供的計算服務,服務提供商根據消費者的計算要求或實際使用量和分配實際的計算資源。
彈性;可根據需要不停機或短暫停機後迅速垂直或橫向擴展
計量或測量服務:按照使用的時間,傳輸或存儲的字節數支付雲計算服務,並提供消費者具體的資源消費圖表。同時,他也可以根據消費者的不同需求提供定製化的計費模式
雲計算是網格計算(網格計算是分佈式計算(DistributedComputing)的一種,整合大量異構計算機的閒置資源(如計算資源和磁盤存儲等),組成虛擬組織,以解決大規模計算問題。),分佈式計算,並行計算,效用計算(效用計算(Utility computing)是一種提供服務的模型,在這個模型裏服務提供商提供客戶需要的計算資源和基礎設施管理,並根據應用所佔用的資源情況進行計費,而不是僅僅按照速率進行收費.),聯機存儲技術,虛擬化,負載均衡等一些列傳統計算技術和網絡技術發展融合的產物。它旨在通過網絡將多個成本低廉的計算實體整合成一個大型的計算資源池,並藉助Saas,Paas,Iaas等服務模式,將強大的計算能力分發到終端用戶手中。雲計算的核心理念就是,不斷的提高雲端處理能力,減輕用戶負擔,將一系列的IT能力以服務的形式提供給用戶,簡化用戶終端的處理負擔,最終使用成爲一個單純的輸入/輸出設備,享受雲提供的強大計算處理及服務能力。
Openstack具有建設這樣資源池的能力,通過openstack的各種組件多種模式的排列組合,可以搭建成各種規模的雲,這些雲可以是私有云,公有云,混合雲。
Openstack具有三大核心功能,即計算,存儲,網絡,分別對應相應的項目Nova,Cinder等。其中Nova提供了計算資源的管理,可以管理跨服務器網絡的vm實例。同時Nova還提供了對多種Hyperviosr的支持,如KVM,QEMU,Xen,LXC,Vmware,Hyper-V,Powervm等。Cinder提供了存儲資源的管理,可以管理各個廠商提供的專業存儲設備。
Openstack關鍵組件
服務名稱 | 項目名稱 | 描述 |
Dashboard | Horizon | 基於openstackAPI接口使用django開發的web管理 |
Compute | Nova | 通過虛擬化技術提供計算資源池 |
Networking | Neutron | 實現了虛擬機的網絡資源管理 |
Storage存儲 | ||
Object Storage | Swift | 對象存儲,適用於“一次寫入,多次讀取” |
Block storage | Cinder | 塊存儲,提供存儲資源池 |
Shared server(共享服務) | ||
Identity | Keystone | 認證管理 |
Imageservice | glance | 提供虛擬機鏡像的註冊和存儲管理 |
Telemetry [t'lemtr] | Ceilometer [si'lmt] | 提供監控和數據採集,計量服務 |
Higher-level service(高級服務) | ||
Orchestration [,ks'tren] | Heat | 自動化部署的組件 |
DatabaseService | Trove | 提供數據庫應用服務 |
Mysql:
Openstack所使用的數據庫,包括nova,glance,cinder等在內的組件都會建立自己的數據庫,保存一些必要的數據。
Keystone:
Openstack的用戶認證組件,它的功能主要是建立管理項目的用戶和各種服務端口,以及進行用戶的身份認證,若要使用openstack的任意的API,第一步就必須通過keystone的驗證。
keystone的主要功能是提供認證和編錄服務
keystone提供了兩種認證方式:token,identifybackend)
token(令牌,實際是一個隨機字串,在認證時直接使用),主要用於內部各組件之間
identify(賬號,密碼),需要用戶登陸時,如用戶通過horizon訪問雲資源
catalog(編錄):保存當前openstack架構中的調用接口(ip地址,端口,url信息),openstack各個組件之間交互通過api接口,openstack架構各個組件通過http的restful機制(一種軟件架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制)遠程過程調用,基於URI輸出。
policy:管理策略,如與用戶管理、虛擬機實例管理有關的策略
Glance:
用來存放管理虛擬機鏡像和快照的服務,這也是一個最小架構中必須有的服務。
glance存放鏡像的元數據的
registry:調用數據庫的接口,檢索接口
database:映像文件的存儲位置等
swift:分佈式存儲
Neutron:
網絡服務,用來提供虛擬機網絡通信的組件,負責接收對網絡的調用請求。
Nova:
Nova是個至關重要的組件,也是個相對龐大的組件,其中有很多服務,它是進行生成虛擬機工作的主要服務。
Nova計算節點,是openstack的最核心的節點,運行虛擬機實例,分配cpu、內存,nova-compute本身並不能運行虛擬機,是要通過hypervisor,nova-compute通過api調用hypervisor,,nova-compute支持那種api就可以調用那種hypervisor,如nova-compute支持libvirt api就可以調用libvirt支持的hypervisor(如kvm),xenapi可以調用xen
Cinder:塊存儲
用來創建,刪除及管理volume(虛擬磁盤卷),以及給volume做快照等服務的組件
swift:分佈式文件系統,用來存儲鏡像文件模板
Horizion:
Openstack的web管理頁面,使用django框架開發。Web管理頁面包含了日常使用的大部分功能,提供給用戶一個最直觀的展現方式。很多簡單的二次開發都是從Horizon開始的。
Rabbitmq:
在openstack中,各個服務之間是通過消息來交互的,因爲openstack使用AMQP作爲消息傳遞的技術,所以rabbitmq,qpid,zeromq等支持AMQP的軟件都是被openstack所支持的。Rabbitmq是第一個被openstack所使用的消息傳遞軟件。Openstack通過AMQP實現RPC服務,來保證不同組件之間的通信,rabbitmq是控制節點中的一個非常關鍵的服務。
虛擬機運行在nova節點上的,所有組件都圍繞vm工作
keystone概述
keystone是openstack的組件之一,用於爲openstack家族中的其他組件成員提供統一的認證服務,包括身份驗證、令牌發放和校驗、服務列表、用戶權限定義等。其中服務列表體現在用戶登錄openstack系統後能夠使用的計算,網絡,存儲等服務的列表。通過下面的圖可以看出openstack中所有組件的認證,都需要keystone的參與,所以keystone自身的高可用也非常重要。
keystone服務主要有兩個功能
1. 實現用戶管理:主要是認證和授權
Keystone實現認證的方式有兩種:token認證,用戶名密碼認證
實現服務管理:openstack集羣中每一個服務都有可能在獨立的節點上,這些節點的IP地址,監聽的端口,訪問路徑uri都要在Identity中進行註冊,部署identity後,只需向外輸出一個identity的路徑就可以查找到其他組件(image,nova,compute…)的訪問路徑了。即存儲所有可用服務的信息,包含其API的訪問入口(API endpoint路徑)。
keystone的關鍵術語:
User:一個user可以關聯至多個tenant
Tenant(租戶):一個tenant對應一個project或一個組織,一個租戶相當於一個公司或一個項目,openstack是可以實現公有云的,每一個項目中也有可能會包含多個虛擬機實例,項目也可以是一個tenant
Tenant的另一種解釋:Project(Tenant):可以理解爲一個人、或服務所擁有的資源集合。在一個Project(Tenant)中可以包含多個User,每一個User都會根據權限的劃分來使用Project(Tenant)中的資源。比如通過Nova創建虛擬機時要指定到某個Project中,在Cinder創建卷也要指定到某個Project中。User訪問Project的資源前,必須要與該Project關聯,並且指定User在Project下的Role。
Role:角色主要實現向User授權的,openstack有幾個內置的角色,admin,member等
Token:定義了令牌的有效時間和令牌中用戶的權限,項目等基本信息
Service:對應業務模型服務,如計算(compute),存儲(volume),鏡像(Glance)等
Endpoint:服務的訪問入口每個服務都會有自己的訪問入口,也稱之爲訪問端點。
Endpoint:一個可以通過網絡來訪問和定位某個Openstackservice的地址,通常是一個URL。比如,當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然後通過訪問該endpoint去獲取Glance服務。我們可以通過Endpoint的region屬性去定義多個region。Endpoint 使用對象分爲三類:
admin url –>給admin用戶使用,Post:35357
internal url –>OpenStack內部服務使用來跟別的服務通信,Port:5000
public url –>其它用戶可以訪問的地址,Post:5000
創建完service後創建API EndPoint. 在openstack中,每一個service都有三種endpoints. Admin, public, internal。 Admin是用作管理用途的,如它能夠修改user/tenant(project)。 public 是讓客戶調用的,比如可以部署在外網上讓客戶可以管理自己的雲。internal是openstack內部調用的。三種endpoints 在網絡上開放的權限一般也不同。Admin通常只能對內網開放,public通常可以對外網開放internal通常只能對安裝有openstack服務的機器開放。
用戶--角色--服務的交互圖解:
keystone的邏輯架構圖:
1. 可以使用kvs或memcached實現令牌(token)後端存儲。Token後端存儲用來存儲基於token認證相關的token信息
2. Identitybackend(用戶名和密碼的認證方式),實現方式有:kvs,pam,sql,ldap,etc.
3. Catalogbackend(編錄服務後端),keystone可以直接連接到memcached中,將token保存下來,事實上keystone沒有memcached也可以正常工作,因爲keystone的token backend可以基於keystone自己的存儲提供。實現方式有kvs,sql,etc
4. Policykackend(存儲策略):存儲訪問時使用的規則及自定義的其他規則。
keystone驗證流程:以創建虛擬機的流程爲例
keystone的工作流程總結:
用戶像keystone發送用戶名和密碼,通過驗證後,keystone會返回一個臨時token和一個service catalog的列表。
用戶用這個臨時的token向catalog列表中keystone的endpoint請求用戶對應的tenant信息,keystone驗證token通過後會返回用戶對應的tenant列表。
用戶從列表中選取tenant,再次向keystone請求,keystone驗證通過後,返回與該tenant相關的catalog信息和token。
用戶用該token以及tenant/user信息向catalog中的nova服務器端點請求開啓虛擬機服務。nova向keystone請求驗證:<1>.token是否合法<2>.這個租戶和用戶是否有權限來向nova請求服務?
keystone返回給nova: <1>.租戶-用戶具備訪問nova權限。<2>. token合法<3>. token屬於該租戶-用戶。
nova根據自己的規則判斷用戶是否具備開啓虛擬機的權限,如果具備,啓動虛擬機,並向用戶報告狀態。
Keystone認證流程:
用戶alice登錄keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登錄時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何權限,不能查詢project或者catalog)。
alice通過臨時token獲取自己的所有的project列表。
alice選定一個project,然後指定project重新登錄,獲取一個正式的token,同時獲得服務列表的endpoint,用戶選定一個endpoint,在HTTP消息頭中攜帶token,然後發送請求(如果用戶知道project name或者project id可以直接第3步登錄)。
消息到達endpoint之後,由服務端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發送一個驗證token的請求。(token類型:uuid需要在keystone驗證token,pki類型的token本身是包含用戶詳細信息的加密串,可以在服務端完成驗證)
keystone驗證token成功之後,將token對應用戶的詳細信息,例如:role,username,userid等,返回給服務端(nova)。
服務端(nova)完成請求,例如:創建虛擬機。
服務端返回請求結果給alice。
Glance概述
glance是openstack項目中負責鏡像管理的模塊,其功能包括虛擬機鏡像的查找、註冊和檢索等操作。
glance提供restful api可以查詢虛擬機鏡像的metadata,並且可以獲得鏡像
通過glance,虛擬機鏡像可以被存儲到多種存儲上,比如簡單的文件存儲或者對象存儲
glance在Openstack中的位置:
Glance基本概念:
image identifiers:就是image URI,格式:<GlanceServer Location>/images/<ID>全局唯一
Image status:
queued:鏡像ID已經被保留,鏡像的metadata已經被寫到數據庫中,但鏡像還沒有上傳
saving:鏡像正在被上傳
active:鏡像可以使用了
killed:鏡像損壞或者不可用
deleted:鏡像被刪除
Disk format
raw:raw不是一種真正的磁盤格式,而是代表虛擬機所使用的原始鏡像;它並不存儲元數據,因此可以作爲保證虛擬機兼容性的候選方案,然而也正因爲它不存儲元數據,因此不能支持某些高級特性,比如快照和壓縮等。所以raw性能較好,如果初始創建的虛擬磁盤是10GB,就在文件系統佔10G的存儲空間。
vhd:vmware,xen,microsoft,virtualbox支持的格式
vmdk:common format 開源社區通用的,規範化的磁盤格式
vdi:virtualbox,qemu emulator這兩類hypervisor支持的格式
iso: optical disc光盤鏡像,主要用來做歸檔之用。
qcow2:qemu emulator主要用於qemu類型的虛擬機上,特點在於虛擬磁盤大小是動態擴展,如果初始創建的虛擬磁盤大小是10G,但在文件系統不會佔10G空間,用戶寫入多少就佔多少空間。即隨着實際的使用空間,虛擬磁盤的物理使用空間會動態變化,但性能比起raw格式會差一些,但qcow2格式支持對虛擬機做快照。
aki:Amazon kernel image
ari:Amazon ramdisk image
ami:Amazone machine image
Container format:
上文中提到了磁盤的格式,但是若要創建一個虛擬機不能僅僅是定義磁盤格式,還要去定義虛擬機使用了多少個CPU,內存是多少,所支持的操作系統的架構是什麼樣的等等元數據信息,Container format可以使用的選項有:
Bare
ovf
aki
ami
ari
image-create命令至少要接收三個參數:--name 、--container_format、--disk_format。其中--disk_format用於指明磁盤鏡像文件的格式,包括raw,qcow2,vhd,vmdk,iso,vdi,aki,ari,ami等。--container_format用於表明鏡像文件是否包含了虛擬機的元數據信息,然而,目前compute服務並未使用此信息,因此,在不確定的情況下可以將其指定爲bare,而常用的格式主要有bare(沒有container或元數據信息)、ovf、aki、ari或ami幾種。
Glance的基本架構:
Glance API:對外提供鏡像接口服務,包括鏡像的上傳和下載,更改信息以及虛擬機、雲硬盤快照管理等接口服務。
Glance Registry(註冊服務):存儲鏡像元數據信息與數據庫交互實現鏡像基礎信息存儲
store adapter(存儲適配器):鏡像本身的存儲,提供多種存儲適配,支持亞馬遜雲存儲S3(Simple Storage Service簡單存儲服務),openstack自由的swift(對象存儲)以及常用的文件存儲系統,當然也可以自行開發拓展到其他存儲上。
store-Adapter
S3
Swift
Filesystem:默認後端存儲
RBD:Ceph的Randos blockdevice(RBD)
HTTP:通過http在internet上讀取可用的虛擬機鏡像。
其他分佈式存儲,比如sheepdog等
Nova概述
Nova是什麼?
openstack是由Rackspace和NASA共同開發的雲計算平臺,類似於Amazon EC2和S3的雲基礎架構服務,nova在openstack中提供計算服務。nova服務由多個組件共同組成,這些組件用於提供API,Compute核心組件、網絡功能、控制檯接口,命令行客戶端及其他組件
nova在openstack中的位置
nova的架構:
Compute服務有多個組件共同組成,這些組件用於提供API,Compute核心組件、網絡功能、控制檯接口,命令行客戶端及其他組件
核心組件:
nova-api:接收並響應終端用戶對compute api接口調用的服務,除了支持openstack compute API還兼容amazon ec2 api以及專用於特權用戶執行管理工作的admin API。另外nova-api還用於管理instance,以及強制生效指定的策略等。
Nova-api-metadata服務:接收並響應有instance發起的metadata調用請求,僅用於nova-network的multi-host模型中。
nova-compute:主要功能是藉助於Hypervisor的api(KVM,QEMU,Vmware api)啓動及終止虛擬機實例的。主要作用就是在對應的Hypervisor中啓動或停止虛擬機的進程,但是他的工作過程主要是從隊列中接收操作請求並執行相應的操作,如啓動虛擬機操作,在數據庫中更新其虛擬機的狀態等等。
nova-scheduler: Nova-scheduler進程:compute中最簡單的組件,負責從隊列中取出一個instance的請求並決定由哪個compute server來運行之。
nova-conductor:是一個模塊,位於nova-compute和數據庫的中間層,用來避免多個nova-compute與數據庫直接進行交互,導致數據庫直接暴漏給nova-compute的。所以nova-compute啓動虛擬機實例完成以後,對於更新數據庫狀態的請求操作不是直接由nova-compute向數據庫發起的,而是扔回到對列中,再在由Nova-conductor取回之後執行相關更新操作。
網絡功能:
Nova-network守護進程:類似於nova-compute,它負責從隊列取出網絡相關的任務並執行相關的操作,包括設定橋接接口及修改iptables規則等。不過,此功能已經由openstack中專用的組件neutron來實現。
Nova-dhcpbridge腳本:通過dnsmasq的dhcp-script來跟蹤IP地址租約並記錄與數據庫中,目前已經由專門的服務組件neutron來實現。
控制檯接口:控制檯接口的作用是,當我們在openstack中啓動了虛擬機實例以後,這些實例有可能運行在不同的nova-compute節點(計算節點)上,用戶連接openstack訪問虛擬機實例時,尤其是在沒有配置網絡接口地址,也不知道在那一臺計算節點,用戶是無法連接到虛擬機實例的,此時只能通過控制檯實現。
在openstack中每一個虛擬機實例啓動之後,可以監聽在一個VNC的接口上,當用戶使用openstack的dashboard圖形界面接口中可以對虛擬機進行啓動,停止,網絡相關的配置,而在這個接口中基於python web打開了一個VNC的客戶端工具,VNC的客戶端工具本身就支持基於瀏覽器遠程瀏覽,此時虛擬機是不需要配置IP地址,只需通過VNC協議基於瀏覽器打開控制檯的方式連接虛擬機。
nova-consoleauth:認證由consoleproxies(控制檯代理)傳入的用戶認證token
nova-novncproxy:向經由vnc接口連入各instance的請求提供代理服務,支持基於瀏覽器的
Nova-x***vncroxy守護進程:向經由vnc接口連入個instance的請求提供代理服務,支持基於專爲openstack設計的java客戶端 接口
nova-cert:管理x509格式的證書。
Client:
nova-client:向nova-api發送請求的client
nova-manage:管理員控制命令,查看和管理包括服務進程,虛擬機,物理主機,套餐,網絡,存儲等
其他組件:
Queue(AMQP):在各進程間傳遞消息的消息隊列服務,支持rabbitmq,apache qpid以及zeromq
Sql database: 爲雲基礎架構存儲構建及運行時的數據,包括可用的實例類型,運行中的實例,可用的網絡等信息。理論上,openstack可支持任何SQL類型的數據庫管理系統,但實際用的最多是Sqllite,Mysql,Postgresql。
nova內部組件的交互:
爲了使得讓調用者調用發出請求之後,能立即返回,當被調用者處理結束之後又能通知給調用者,在調用者和被調用者之間需要一個messaging broker(消息代理)負責完成,messaging broker主要是用來實現消息傳遞及消息存儲隊列,我們可以把這個消息傳遞的服務安裝一個獨立的服務器上面,也可以和控制節點一起部署,當一個調用者需要調用其他主機提供的服務時,調用者只需將請求扔給消息隊列服務器,消息隊列服務器也能夠知道哪些主機能提供相應的服務,所以會把相應的請求在扔給提供服務的主機,當提供服務的主機處理完之後將結果扔回消息隊列中,隊列服務器將結果返回給請求者。但是很多時候,消息隊列的工作機制是這樣的,那些能夠提供服務的主機爲了儘早知道有哪些與自己相關的請求需要進行服務,可以進行訂閱與自己相關的消息,這種訂閱服務意味着自行向隊列註冊並監聽某一個隊列(或者可以認爲自己偵聽某一類的消息,一旦有相應的消息扔到隊列中,訂閱者會立即獲得相應的消息,並提供相應的服務),而對於發送請求的我們通常稱之爲消息的生產者,也叫消息的發佈者。
openstack中新建雲主機的流程
虛擬機啓動過程如下:
界面或命令行通過RESTful API向keystone獲取認證信息。
keystone通過用戶請求認證信息,並生成auth-token返回給對應的認證請求。
界面或命令行通過RESTful API向nova-api發送一個boot instance的請求(攜帶auth-token)。
nova-api接受請求後向keystone發送認證請求,查看token是否爲有效用戶和token。
keystone驗證token是否有效,如有效則返回有效的認證和對應的角色(注:有些操作需要有角色權限才能操作)。
通過認證後nova-api和數據庫通訊。
初始化新建虛擬機的數據庫記錄。
nova-api通過rpc.call向nova-scheduler請求是否有創建虛擬機的資源(HostID)。
nova-scheduler進程偵聽消息隊列,獲取nova-api的請求。
nova-scheduler通過查詢nova數據庫中計算資源的情況,並通過調度算法計算符合虛擬機創建需要的主機。
對於有符合虛擬機創建的主機,nova-scheduler更新數據庫中虛擬機對應的物理主機信息。
nova-scheduler通過rpc.cast向nova-compute發送對應的創建虛擬機請求的消息。
nova-compute會從對應的消息隊列中獲取創建虛擬機請求的消息。
nova-compute通過rpc.call向nova-conductor請求獲取虛擬機消息。(Flavor)
nova-conductor從消息隊隊列中拿到nova-compute請求消息。
nova-conductor根據消息查詢虛擬機對應的信息。
nova-conductor從數據庫中獲得虛擬機對應信息。
nova-conductor把虛擬機信息通過消息的方式發送到消息隊列中。
nova-compute從對應的消息隊列中獲取虛擬機信息消息。
nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求glance-api獲取創建虛擬機所需要鏡像。
glance-api向keystone認證token是否有效,並返回驗證結果。
token驗證通過,nova-compute獲得虛擬機鏡像信息(URL)。
nova-compute通過keystone的RESTfull API拿到認證k的token,並通過HTTP請求neutron-server獲取創建虛擬機所需要的網絡信息。
neutron-server向keystone認證token是否有效,並返回驗證結果。
token驗證通過,nova-compute獲得虛擬機網絡信息。
nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求cinder-api獲取創建虛擬機所需要的持久化存儲信息。
cinder-api向keystone認證token是否有效,並返回驗證結果。
token驗證通過,nova-compute獲得虛擬機持久化存儲信息。
nova-compute根據instance的信息調用配置的虛擬化驅動來創建虛擬機。
nova通用部署模式,每個服務部署在單個服務器上
高可用的部署模式
nova常見錯誤排查:
401認證錯誤
檢查用戶名和密碼以及tenant是否正確
檢查認證配置是否正確
409錯誤
nova服務是否正常運行
no valid host錯誤
查看是不是沒有可用的資源
網絡不通
查DHCP、查路由、查openvswitch
網絡基礎概念
基礎概念:
交換機和路由器的區別有哪些:
工作層次不同,交換機工作在L2層,路由器工作在L3層
數據轉發依據對象不同,交換機基於MAC轉發,路由器基於IP數據包轉發
解決的問題不同
交換機解決同網段通信,路由器解決多網段之間通信
linux中的路由表,其實就是使用軟件實現的路由器
混雜模式(promiscuous mode)
2 接收所有經過設備的數據包
2 一般用於網絡抓包
DHCP
功能
統一爲主機分配IP地址
好處:
降低了配置和部署設備時間
降低了發生配置錯誤的可能性
可以集中化管理設備的IP地址分配
DHCP過程:
linux中實現DHCP的實現
工具軟件:dnsmasq
網絡命名空間
獨享網絡資源
interface
iptables
router
LXC
網絡隔離
網絡overlay
下圖爲使用了網絡命名空間和未使用網絡命名空間的示意圖
疊加網絡:
一個數據包(或幀)封裝在另一個數據包內,被封裝的包轉發到隧道端點後在被解封裝
疊加網絡就是使用這種所謂“包內之包”的技術安全的將一個網絡隱藏在另一個網絡中,將網絡遷移到另一個端點的技術
疊加網絡的實現方式:
VLAN :L2 over L2
GRE:L3 over L3 (udp)
Vxlan: L2 over L3 (udp)
疊加網絡解決了運行問題:
數據中心網絡數量限制:
1-4096個VLAN 突破至1600萬VLAN
物理網絡基礎設施限制
不改變物理網絡的前提下變更vm網絡拓撲
vm遷移
多租戶場景:支持IP地址重疊
VLAN虛擬局域網
2層廣播隔離
靈活的組網
最多4096VLAN
直接在L2實現
通用路由封裝協議(GRE)
跨不同網絡實現二次IP通信
L3上面封裝L3
封裝在IP報文中
點對點的隧道通信