OpenStack -----基礎理論篇

前言:

OpenStack是一個開源的雲計算管理平臺項目,是一系列軟件開源項目的組合。由NASA(美國國家航空航天局)和Rackspace合作研發併發起,以Apache許可證(Apache軟件基金會發布的一個自由軟件許可證)授權的開源代碼項目。

OpenStack爲私有云和公有云提供可擴展的彈性的雲計算服務。項目目標是提供實施簡單、可大規模擴展、豐富、標準統一的雲計算管理平臺

一、雲計算概述

1.1 雲計算概念
  • 網絡資源
  • 存儲資源
  • 服務器資源
1.2 雲計算服務類型
  • ① IaaS(基礎架構即服務)

    用戶能從中申請到硬件或虛擬硬件,包括裸機或虛擬機,然後在上邊安裝操作系統或其他應用程序

    OpenStack就是一種IaaS

  • 應用

    提供底層IT基礎設施服務,包括處理能力,存儲空間、網絡資源

    一般面對對象是IT管理人員

  • ② PaaS(平臺即服務)

    用戶能從中申請到一個安裝了操作系統以及支撐應用程序運行所需要的運行庫等軟件的物理機或虛擬機,然後在上邊安裝其他應用程序,但不能修改已經預裝好的操作系統和運行環境

  • 應用

    把安裝好開發環境的系統平臺作爲一種服務通過互聯網提供給用戶

    一般面對對象是開發人員

  • ③ SaaS(軟件即服務)

    用戶可以通過網絡以租賃的方式來使用一些軟件,而不是購買,比較常見的模式是提供一組賬號密碼

  • 應用

    直接通過互聯網爲用戶提供軟件和應用程序的服務

    一般面向對象是普通用戶
    在這裏插入圖片描述

二、OpenStack 介紹

1.1 OpenStack概述
  • 一款雲計算模型中的一個項目
  • NASA和Rackspace合作研發併發起
  • 以Apache許可證授權的自由軟件和開放式源代碼項目
  • 旨在爲公共及私有云的建設與管理提供軟件的開源項目
  • 覆蓋了網絡、虛擬化、操作系統、服務器等各個方面
1.2 opestack 特性
  • 快速:OpenStack安裝部署所需的時間少。
  • 靈活:OpenStack獲得的各大廠商的支持,兼容性和適用性強,OpenStack兼容其他公有云,方便用戶進行數據遷移。
  • 開源,OpenStack的使用成本相對低廉,還有源源不斷的更新(頻率爲半年)
  • 可擴展性:OpenStack 採用模塊化的設計,支持主流發行版本的linux系統,可以通過橫向擴展,增加節點、添加資源。

Openstack 項目採用 Apache2 許可, 意味着第三方廠家可以重新發布源代碼。行業標準: 衆多 IT 領軍企業都加入到 OpenStack 項目, 意味着 OpenStack 在未來可能形成雲計算行業標準。

1.3 OpenStack 節點類型
1.3.1 控制節點
  • 顧名思義就是OpenStack中實現數據中心控制的節點,管理 OpenStack的所有服務組件,所有組件不管在哪裏,都需要在控制節點上完成類似註冊的工作

  • 控制節點必須安裝三種類型的軟件

    • 第一種

      控制接節點上必須安裝的是一些相對於 Openstack服務來說的底層的軟件,這些底層的軟件需要爲openstock組件來提供服務,這些軟件有DB軟件,消息隊列軟件, Memorycache(高速緩衝存儲器)和Etcd(key-value鍵值對數據庫)等

    • 第二種

      除了底層軟件之外,控制節點上必須安裝三個 OpenStack的核心組件

      Keystone和glance是完整的安裝在控制節點上的,Nova安裝了一部分,Nova的安裝是爲了節點上的計算服務

      Glance服務是可以控制節點上剝離的,一般 Glance佔用資源小。一般大家都安裝在控制節點上的

      控制節點是可以安裝 Nova computed的,但是生產環境是不會這麼幹的

    • 第三種

      除了底層服務軟件和核心組件之外,OpenStack還支持其他可選的組件,比如你的集羣中有存儲接口,那麼在 OpenStack上需要安裝管理存儲節點和對應的服務組件等等,類似核心組件Nova的套路

  • 控制節點包括以下三種服務

  • ① 管理支持服務

    • 管理支持服務包含MySQL和Qpid兩個服務

      ① MySQL:數據庫作爲基礎/擴展服務產生的數據存放的地方

      ② Qpid:消息代理(也稱消息中間件)爲其他各種服務之間提供了統一的消息通信服務

  • ② 基礎管理服務

    • 基礎管理服務包含以下五個服務

      ① keystone:認證管理服務,提供了其餘所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作爲統一的數據庫

      ② glance:鏡像管理服務,提供了對虛擬機部署的時候所能提供的鏡像的管理,包含鏡像的導入,格式,以及製作相應的模板

      ③ Nova:計算管理服務,提供了對計算節點的Nova的管理,使用Nova-API進行通信

      ④ Neutron:網絡管理服務,提供了對網絡節點的網絡拓撲管理,同時提供Neutron在Horizon的管理面板

      ⑤ Horizon:控制檯服務,提供了以Web的形式對所有節點的所有服務的管理,通常把該服務稱爲DashBoard

  • ③ 擴展管理服務

    • 擴展管理服務包含以下五個服務

      ① Cinder:提供管理存儲節點的Cinder相關,同時提供Cinder在Horizon中的管理面板

      ② Swift:提供管理存儲節點的Swift相關,同時提供Swift在Horizon中的管理面板

      ③ Trove:提供管理數據庫節點的Trove相關,同時提供Trove在Horizon中的管理面板

      ④ Heat:提供了基於模板來實現雲環境中資源的初始化,依賴關係處理,部署等基本操作,也可以解決自動收縮,負載均衡等高級特性。

      ⑤Centimeter:提供對物理資源以及虛擬資源的監控,並記錄這些數據,對該數據進行分析,在一定條件下觸發相應動作

