OpenStack功能簡介

爲什要用雲?

一.簡單的說就是對資源更加合理的分配,使用,好比硬件的數量,帶寬等等這些,由於你不能機器買來不須要了再賣掉(固然也能夠),帶寬跟機房籤合同得來一年的,中間不夠了也不能加,超了也不退錢web

二.還有就是能夠有一個能夠統一管理的操做平臺,能夠快速的對基礎設施進行建設配置等等,方便了許多算法

 

雲計算是個什麼鬼?

資源能夠循環利用的一個過程(PS:沒有虛擬化就沒有云,所以這二者沒什麼可比性)數據庫

 

現有云模式(複製大神的):編程

1、IaaS:基礎設施即服務(我的比較習慣的):用戶經過網絡獲取虛機、存儲、網絡,而後用戶根據本身的需求操做獲取的資源json

2、PaaS:平臺即服務:將軟件研發平臺做爲一種服務, 如Eclipse/Java編程平臺,服務商提供編程接口/運行平臺等後端

3、SaaS:軟件即服務  :將軟件做爲一種服務經過網絡提供給用戶,如web的電子郵件、HR系統、訂單管理系統、客戶關係系統等。用戶無需購買軟件,而是向提供商租用基於web的軟件,來管理企業經營活動api

 

openstack的核心組件介紹

(openstack就很少說, redhat推進的,不少雲都是基於其開發的,6個月一更新,如今是M版)服務器

重要的:網絡

一.Horizon(控制檯),又名Dashboarddom

就是web展現界面操做平臺,方便用戶交互的

二.Nova(計算)

負責建立,調度,銷燬雲主機

三.Neutron(網絡)

負責實現SDN

四.Swift(對象存儲)

目錄結構存儲數據

五.Cinder(塊存儲)

提供持久化塊存儲,即爲雲主機提供附加雲盤

六.Glance(鏡像)

提供鏡像服務,裝機使用

七.Keystone(認證)

爲訪問openstack各組件提供認證和受權功能,認證經過後,提供一個服務列表(存放你有權訪問的服務),能夠經過該列表訪問各個組件

不重要的:

八.Ceilometer(計費),很明顯自用的根本不須要這功能,並且所謂的監控其實根本也算不上什麼監控

監控性能,計費

九.Heat(編排),這個過高大上了,就目前階段正常企業還搞不定

自動化部署應用,自動化管理應用的整個生命週期.主要用於Paas (原本覺得青雲如今的資源編排就是啊,用了之後看來還不是,只是方便了點)

 

好,直接開大,先來個總體的流程(圖中有錯誤)

從這個圖咱們能夠明白每個組件爲建立一臺vm都提供了什麼,其實就是上面各組件的功能的一個整合圖,這裏須要注意的就是每一步都須要去keystone去進行驗證,下圖有詳細的流程(每一步完成後去驗證的過程省略了)

  1. 登陸界面或命令行經過RESTful API向keystone獲取認證信息。

  2. keystone經過用戶請求認證信息,並生成auth-token返回給對應的認證請求。

  3. 界面或命令行經過RESTful API向nova-api發送一個boot instance的請求(攜帶auth-token)。

  4. nova-api接受請求後向keystone發送認證請求,查看token是否爲有效用戶和token。

  5. keystone驗證token是否有效,若有效則返回有效的認證和對應的角色(注:有些操做須要有角色權限才能操做)。

  6. 經過認證後nova-api和數據庫通信。

  7. 初始化新建虛擬機的數據庫記錄。

  8. nova-api經過rpc.call向nova-scheduler請求是否有建立虛擬機的資源(Host ID)。

  9. nova-scheduler進程偵聽消息隊列,獲取nova-api的請求。

  10. nova-scheduler經過查詢nova數據庫中計算資源的狀況,並經過調度算法計算符合虛擬機建立須要的主機。

  11. 對於有符合虛擬機建立的主機,nova-scheduler更新數據庫中虛擬機對應的物理主機信息。

  12. nova-scheduler經過rpc.cast向nova-compute發送對應的建立虛擬機請求的消息。

  13. nova-compute會從對應的消息隊列中獲取建立虛擬機請求的消息。

  14. nova-compute經過rpc.call向nova-conductor請求獲取虛擬機消息。(Flavor)

  15. nova-conductor從消息隊隊列中拿到nova-compute請求消息。

  16. nova-conductor根據消息查詢虛擬機對應的信息。

  17. nova-conductor從數據庫中得到虛擬機對應信息。

  18. nova-conductor把虛擬機信息經過消息的方式發送到消息隊列中。

  19. nova-compute從對應的消息隊列中獲取虛擬機信息消息。

  20. nova-compute經過keystone的RESTfull API拿到認證的token,並經過HTTP請求glance-api獲取建立虛擬機所須要鏡像。

  21. glance-api向keystone認證token是否有效,並返回驗證結果。

  22. token驗證經過,nova-compute得到虛擬機鏡像信息(URL)。

  23. nova-compute經過keystone的RESTfull API拿到認證k的token,並經過HTTP請求neutron-server獲取建立虛擬機所須要的網絡信息。

  24. neutron-server向keystone認證token是否有效,並返回驗證結果。

  25. token驗證經過,nova-compute得到虛擬機網絡信息。

  26. nova-compute經過keystone的RESTfull API拿到認證的token,並經過HTTP請求cinder-api獲取建立虛擬機所須要的持久化存儲信息。

  27. cinder-api向keystone認證token是否有效,並返回驗證結果。

  28. token驗證經過,nova-compute得到虛擬機持久化存儲信息。

  29. nova-compute根據instance的信息調用配置的虛擬化驅動來建立虛擬機。