控制節點一般來說只需要一個網絡端口用於通信/管理各個節點

1.3.2 網絡節點
  • 網絡節點只有Neutron組件,網絡節點上的neutron安裝core plugin(核心插件)ML2 和service plugin(服務插件)L3 service,具體的 Service Plugin可以根據需求選擇
  • 網絡節點包含以下三個網絡端口
    • eth0:用於與控制節點進行通信
    • eth1:用於與除了控制節點之外的計算/存儲節點之間的通信
    • eth2:用於外部的虛擬機與相應網絡之間的通信
1.3.3 計算節點
  • 計算節點包含以下三個服務

    • 基礎服務

      ① Nova:提供虛擬機的創建,運行,遷移,快照等各種圍繞虛擬機的服務,並提供API與控制節點對接,由控制節點下發任務

      ② Neutron:提供計算節點與網絡節點之間的通信服務

    • 擴展服務

      ③ Telmeter:提供計算節點的監控代理,將虛擬機的情況反饋給控制節點,是Centimeter的代理服務

  • 計算機節點包含最少兩個網絡端口

    • eth0:與控制節點進行通信,受控制節點統一調配
    • eth1:與網絡節點,存儲節點進行通信
1.3.4 存儲節點
  • 安裝存儲組件的節點,一般包含以下兩種服務
    • Cinder:塊存儲服務,提供相應的塊存儲,簡單來說,就是虛擬出一塊磁盤,可以掛載到相應的虛擬機之上,不受文件系統等因素影響,對虛擬機來說,這個操作就像是新加了一塊硬盤,可以完成對磁盤的任何操作,包括掛載,卸載,格式化,轉換文件系統等等操作,大多應用於虛擬機空間不足的情況下的空間擴容等等
    • Swift:對象存儲服務,提供相應的對象存儲,簡單來說,就是虛擬出一塊磁盤空間,可以在這個空間當中存放文件,也僅僅只能存放文件,不能進行格式化,轉換文件系統,大多應用於雲磁盤/文件
  • 存儲節點包含最少兩個網絡接口
    • eth0:與控制節點進行通信,接收控制節點任務,受控制節點統一調配
    • eth1:與計算/網絡節點進行通信,完成控制節點下發的個人任務
1.4 OpenStack架構
  • OpenStack由多種服務組成,每種服務具有獨立的命名。在整個OpenStack架構中, Keystone提供認證服務,接收來自用戶和服務的認證請求,並對其身份進行認證。
    各個服務之間通過公用的API接口進行交互。大部分服務均包含一個API進程,用於偵聽API請求,根據服務的性質選擇處理請求或轉發請求。服務進程之間的通訊通過消息隊列實現,如AMQP。

  • 在部署完成的雲系統平臺上,用戶通過 Dashboard或 RestaRt方式在經 Keystone模塊認證授權後,可以執行創建虛擬機服務。通過Nova模塊創建虛擬機實例,Nova調用 Glance模塊提供的鏡像服務,然後調用 Neutron模塊提供網絡服務。根據需要可以選擇給虛擬機増加存儲卷,卷功能由 Cinder模塊提供服務。整個過程在Ceilometer模塊的資源監控下完成。同時 Cinder提供的 Volume和 Glance提供的鏡像可以誦討 Swift對象存儲機制講行保存
    在這裏插入圖片描述

  • 通過以上解析可以看到 OpenStack 雲平臺服務的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四個核心模塊完成的,四個輔助模塊 Horizen、Ceilometer、Keystone、Swift 提供的訪問、監控、權限和對象存儲功能。

  • openstack架構(清晰版)
    在這裏插入圖片描述

  • 名詞解釋

在這裏插入圖片描述

1.4 OpenStack核心項目
  • OpenStack常見的8個核心項目/服務
    在這裏插入圖片描述

三、 重點組件介紹

3.1 各組件關係圖

在這裏插入圖片描述

  • openstack由多種服務組成,每種服務具有獨立的命令。在整個openstack架構中,keystone提供認證服務,接收來自用戶和服務的認證請求,並對其身份進行認證。

  • 各個服務之間通過公用的API接口進行交互。

  • 大部分服務均包含一個API進程,用於監聽API請求,根據服務的性質選擇處理請求或者轉發請求。

  • 服務進程之間的通訊通過消息隊列服務實現,如AMQP

    AMQP:高級消息隊列協議,RabbitMQ就是對AMQP的實現

  • 在部署完成的雲系統平臺上,用戶通過Dashboard或RestAPI(用於前後端交互)方式在經Keystone模塊認證授權後,可以執行創建虛擬機服務。

  • 通過nova模塊創建虛擬機實例,nova調用glance模塊提供的鏡像服務,然後調用neutron模塊提供網絡服務。

  • 根據需要可以選擇給虛擬機增加存儲卷,卷功能由cinder模塊提供服務(也可使用ceph 分佈式存儲提供服務)。

  • 整個過程在ceilometer模塊的資源監控下完成。同時cidnder提供的volume和glance提供的鏡像可以通過swift對象存儲機制進行保存

  • 數據傳輸就是依靠消息隊列

3.1.1 四個核心組件,四個輔助組件
  • 核心組件

    Nova:計算項目於

    glance:鏡像服務

    cinder:塊存儲服務

    neutron:網絡服務

  • 輔助模塊

    horizen:基於web的管理界面(控制面板)

    ceilometer:計量

    keystone:認證服務

    swift:對象存儲

簡單的說,openstack Ironic就是一個進行邏輯部署安裝的項目

裸機:沒有配置操作系的計算機

從裸機到應用還需要進行以下操作

1、硬盤RAID、分區、格式化

2、安裝操作系統、驅動程序

3、安裝應用程序

Ironic實現的功能,就是可以很方便的指定一臺或多臺裸機,執行以上的一系列操作,例如部署大數據羣集需要同部署多臺物理機,就可以使用Ironic來實現

Ironic可以實現硬件基礎設施資源的快速交付

3.2 KeyStone認證服務

keystone爲所有openstack組件提供認證和訪問策略訪問,它依賴自身REST(基於idntity API)系統進行工作,主要對(但不限於)Swift(對象存儲)、Glance(鏡像服務)、Nova(計算服務)等進行認證與授權。實際上,授權通過對動作消息來源者請求的合法性進行鑑定,以下爲身份認證服務流程:

PS:先介紹一下idntitiy server功能

  • 身份認證 :令牌的發訪和校驗

  • 用戶授權:授權用戶在一個服務中所擁有的權限

  • 用戶管理

  • 服務目錄:包含可用服務的API point

  • Keystone認證服務中的概念

User(用戶):一個People or System or Service 在OpenStack中的數字表示。用於身份認證,也能夠通過爲登錄到Openstack的用戶分配令牌環,以此獲得訪問資源的權限,同一個用戶可以背關聯到給若干個租戶,就像用戶可以隸屬若干個不同的組。

用戶通過認證信息,如密碼、API keys等進行驗證

Tenant(租戶):一個資源或對象的抽象表示,租戶可以包含多個用戶,不同租戶之間相互隔離,根據service運行的需求,租戶可以映射爲賬戶、組織、項目或服務

項目(project):是各個服務中的一些可以訪問的資源集合,用來分組或隔離資源或身份對象。

不同服務中,項目所涉及的資源也不同。在nova服務中項目可以是雲主機,在swift和glance中項目可以是鏡像存儲,在neutron中項目可以是網絡資源。

默認情況下,用戶總是被綁定到項目中。

一個項目中可以有多個用戶,一個用戶可以數據一個或多個項目

Role(角色):可定製化的包含有特定用戶權限的權限集合,這些資源包含虛擬機、鏡像、存儲資源等。同時可以關聯到若干個User-Tenant對,來爲User-Tenant對賦予權限。

用戶既可以被添加到全局的角色,也可以被添加到指定項目內的角色中。

其區別是,全局的角色適用於所有項目中的資源權限,而項目內的角色只適用於某個項目內的資源權限

Token(令牌):用於限定User-Tenant對進行OpenStack API和資源訪問的字符串表示。一個令牌會持續一段時間有效,也可以隨時撤銷。

在keystone中主要是引入令牌機制來保護用戶對資源的訪問

Credentials(憑證):用於確認用戶身份的數據,例如:Username/Password

Authentication(校驗):是確定用戶身份的過程。

Service(服務):OpenStack service,即OpenStack運行的組件服務

Keystone Client(keystone cli):keystone的命令行工具,可以完成諸如創建用戶、角色、服務和端點等大多數得leystone管理功能,是非常常用得CLI接口。

Endpoint(端點):一個可以通過網絡來訪問和定位某個OpenStack service得地址,通常是一個URL。簡單得說,就是入口。

在keystone中包含一個端點模板,這個模板提供了所有已存在的服務的端點信息。

一個端點模板包含一個URL列表,列表中的每個URL都對應一個服務實例的訪問地址,並且具有public、private和admin這三種權限。

其中,public類型的端點可以被全局訪問,private類型的端點只能被openstack內部服務訪問,admin類型的端點只能被管理員訪問。