這裏面能夠看出組件之間的通信都是經過restapi實現的

各個組件的細節

1.keystone

User:指使用Openstack service的用戶,能夠是人、服務、系統,但凡使用了Openstack service的對象均可以稱爲User。

Project(Tenant):能夠理解爲一我的、或服務所擁有的 資源集合 。在一個Project(Tenant)中能夠包含多個User,每個User都會根據權限的劃分來使用Project(Tenant)中的資源。好比經過Nova建立虛擬機時要指定到某個Project中,在Cinder建立卷也要指定到某個Project中。User訪問Project的資源前,必需要與該Project關聯,而且指定User在Project下的Role。

Role:用於劃分權限。能夠經過給User指定Role,使User得到Role對應的操做權限。Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role。系統默認使用管理Role admin和成員Role _member_ 。

Policy:OpenStack對User的驗證除了OpenStack的身份驗證之外,還須要鑑別User對某個Service是否有訪問權限。Policy機制就是用來控制User對Tenant中資源(包括Services)的操做權限。對於Keystone service來講,Policy就是一個JSON文件,默認是/etc/keystone/policy.json。經過配置這個文件,Keystone Service實現了對User基於Role的權限管理。

Token:是一個字符串表示,做爲訪問資源的令牌。Token包含了在 指定範圍和有效時間內 能夠被訪問的資源。EG. 在Nova中一個tenant能夠是一些虛擬機,在Swift和Glance中一個tenant能夠是一些鏡像存儲,在Network中一個tenant能夠是一些網絡資源。Token通常被User持有。

Credentials:用於確認用戶身份的憑證

Authentication:肯定用戶身份的過程

Service:Openstack service,即Openstack中運行的組件服務。

Endpoint:一個能夠經過網絡來訪問和定位某個Openstack service的地址,一般是一個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都有三種end points. Admin, public, internal。 Admin是用做管理用途的,如它可以修改user/tenant(project)。 public 是讓客戶調用的,好比能夠部署在外網上讓客戶能夠管理本身的雲。internal是openstack內部調用的。三種endpoints 在網絡上開放的權限通常也不一樣。Admin一般只能對內網開放,public一般能夠對外網開放internal一般只能對安裝有openstack對服務的機器開放。

一個實例:

  1. 用戶alice登陸keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登陸時,若是沒有指定scope,project或者domain,獲取的臨時token沒有任何權限,不能查詢project或者catalog)。

  2. alice經過臨時token獲取本身的全部的project列表。

  3. alice選定一個project,而後指定project從新登陸,獲取一個正式的token,同時得到服務列表的endpoint,用戶選定一個endpoint,在HTTP消息頭中攜帶token,而後發送請求(若是用戶知道project name或者project id能夠直接第3步登陸)。

  4. 消息到達endpoint以後,由服務端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發送一個驗證token的請求。(token類型:uuid須要在keystone驗證token,pki類型的token自己是包含用戶詳細信息的加密串,能夠在服務端完成驗證)

  5. keystone驗證token成功以後,將token對應用戶的詳細信息,例如:role,username,userid等,返回給服務端(nova)。

  6. 服務端(nova)完成請求,例如:建立虛擬機。

  7. 服務端返回請求結果給alice

2.glance

3.nova與cinder

nova主要組成:

    nova-api

    nova-scheduler

    nova-compute

    nova-conductor

cinder主要組成:

    cinder-api

    cinder-scheduler

    cinder-volume

 

cinder各組件功能:

Cinder-api 是 cinder 服務的 endpoint,提供 rest 接口,負責處理 client 請求,並將 RPC 請求發送至 cinder-scheduler 組件。

Cinder-scheduler 負責 cinder 請求調度,其核心部分就是 scheduler_driver, 做爲 scheduler manager 的 driver,負責 cinder-volume 具體的調度處理,發送 cinder RPC 請求到選擇的 cinder-volume。

Cinder-volume 負責具體的 volume 請求處理,由不一樣後端存儲提供 volume 存儲空間。

4.neutron

 

neutron包含組件:

    neutron-server

    neutron-plugin

    neutron-agent

neutron各組件功能介紹:

 

1.Neutron-server能夠理解爲一個專門用來接收Neutron REST API調用的服務器,而後負責將不一樣的rest api分發到不一樣的neutron-plugin上。

2.Neutron-plugin能夠理解爲不一樣網絡功能實現的入口,各個廠商能夠開發本身的plugin。Neutron-plugin接收neutron-server分發過來的REST API,向neutron database完成一些信息的註冊,而後將具體要執行的業務操做和參數通知給自身對應的neutron agent。

3.Neutron-agent能夠直觀地理解爲neutron-plugin在設備上的代理,接收相應的neutron-plugin通知的業務操做和參數,並轉換爲具體的設備級操做,以指導設備的動做。當設備本地發生問題時,neutron-agent會將狀況通知給neutron-plugin。

4.Neutron database,顧名思義就是Neutron的數據庫,一些業務相關的參數都存在這裏。

5.Network provider,即爲實際執行功能的網絡設備,通常爲虛擬交換機(OVS或者Linux Bridge)

相關文章
相關標籤/搜索