openstack身份認證服務將管理認證、授權以及服務目錄整合爲一個訪問點,同時也是用戶需要和openstack’進行交互的第一個服務。

一旦認證通過,終端用戶使用其身份訪問openstack其他服務。

同樣的,其他服務也將利用身份認證服務確認來訪者身份是否合法,以及是否具備相應的權限。

此外,openstack身份認證服務可以集成其他的身份認證管理系統,如LDAP等

身份認證服務爲其他openstack服務提供驗證和授權服務,爲所有服務提供終端目錄。

此外,提供用戶信息但是不在openstack項目中的服務(如LDAP服務)可被整合進先前存在的基礎設施中。

爲了從身份認證服務中獲益,其他的openstack服務需要身份認證服務合作完成某個任務。

當某個openstack服務收到來自用戶的請求時,該服務發送請求道身份認證服務,以驗證用戶是否有相應的權限。

keystone是openstack框架中負責管理身份驗證、服務規劃和服務令牌功能的模塊。

用戶訪問資源需要驗證用戶的身份與權限,服務執行操作也需要進行權限檢測,這些都需要通過keystone來處理。

keystone類似一個服務總線,或者說是整個openstack框架的註冊表,其他服務通過keystone來註冊其服務的endpoint,任何服務之間的相互調用,需要經過keystone的身份驗證,並獲得目標服務的endoint,從而找到目標服務。

3.2.1 keystone工作流程圖

在這裏插入圖片描述

  • ① 用戶/API 想創建一個實例,首先會將自己的credentials(資格證書)發給keystone。認證成功後,keystone會頒給用戶/API一個臨時的令牌(Token)和一個訪問服務的Endpoint。 PS:Token沒有永久的
  • ② 用戶/API 把臨時Token提交給keystone,keystone並返回一個Tenant(Project)
  • ③ 用戶/API 向keystone發送帶有特定租戶的憑證,告訴keystone用戶/API在哪個項目中,keystone收到請求後,會發送一個項目的token到用戶/API PS:第一個Token是來驗證用戶/API是否有權限與keystone通信,第二個Token是來驗證用戶/API是否有權限訪問我keystone的其它服務。用戶/API 拿着token和Endpoint找到可訪問服務
  • ④ 服務向keystone進行認證,Token是否合法,它允許訪問使用該服務(判斷用戶/API中role權限)?
  • ⑤ keystone向服務提供額外的信息。用戶/API是允許方法服務,這個Token匹配請求,這個Token是用戶/API的
  • ⑥ 服務執行用戶/API發起的請求,創建實例
  • ⑦ 服務會將狀態報告給用戶/API。最後返回結果,實例已經創建
3.3 控制檯 Dashboard (horizon項目)
  • Dashboard (項目名horizon) 是一個web接口,讓雲平臺管理員以及用戶可以管理不同的OpenStack資源和服務
  • Dashboard通過 Apache的mod_uwgis搭建,並通過python模塊實現和不同openstack API進行交互,從而實現管理目的
  • Dashboard是一個用以管理、控制OpenStack 服務的web控制面板,通過它可以實現絕大多數OpenStack的管理任務,如實例、鏡像、密鑰對、卷等。
  • 通過Dashboard,管理員無需記憶繁瑣複雜的OpenStack命令,除此意外,用戶還可以在控制面版中使用終端或者VNC(虛擬網絡控制檯) 直接訪問實例控制檯,Dashboard可以實現以下管理任務:
    • 實例管理:創建、刪除實例,查看終端日誌,遠程連接實例,管理卷等:
    • 訪問與安全管理:創建安全組,管理密匙對,設置浮動IP地址等
    • 偏好設定:對虛擬硬件模板可以進行不同程度的偏好設定
    • 鏡像管理:導入、編輯或刪除鏡像;
    • 用戶管理:創建用戶、管理用戶、設置配額、查看服務目錄等:
    • 卷管理:管理卷和快照:
    • 對象存儲處理:創建、刪除容器和對象。
3.4 鏡像模塊Glance (image鏡像服務)
  • 鏡像服務允許用戶去發現、註冊和獲取虛擬機鏡像。他提供了一個rest api(交互接口),允許查詢虛擬機鏡像的元數據,並獲取一個現存的鏡像。
  • 可以將虛擬機鏡像存放到各種位置,從簡單的文件系統到對象存儲系統,如openstack的swift對象存儲服務項目,默認是存儲在本地文件系統上的。
  • 其實在生產環境中這個模塊本身不會存儲大量的數據,需要掛載後臺存儲swift來存放實際的鏡像數據。
  • 在openstack環境中,鏡像是用於在計算節點生成虛擬機。脫離了鏡像服務,就無法創建虛擬機,所以鏡像服務是openstack的一個核心服務

PS 元數據:又稱中介數據、中繼數據,爲描述數據的數據,主要描述數據屬性的信息,用來支持如指示存儲位置、例是數據、資料查找、文件記錄等功能。

3.4.1 glance中的主要組件

image因爲較小,所以是存放在控制節點上的

glance鏡像服務項目主要設計一下組件

  • glance-api
    • glance-api 用於接收鏡像API的調用,諸如鏡像發現、恢復及存儲等,作爲一個後臺進程,glance-api對外提供rest api接口,響應用戶發起的鏡像查詢,獲取和存儲的調用
  • glance-registry
    • glance-registry用於存儲、處理和恢復鏡像的元數據,元數據包括鏡像的大小和類型等屬性,registry是一個內部服務接口,不建議暴露給普通用戶
  • database
    • database用於存放鏡像的元數據,可以根據需要選擇數據庫,如MySQL、SQLite等
  • storage repository for image files
    • 一般情況下,glance並不需要存儲任何鏡像,而實將鏡像存儲在後端倉庫中,glance支持多種repository,主要包括對象存儲Swift、塊存儲Cinder、VMware的ESX/ESXi 或者vCenter、亞馬遜的S3、HTTP可用服務器、Ceph等
3.4.3 鏡像格式
  • Glance支持多種鏡像格式,包括磁盤格式和容器格式。OpenStack中可用支持多種虛擬化的技術,如KVM,Xen Server、Hyper-V和VMware 等,用戶在上傳鏡像時,需要指定上傳鏡像文件的格式。除了磁盤格式,在Glance中還有容器的格式。一般在上傳鏡像時只需要指定容器格式爲bare,即爲空。因爲Glance中並沒有真正使用到容器格式,容器格式用來表示虛擬機鏡像文件是否包含了元數據,例如OVF格式,一下爲glance中常用的幾種鏡像文件格式

  • RAW

    • RAW是一種沒有格式或裸格式的磁盤文件類型,RAW對數據不做任何修飾和處理,直接保存最原始的狀態,所以在性能方面非常出色。由於RAW格式保存原始數據,因此更容易和其他鏡像格式進行轉換
  • QCOW2

    • QCOW2時QCOW的升級版本,其主要特性是磁盤文件大小可以動態按需增長,並且不會佔用所有的實際磁盤空間大小,例如創建了100GB的QCOW2格式的磁盤,而實際只保存了2GB的數據,那麼將只佔用了實際物理磁盤的2G空間,與RAW相比,使用這種格式可以節省磁盤容量
  • VHD

    • VHD是微軟公司產品使用的磁盤格式。Virtual PC (微軟早期虛擬化產品)和Hyper-V使用的就是VHD格式 VirtualBox也提供了對VHD的支持。如需OpenStack上使用Hyper-V類型的虛擬化,就應上傳VHD格式的鏡像文件
  • VMDK

    • VMDK是VMware公司產品使用的磁盤格式,目前也是一個開放的通用格式,除了VMware自家產品外,QEM和Vitualbox也提供了對VMDK格式的支持
  • VDI

    • VDI是Oracle公司的 VirtualBox虛擬軟件所使用的格式
  • ISO

    • ISO是指一種存檔數據文件在光盤上的格式。
  • AKI,ARI,AMI

    • Amazon公司的AWS所使用的鏡像格式。
  • 小結

    傳輸iso鏡像時,不要在web界面傳,在後臺的控制節點傳

    登錄控制節點,然後在傳

    用命令傳

    鏡像導入 /opt下

    然後用命令傳到glance

    不同的虛擬化產品能導出不同格式的鏡像,可以通過glance再把這些鏡像導到

    openstack上

    glance 默認file存儲在系統中的

    生產環境,一般用的數據比較大,存儲在指定的Swift對象存儲

3.5 計算模塊nova
3.5.1 nova組件簡介

nova是負責提供計算資源的模塊,也是openstack中的核心模塊,其主要功能是負責虛擬機實例的生命週期管理、網絡管理、存儲卷管理、用戶管理以及其他相關雲平臺管理功能

openstack使用計算服務賴託管和管理雲計算系統

openstack計算服務是基礎設施服務(Iaas)的主要組成部分,模塊由python實現

nova起到了承上啓下的作用

openstack計算組件請求openstack identity服務進行認證,請求openstack image服務提供磁盤鏡像,爲openstack dashboard 提供用戶和管理員接口。

磁盤鏡像訪問限制在項目與用戶上,配額以每個項目進行設定,例如:每個項目下可以創建多少實例

openstack組件可以在標準硬件上向大規模擴展,並且下載磁盤鏡像啓動虛擬機實例

3.5.2 openstack-nova服務的主要組件
  • nova-api服務(接口)

    接收和響應來終端用戶的計算api請求,對外提供一個與雲基礎設施交互的接口,也是外部可用於管理基礎設施的唯一組件

    此服務支持openstack計算服務API、Amazon EC2(一種web服務) API 以及特殊的管理API,用於接收用戶管理操作請求

    管理使用EC2 API通過web services 調用實現,然後API server通過詳細隊列(message queue)輪流與雲基礎設施線管的組件通信

  • nova-api-metadata服務

    接收來自虛擬機發出的元數據請求。nova-api-meadata服務一般裝在nova-network服務的多主機模式下使用

  • nova-compute服務

    一個持續工作的守護進程, 通過hypervisor的api來創建和銷燬虛擬機實例,是一個work進程

    • XenServer/XCP 的XenAPI
    • KVM或QEMU的libvirt
    • VMware的VMwareAPI

    這個過程通常比較複雜,守護進程同意了來自隊列的動作請求,轉換爲一些列的系統命令,如啓動一個KVM實例, 然後到數據庫中更新他們的狀態

  • nova-conductor模塊

    nova-condutor模塊作用與nova-compute服務與數據庫之間,避免了由nova-compute服務對雲數據庫的直接訪問,它可以橫向擴展,但是不能將他部署運行在nova-compute服務的主機節點上

  • nova-scheduler服務(調度器)

    接收到一個來自消息隊列的創建虛擬機實例請求時,根據配置從計算節點集羣中選取最優節點,並將請求轉發到該節點;

    最終將虛擬機部署創建在該節點上

    nova-scheduler負責nova主機選擇、提供決策功能

    在control下的nova.conf中配置

    • scheduler_dufault_filter 默認的過濾器
    • scheduler_available_filter 可用的過濾器

    nova需要裝在兩個節點上,即控制節點於計算節點

    啓動時開啓順序:控制節點—網絡節點—計算節點

    可以動態查看日誌消息,來查看服務是否開啓:

systemctl restart ceph-mgr.target
systemctl restart ceph-mon.target			mon 監控
systemctl restart ceph-osd.target			osd 分佈式存儲
  • cpu_allocation_ratio 最高建議設置在6
  • 此處爲比例,1:6
  • VNC遠程功能模塊
3.6 塊存儲 Cinder
  • 塊存儲服務(Cinder)提供塊存儲功能

  • 存儲的分配和消耗是由存儲驅動器或者多後端配置的驅動決定的,常用的驅動有:

    NAS/SAN

    NFS\ISCSI

    CEPH

  • 其中,ceph在生產環境中使用較多

  • 塊存儲適合性能敏感性業務場景,例如數據庫存儲大規模可擴展的文件系統或服務器需要訪問到塊級的裸設備存儲

  • 典型情況下,塊服務API和調度器服務運行在控制節點上,取決於使用的驅動。卷服務器可以運行在控制節點、計算節點或單獨的存儲節點上

  • 塊存儲服務爲openstack中實例提供持久的存儲,塊存儲提供一個基礎設施,用於管理卷以及和openstack計算服務交互,爲實現提供卷、快照、卷類型等功能。

  • 以實例的角度看,掛載的每個卷都是一塊獨立的硬盤

  • Cinder提供了從創建捲到刪除卷整個生命週期的管理

3.6.1 Cinder塊具體功能
  • ① 提供REST API接口,使租戶可以查詢、管理卷、卷快照及卷類型
  • ② 協調卷的創建請求,合理優化存儲資源的分配
  • ③ 通過驅動架構支持多種後端存儲方式,包括LVM,NFS,ceph和其他諸如MEC、IBM等商業存儲產品和方案
3.6.2 Cinder服務設計到的組件
  • ① Cinder-api
    • Cinder-api用來接收api請求,並將其路由到Cinder-volume執行
  • ② Cinder-Volume
    • Cinder-Volume用來與塊存儲服務和Cinder-Scheduler進程進行直接交互,它也可以與這些進程通過一個消息隊列進行交互。Cinder-Volume服務響應送到塊存儲服務的讀寫請求來維持狀態,它可以和多種存儲提供者在驅動架構下進行交互,當用戶請求一個存儲資源時,由Cinder-API負責接收請求,Cinder-Scheduler負責調度資源,而真正執行存儲任務的是Cinder-Volume
  • ③ Cinder-Scheduler
    • Cinder-Scheduler調度進程會選擇最優存儲節點來創建卷,其工作機制與Nova-Scheduler類似,當需要創建卷時,Cinder-Scheduler根據存儲節點的資源使用情況選擇一個最合適的節點來創建卷
  • ④ Cinder-Backup守護進程
    • Cinder-Backup服務提供任何種類備份捲到一個備份存儲提供者。就像Cinder-vilume服務,它與多種存儲提供者在驅動架構下進行交互
  • ⑤ 消息隊列
    • 消息隊列的作用是在塊存儲的進程之間的路由信息。cinder各個子服務器通過消息隊列實現進程間通信和相互協作。
    • 以創建卷爲例,Cinder的工作流程如下
    • ① 用於向Cinder-API發出創建卷請求
    • ② Cinder-API對請求做一些必要處理後,向消息隊列發出一條信息:“讓Cinder-Scheduler創建一個卷
    • ③ Cinder-Scheduler從消息隊列獲取到消息,然後執行調度算法,從若干存儲節點中選出節點A
    • ④ Cinder-Scheduler向消息隊列發出一條消息:讓存儲節點A創建一個卷
    • ⑤ 存儲節點A的 Cinder-Volume從消息隊列中獲取到這個消息,然後通過卷提供者的驅動創建卷
3.7 網絡模塊Neutron
3.7.1 概述
  • OpenStack早期的模塊是Nova-Network,而Neutron則是Nova-Network的更新換代的產品,也是目前OpenStack重要組件之一,以下爲網絡基本概念
  • 網絡
    • 類似於實際的物理環境中的網絡,OpenStack網絡用於連接雲主機或路由器。除此之外,還包含子網、網關以及DHCP服務等。OpenStack網絡分爲內部網絡和外部網絡,內部網絡一般用於連接虛擬機,而外部網絡一般用於連接宿主機外面的網絡。
  • 子網
    • OpenStack中的子網是一個IP地址段,用於定義實際的IP地址範圍。
  • 端口
    • 端口類似於實際網絡中的網絡接口,用於連接終端設備或另外一個網絡。不同的是, OpenStack中端口連接的一般都是虛擬設備接口,如虛擬機的虛擬網卡或者路由器的虛擬接口等。端口還描述了相關的網絡配置,例如可以在端口上配置MAC地址和IP地址。
  • 路由器
    • 路由器用於連接 OpenStack的內部網絡和外部網絡。類似實際路由器功能,支NAT功能,通過綁定浮動IP地址還可以實現地址映射
    • Neutron分別提供了二層(L2)交換和三層(L3)路由抽象的功能,對應於物理網絡環境中的交換機和路由器
3.7.2 Linux虛擬網絡
  • Neutron中最核心的工作就是對網絡的抽象與管理。在OpenStack環境中對網絡的抽象主要有以下幾種形式

  • ① 虛擬交換機/網橋

    • OpenStack網絡中,對於二層交換機有兩種抽象方式,一種是通過linux bridge實現;另一種是通過OpenvSwitch實現。在一些早期OpenStack版本中,默認使用的是OpenvSwitch,在O版中,多節點手動安裝默認使用的是Linux bridge。從功能上來說OpenvSwitch更加強大, 但是Linux bridge實現比較簡單。

    • 虛擬交換機/網橋主要可以實現以下功能

      連接虛擬機

      通過vlan功能隔離虛擬網絡

      連接虛擬網絡到宿主機外部網絡

  • ② OpenvSwitch

    • 類似於Linux bridge,OpenvSwitch也可以實現對二層網絡的抽象,對虛擬網絡提供分佈式交換機功能,它支持各種組網類型,功能全面,支持基本的vlan功能,也支持QOS及NetFlow、sFlow標準的管道接口和協議,從而通過這些接口可以實現VM流量監控的任務

    • 運行在雲環境中各種相同虛擬化平臺上的多個vSwich實現了分佈式架構的虛擬交換機。一個物理服務器上的vSwitch可以透明的與其他服務器上的vSwitch連接通信

    • 虛擬路由器

      OpenStack中的虛擬路由器是對網絡設備的一種抽象,實現了租戶之間的多網絡構建以及內部網絡和外部網絡之間的通信問題,其實現原理與真實路由器一直,根據路由錶轉發數據包,同時還支持NAT轉換以及浮動IP地址設置

    • namespace

      二層網絡通過vlan對租戶網絡進行隔離,而三層網絡是通過namespace進行隔離,每個namespace都有自己獨立的網絡棧,包括路由表、防火牆規則、網絡接口等。

      同時,Neutron爲每個namespace提供DHCP和路由服務,所以各個租戶之間的網絡地址允許重疊,因爲它們在不同的namespace中進行抽象

在這裏插入圖片描述

  • DHCP server

    Neutron提供DHCP服務的組件是DHCPagent,默認通過dnsmasq實現DHCP功能

  • 浮動IP地址

    通常情況下,在搭建openstack網絡時,會在虛擬路由器啓用SNAT功能。

    這將給openstack網絡提高安全性和便利性,具體表現如下:

    • 啓動nat功能,openstack內部網絡被保護起來
    • 虛擬機向外部網絡通信時,以地址轉化的方式,更容易讓外部路由設備尋路,不需要增加額外的回程路由條路

    所以,當網絡啓動了NAT功能後,在允許虛擬機訪問外部網絡的同時,也組織了外部網絡訪問虛擬機的流量,如ssh管理流量。

    但是可以通過目標地址轉換的方式實現外部網絡訪問內部虛擬機。nat地址映射,配置nat地址映射需要在虛擬路由器外部接口配置相應的外部網絡地址池,而這些地址池中的地址就是浮動IP地址。所以浮動IP地址是用來解決外部網絡訪問虛擬機的問題,如果虛擬機不需要外部網絡訪問也可以不綁定浮動IP地址

3.7.3 組網模型
  • Neutron提供了多種組網模型供不同的租戶搭建各種網絡拓撲

  • ① local網絡

    • local網絡模型特點

      ① 不具備vlan特性,不能對二層網絡進行隔離

      ② 同一個local網絡的虛擬機實例會連接到相同的虛擬交換機上,instance之間可以通信

      ③ 虛擬交換機沒有幫的那個任何物理網卡,無法於宿主機之外的網絡通信,也就是無法於自身namespace之外的設備通信

    典型的local網絡組網模型圖如下

    vm1與vm2連接到linuxbridge 1 ,vm3連接到linux bridge 2

    vm1與vm 2因爲連接的是同一個bridge,所以可以互相通信,但是不能與vm3進行通信,因爲沒有任何linux bridge綁定物理網卡,所以任何虛擬機都不能訪問外部網絡

在這裏插入圖片描述

  • ② flat網絡

    flat組網模型不支持vlan,屬於扁平化的網絡模型

    linux bridge直接綁定物理網卡並連接虛擬機,每個flat都會獨佔一個物理網卡

    該物理網卡不能配置IP地址,所有連接到此網絡的虛擬機共享一個私有IP網段。

  • flat組網模型適用應用場景一

    • flat網絡直接連接虛擬機和外部網絡

      如下圖所示,linux bridge 1 連接 vm 1和 vm 2,並綁定物理網卡ens37

      linux bridge 2 連接vm 3 ,並綁定物理網卡 ens38

      vm 1和 vm 2 可以直接相互通信,並通過ens37訪問外部網絡

      vm 3 通過ens 38 訪問外部網絡
      在這裏插入圖片描述

  • flat組網模型適用應用場景二

    • flat網絡連接路由器和外部網絡

      如下圖所示,虛擬機連接vlan類型的網絡,通過vlan 對租戶進行隔離,對外通過虛擬路由器R1連接虛擬交換機4,並通過迅虛擬交換機4的物理網卡實現對外通訊

      通過vlan隔離的租戶被限制在虛擬交換機1-3所在的網絡,而虛擬機發起的流量經過路由器轉發後不攜帶任何vlan標籤到達虛擬交換機4,最後通過物理網卡訪問外部網絡

      虛擬交換機4所在的網絡就可以被設計爲flat網絡
      在這裏插入圖片描述

  • flat網絡缺點

    ① 存在單一網絡瓶頸

    ② 缺乏可伸縮性

    ③ 缺乏合適的多租戶隔離

  • ③ vlan網絡

    openstack通過vlan網絡解決了都租戶之間的網絡隔離問題,如下圖所示

    以下爲圖解

    linux bridge 1 和linux bridge 2是屬於vlan類型的網絡,他們分別屬於vlan 101和vlan102

    vm 1 和vm 2 連接到bridge 1

    vm 3 連接到 bridge 2

    linux bridge 1 和 linux bridge 2 分別綁定物理網卡ens37的兩個子網卡ens37.101 和ens37.102

    vm 1 和 vm 2 發起的流量在經過ens37.101時,被打上vlan101標籤

    vm 3 發起的流量在經過ens 37.102時被打上vlan 102標籤,這就要求連接ens37的物理交換機相應的接口必須配置爲trunk模式

    如果需要其他vlan網絡,可以創建物理網卡新的子接口,同時需要綁定新網絡

在這裏插入圖片描述

  • vlan網絡的缺點

    ① vlan 的數量限制:4096個vlan數量不能大規模滿足雲計算數據中心的需求

    ② 物理網絡基礎設施的限制:基於IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署

    ③ TOR交換機mac表耗盡:虛擬化及節點過多的流量導致更多的mac地址表條目

  • ④ vxlan 網絡

  • vxlan網絡使用的是隧道技術,是目前openstack廣泛使用的網絡技術

  • 相比之前的vlan模型,vxlan做了以下改進:

    • 租戶數量從4K增加到了16M
    • 租戶內部通信可以跨越任意IP網絡,支持虛擬機任意遷移
    • 一般來說,每個租戶邏輯上都有一個網關實例,IP地址可以在租戶間進行復用
    • 能夠結合SDN技術對流量進行優化

    vxlan網絡在傳統的IP網絡中傳輸以太網數據幀

  • Vxlan涉及的基本概念

  • VTEP(vxlan tunnel end point )

    vxlan隧道的端點,用於vxlan報文的封裝與解封裝。類似於IPsecVPN中的加密點。

    傳統的以太網幀在發送vtep端將封裝新的vxlan、udp、IP以及以太網頭部。

    而接收vtep端將數據解封裝。vxlan報文中源IP地址爲本節點的vtep地址。

    vxlan報文中目的IP地址爲對端節點的vtep地址,一堆vtep地址就對應着一個vxlan隧道

  • VNI(vxlan network identifier)

    用來標識一個vxlan段,在vxlan網絡中,通過VNI標識一個租戶,類似vlan網絡中的vlan ID。

    不同vxlan段的虛擬機之間不能直接在二層相互通信。

    vni由24比特組成,支持多達16M的租戶

  • 在vxlan網絡中心中,虛擬機之間的通信過程如圖所示

  • vtep 1 將來自vm 1的數據幀添加vxlan頭部,外部UDP和IP首部

  • vtep 1 通過傳統的IP網絡將數據發送到vtep2

  • vtep接收到vxlan報文時,拆除外部IP、UDP及vxlan首部,然後內部數據包交給正確的終端vm 2

在這裏插入圖片描述

總結

本篇博客介紹了openstack基礎理論(T版、R版),本篇博客會隨着版本推進而持續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章