文章目錄
- 知識點
- 云計算
- 起源
- 定義
- 特點
- 分類
- 服務類型
- 平臺分類
- 應用
- 虛擬化
- 虛擬化技術
- 定義
- 分類
- 云計算和虛擬化的關系
- 虛擬化的優點
- OpenStack
- 簡介
- 核心架構
- Openstack組件
- 共享服務組件
- 核心組件
- 組件詳解
- RabbitMQ
- 概念
- 特點
- rabbitmq中的概念
- 工作原理
- 常用操作
- Memcached
- Keystone
- Glance
- 工作原理
- Nova(核心)
- Horizon
- 作用:web界面服務(Dashboard),提供了以Web的形式對所有節點的所有服務的管理
- 區域(Region)
- 可用性區域(Availability Zone)
- Cell
- Cinder
- 搭建云平臺(單雙節點)
- 創建虛擬機并配置網絡
- 面試題
- 說一下 OpenStack 及其主要組件?
- 什么服務通常在控制節點上運行?
- 計算節點上虛擬機的默認地址是什么?
- 什么服務通常在計算節點上運行?
- Glance 鏡像的默認地址是什么?
- 說一下如何使用命令行啟動一個虛擬機?
- 如何在 OpenStack 中顯示用戶的網絡命名空間列表?
- 在 Glance 服務中如何使用命令行上傳和下載鏡像?
- OpenStack 如何將虛擬機從錯誤狀態轉換為活動狀態?
- 如何使用命令行來獲取可使用的浮動 IP 列表?
- 如何在特定可用區域中或在計算主機上配置虛擬機?
- 如何使用命令行查看 OpenStack 實例的控制臺日志?
- 如何在特定計算節點上獲取配置的虛擬機列表?
- 如何獲取 OpenStack 實例的控制臺的 URL 地址?
- 如何使用命令行創建可啟動的 cinder / block 存儲卷?
- 如何列出所有在你的 OpenStack 中創建的項目或用戶?
- 如何顯示 OpenStack 服務端點列表?
- 在控制節點上你應該按照什么步驟來重啟 nova 服務?
- 如何使用命令行在 OpenStack 中向存在的安全組 SG(安全組)中添加新規則?
- 假如計算節點上為數據流量配置了一些 DPDK 端口,你如何檢查 DPDK 端口的狀態呢?
- 如何查看控制節點和計算節點的 OVS 橋配置?
- 計算節點上的集成橋(br-int)的作用是什么?
- 隧道橋(br-tun)在計算節點上的作用是什么?
- 外部 OVS 橋(br-ex)的作用是什么?
- OpenStack 網絡中 OpenFlow 規則的作用是什么?
- 怎樣查看 OpenFlow 交換機的信息(比如端口、表編號、緩存編號等)?
- CPU Pinning 是什么?
- 如何顯示交換機中的所有 flow 的入口?
- 什么是 Neutron 代理?如何顯示所有 Neutron 代理?
知識點
云計算
起源
云計算這個概念首次在2006年8月的搜索引擎會議上提出,成為了繼互聯網、計算機后信息時代的又一種革新(互聯網第三次革命)。
云計算的核心是將資源協調在一起,使用戶通過網絡就可以獲取到無限的資源并且不受時間和空間的限制,為用戶提供一種全新的體驗。
定義
云計算是一種按使用量付費的模式(資源服務模式),該模式可以實現隨時隨地、便捷按需的從可配置資源共享池中獲取所需的資源。
云計算是基于互聯網的相關服務的增加、使用和交付模式,通常涉及通過互聯網來提供動態易擴展且經常是虛擬化的資源。
特點
- 按需部署:根據用戶的需求快速配備計算能力及資源分配。
- 資源池化:供應商的資源被池化,以多用戶租用模式被不同客戶使用。
- 快速伸縮:資源可以彈性的部署和釋放。
- 可靠性高:倘若服務器故障也不影響計算與應用的正常運行。
分類
私有云:云計算基礎設施由一個單一的組織部署和使用。
公有云:云計算基礎設施被部署給廣泛的公眾公開使用。
混合云:使用標準或專有的技術組合以上兩種云。
服務類型
IaaS(基礎設施即服務):提供商提供虛擬化計算資源,如虛擬機、存儲、網絡和操作系統。
PaaS(平臺即服務):通過互聯網為開發人員提供構建應用程序和服務的平臺。
SaaS(軟件即服務):通過互聯網為用戶提供按需軟件付費應用程序。
平臺分類
1)從技術應用劃分
- 以數據存儲為主的存儲型云平臺
- 以數據處理為主的計算型云平臺
- 計算和存儲兼顧的綜合型云平臺
2) 從是否收費劃分
開源云平臺:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack
商業化云平臺:Google、IBM、Oracle、Amazon、阿里云等
應用
存儲云:云存儲是一個以數據存儲和管理為核心的云計算系統。用戶可以將本地的資源上傳至云端上,可以在任何地方連入互聯網來獲取云上的資源。
醫療云:使用云計算來創建醫療健康服務云平臺,實現了醫療資源的共享和醫療范圍的擴大
金融云:利用云計算的模型,將信息、金融和服務等功能分散到龐大分支機構構成的互聯網“云”中,共享互聯網資源,從而解決現有問題并且達到高效、低成本的目標。
教育云:教育云可以將所需要的任何教育硬件資源虛擬化,然后將其傳入互聯網中,以向教育機構和學生老師提供一個方便快捷的平臺。
虛擬化
虛擬化技術
定義
虛擬化是一個廣義上的術語,是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個為了簡化管理,優化資源的解決方案。
分類
桌面虛擬化:在本地計算機顯示和操作遠程計算機桌面,在遠程計算機執行程序和儲存信息。
應用虛擬化:在操作系統和應用程序間建立虛擬環境。
服務器虛擬化:將服務器物理資源抽象成邏輯資源形成動態管理的“資源池”。
網絡虛擬化:將不同網絡的硬件和軟件資源結合成一個虛擬的整體。
存儲虛擬化:將實體存儲空間分隔成不同的邏輯存儲空間。
云計算和虛擬化的關系
虛擬化的優點
- 提高IT資源利用率,加速應用部署,提高應用兼容性。
- 顯著減少了服務器的數量,企業不動資產和管理成本。
OpenStack
簡介
定義
百度百科:OpenStack是一個開源的云計算管理平臺項目,由NASA(美國國家航空航天局)和Rackspace合作研發并發起,以Apache許可證授權的開源代碼項目。
官方:OpenStack是一個云操作系統,通過數據中心可控制大型的計算、存儲、網絡等資源池。所有的管理通過前端界面管理員就可以完成,同樣也可以通過web接口讓最終用戶部署資源。
核心架構
- 物理架構圖
-
邏輯架構圖
-
概念架構圖
Openstack組件
共享服務組件
- 數據庫服務(database service):Mariadb及Mongodb。
- 消息傳輸(Message Queues)::RabbitMQ
- 緩存(cache):Memcached
- 時間同步(time sync):ntp
- 存儲(storge provider):ceph,GFS,LVM,ISICI等
- 高可用及負載均衡:pacemaker,HAproxy,keepalived,lvs
核心組件
- 認證服務(Identity Service):Keystone。提供了其余所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作為統一的數據庫。
- 鏡像服務(Image Service):Glance。提供了對虛擬機部署的時候所能提供的鏡像的管理,包含鏡像的導入,格式,以及制作相應的模板
- 計算服務(compute):Nova。負責維護和管理云計算計算資源,維護和管理計算和網絡。
- 網絡服務(Network):Neutron。提供了對網絡節點的網絡拓撲管理,同時提供Neutron在Horizon的管理面板
- Web界面服務(Dashboard):Horizon。提供了以Web的形式對所有節點的所有服務的管理
- 塊存儲服務(Block Storage):Cinder。為運行實例提供穩定的數據塊存儲服務
- 對象存儲(Object Storage):Swift。為Glance提供鏡像存儲和卷備份服務
- 測量(Metering):Ceillrmeter。提供對物理資源以及虛擬資源的監控,并記錄這些數據,對該數據進行分析,在一定條件下觸發相應動作
- 部署編排(Orchestration):Heat。提供了基于模板來實現云環境中資源的初始化,依賴關系處理,部署等基本操作,也可以解決自動收縮,負載均衡等高級特性。
- 數據庫服務(Database Service):Trove。提供可擴展和可靠的關系和非關系數據庫引擎服務
組件詳解
RabbitMQ
概念
屬于一個流行的開源消息隊列系統。屬于AMQP( 高級消息隊列協議 ) 標準的一個 實現。是應用層協議的一個開放標準,為面向消息的中間件設計。用于在分布式系統中存儲轉發消息,在 易用性、擴展性、高可用性等方面表現不俗。
特點
- 開源,性能優秀,穩定性保障。
- 提供可靠性消息投遞模式、返回模式和HA模式、表達式配置及鏡像隊列模型
- 集群模式豐富,語Spring AMQP完美整合,保證數據不丟失的前提做到高可靠性和可用性
rabbitmq中的概念
Broker:簡單來說就是消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。
Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字, exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序
channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個
channel代表一個會話任務。
工作原理
( 1)客戶端連接到消息隊列服務器,打開一個channel。
( 2)客戶端聲明一個exchange,并設置相關屬性。
( 3)客戶端聲明一個queue,并設置相關屬性。
( 4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。
( 5)客戶端投遞消息到exchange。
( 6) exchange接收到消息后,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列里。
rabbitmq集群部署: 注意必須至少要有一個disk node
常用操作
Memcached
- 概念:Memcached 是一個開源的、高性能的分布式內存對象緩存系統。通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高網站訪問速度,加速動態WEB應用、減輕數據庫負載。
- 緩存流程
檢查客戶端請求的數據是否在 Memcache 中,如果存在,直接將請求的數據返回,不在對數據進行任何操作。
如果請求的數據不在 Memcache 中,就去數據庫查詢,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份 Memcache 中
每次更新數據庫的同時更新 Memcache 中的數據庫,確保數據信息一致性。
當分配給 Memcache 內存空間用完后,會使用 LRU (least Recently Used ,最近最少使用 )策略加到其失效策略,失效的數據首先被替換掉,然后再替換掉最近未使用的數據。
Keystone
1.概念:
用于為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等。云環境中所有的服務之間的授權和認證都需要經過 keystone.
(1)管理用戶及其權限;
(2)維護 OpenStack Services 的 Endpoint;
(3)Authentication(認證)和 Authorization(鑒權)
作用:認證服務,提供了其余所有組件的認證信息/令牌的管理,創建,修改等等,使用MySQL作為統一的數據庫。
2.keystone中概念:
(1).user:指代任何使用open stack的實體,可以是真正的用戶,其他系統或服務;
(2).Credentials:是user用來證明自己身份的信息,可以是1. 用戶名/密碼;2.Token;3. API Key;4. 其他高級方式.
(3). Authentication:是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack時向 Keystone 提交用戶名和密碼形式的 Credential,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。
(4).Token: Token 是由數字和字母組成的字符串,user成功Authentication后成Token并分配給user。Token用作訪問Service的Credential;Service會通過Keystone驗證Token的有限性;Token的有效期默認24小時。
(5).Project:用于將open stack的資源進行分組和隔離。根據openstack的服務對象不同,project可以是一個客戶,部門或者項目組。
(6).Service:包括nova,glance,cinder,neutron等,每個service會提供若干個Endpoint,user通過Endpoint訪問資源和執行操作。
(7).Endpoint:是一個網絡上可訪問的地址,通常是一個URL。Service通過Endpoint暴露自己的API,Keystone負責管路和維護每個service的Endpoint.
(8).Role:可以為user分配一個或多個Role,Service決定每個role能做什么事,系統基本角色有兩個:管理員admin和租戶_member_
3.Keystone基本框架
Token: 用來生成和管理token
Catalog: 用來存儲和管理service/endpoint
Identity: 用來管理tenant/user/role和驗證
Policy: 用來管理訪問權限
4.通過’查詢可用image’這個實際操作讓大家更加清晰keystone的工作過程及原理:
第一步:登入。
用戶admin拿著credential請求登入,Authentication認證通過,并給admin用戶一個token;
第二步:顯示操作界面。
進入操作界面后,這時admin需要訪問image服務。在訪問image前發生了:admin詢問keystone詢問到了能訪問admin和demo兩個project,同時可以訪問instance,Volume,glance等服務。因為這時admin已經從keystone拿到了service的Endpoints.
第三步:顯示image列表。
Admin要查看project admin中的image,先是把將請求發送到Glance的Endpoint,Glance向keystone詢問admin身份是否有效,接下來Glance會查看/etc/glance/policy.json判斷admin是否有查看image的權限。權限判定后,Glance將image列表發給admin。
5.keystone主要有兩個日志:keystone.log和keystone_access.log,保存在/var/log/apache2/目錄里
6.集群搭建圖
核心概念
工作原理
4. 工作流程(在各個組件中的作用)
Glance
1.glance介紹:是openstack項目中負責鏡像管理的模塊,其功能包括虛擬機鏡像的查找,注冊和檢索等。Glance提供restful api可以查詢虛擬機鏡像的metadata及獲取鏡像。Glance可以將鏡像保存到多種后端存儲上,比如簡單的文件存儲或者對象存儲。
2.Glance架構
Glance-api
Glance-api是系統后臺運行的服務進程,對外提供REST API,響應Image查詢,獲取和存儲的調用。Glance-api不會真正處理請求,如果操作是與image metadata相關,glance-api會把請求轉發給glance-registry;如果操作是與image自身存取相關,glance-api會把請求轉發給image的store backend.
Glance-registry
Glance-registry是系統后臺運行的服務進程,負責處理和存取image的metadata,例如image的大小和類型。Glance支持多種格式的image,比較常用的有:Raw,vmdk,ISO,QCOW2.Image的metadata會保持到database中,默認是MySQL。
Store backend
Glance自己并不存儲image,真正的image是存放在backend中。Glance支持多種backend,默認是:A directory on a local file system(Filesystem)具體使用哪種backend,實在/etc/glance/glance-api.conf 中配置。
3.創建Image
方法一:在web界面中創建(步驟見博客)
方法二:在命令行創建
-
將image上傳到控制節點的文件系統中,例如: /tmp/cirros-0.3.5-x86_64-disk.img
-
glance image-create --name cirros1 --file /tmp/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --progress
一般創建比較大的鏡像用命令行創建會更快和方便。
Image放在/var/lib/glance/images/下
4.glance日志:glance_api.log 和glance_registry.log,保存/var/log/glance目錄中
作用:鏡像服務,提供了對虛擬機部署的時候所能提供的鏡像的管理,包含鏡像的導入,格式,以及制作相應的模板
核心概念
工作原理
1. Glance-api:接收REST API的請求,然后通過其他模塊來完成諸如鏡像的查找、獲取、上傳、刪除等操作,默認監聽端口9292。2. Glance-registry:用于與MariaDB數據庫交互,用于存儲或獲取鏡像的元數據(metadata),默認監聽端口9191。3. Store Adapter:通過提供的存儲接口來獲取鏡像
Nova(核心)
1)作用:負責維護和管理的網絡和存儲,提供計算服務
2)核心組件
3)虛擬機創建流程
1.nova介紹:是openstack最核心的服務,負責維護和管理云計算計算資源。
2.nova組件介紹
1.nova-api:
是整個nova的門戶,所有對nova的請求都首先由nova-api處理。Nova-api向外暴露若干HTTP rest api 接口在keystone中,客戶端可以將請求發送到endpoint指定的地址,向nova-api請求操作。
Nova-api對收到的HTTP api請求會做如下處理:
(1).檢查客戶端傳入的參數是否合法;
(2).調用nova其他子服務的處理客戶端HTTP請求;
(3).格式化nova其他子服務返回的結果并返回給客戶端。
2.nova-conductor:
Nova-compute需要獲取和更新數據庫中instance的信息,但nova-compute并不會直接訪問數據庫,而是通過nova-conductor實現數據的訪問。
使用nova-conductor的兩個顯著好處:
(1).更好的系統安全性:早期的openstack版本中,nova-compute可以直接訪問數據庫,但試想如果任意一個計算節點被黑客入侵,都會導致控制節點上的數據庫面臨極大的風險。為了解決這個問題,引入了nova-conductor;
(2)更好的伸縮性:nova-conductor建立后,提高了nova的伸縮性。Nova-compute與conductor是通過消息中間件交互的。這種松散的架構允許配置多個nova-conductor實例,從而應對日益增長的計算節點對數據庫的訪問。
3.nova-scheduler
虛擬機調度服務,負責決定在哪個計算節點上運行虛機。
如何選擇計算節點——啟動實例調度策略
Filter scheduler(調度器),調度過程分兩步:
(1).通過過濾器(filter)選擇滿足條件的計算節點(運行nova-compute)
(2).通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建instance
Filter具體有哪些:
RetryFilter
AvailabilityZoneFilter
RamFilter
DiskFilter
CoreFilter
ComputeFilter
ComputeCapabilitiesFilter
ImagePropertiesFilter
ServerGroupAntiAffinityFilter
ServerGroupAffinityFilter
Weight: 默認實現是根據計算節點空閑的內存量計算權重值: 空閑內存越多,權重越大,instance 將被部署到當前空閑內存最多的計算節點上。
4.nova-compute(裝在計算節點上)
nova-compute 在計算節點上運行,負責管理節點上的 instance。OpenStack 對 instance 的操作,最后都是交給 nova-compute 來完成的。nova-compute 與 Hypervisor 一起實現 OpenStack 對 instance 生命周期的管理。
5.Console Interface
nova-console:
用戶可以通過多種方式訪問虛機的控制臺:
nova-novncproxy,基于 Web 瀏覽器的 VNC 訪問
nova-spicehtml5proxy,基于 HTML5 瀏覽器的 SPICE 訪問
nova-xvpnvncproxy,基于 Java 客戶端的 VNC 訪問
nova-consoleauth
負責對訪問虛機控制臺請求提供 Token 認證
nova-cert
提供 x509 證書支持
3.從創建虛機流程看nova子服務如何協同工作
1.客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發送請求:“幫我創建一個虛機”
2.API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個虛機”
3.Scheduler(nova-scheduler)從 Messaging 獲取到 API 發給它的消息,然后執行調度算法,從若干計算節點中選出節點 A
4.Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上創建這個虛機”
5.計算節點 A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發給它的消息,然后在本節點的 Hypervisor 上啟動虛機。
6.在虛機創建的過程中,Compute 如果需要查詢或更新數據庫信息,會通過 Messaging 向 Conductor(nova-conductor)發送消息,Conductor 負責數據庫訪問。
在前面創建虛機的流程示意圖中,我們看到 nova-* 子服務之間的調用嚴重依賴 Messaging。Messaging 是 nova-* 子服務交互的中樞。
以前沒接觸過分布式系統的同學可能會不太理解為什么不讓 API 直接調用Scheduler,或是讓Scheuler 直接調用 Compute,而是非要通過 Messaging 進行中轉。 這里做一些解釋。程序之間的調用通常分兩種:同步調用和異步調用。
同步調用
API 直接調用 Scheduler 的接口是同步調用。 其特點是 API 發出請求后需要一直等待,直到 Scheduler 完成對 Compute 的調度,將結果返回給 API 后 API 才能夠繼續做后面的工作。
異步調用
API 通過 Messaging 間接調用 Scheduler 就是異步調用。 其特點是 API 發出請求后不需要等待,直接返回,繼續做后面的工作。 Scheduler 從 Messaging 接收到請求后執行調度操作,完成后將結果也通過 Messaging 發送給 API。在 OpenStack 這類分布式系統中,通常采用異步調用的方式,其好處是:
1.解耦各子服務。 子服務不需要知道其他服務在哪里運行,只需要發送消息給 Messaging 就能完成調用。
2.提高性能 異步調用使得調用者無需等待結果返回。這樣可以繼續執行更多的工作,提高系統總的吞吐量。
3.提高伸縮性 子服務可以根據需要進行擴展,啟動更多的實例處理更多的請求,在提高可用性的同時也提高了整個系統的伸縮性。而且這種變化不會影響到其他子服務,也就是說變化對別人是透明的。
4.實現 instance 生命周期的管理
nova-compute 創建 instance 的過程可以分為 4 步:
(1)為 instance 準備資源
(2)創建 instance 的鏡像文件
(3)創建 instance 的 XML 定義文件
(4)創建虛擬網絡并啟動虛擬機
5.Nova 創建虛擬機詳細過程
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的信息調用配置的虛擬化驅動來創建虛擬機。
Horizon
作用:web界面服務(Dashboard),提供了以Web的形式對所有節點的所有服務的管理
區域(Region)
- 地理上的概念,可以理解為一個獨立的數據中心,每個所定義的區域有自己獨立的Endpoint;
- 區域之間是完全隔離的,但多個區域之間共享同一個Keystone和Dashboard(目前Openstack中的Dashboard還不支持多個區域);
- 區域的設計更多側重地理位置的概念,用戶可以選擇離自己更新的區域來部署自己的服務,選擇不同的區域主要是考慮那個區域更靠近自己;
- 區域的概念是由Amazon在AWS中提出,主要是解決容錯能力和可靠性;
可用性區域(Availability Zone)
1. AZ是在Region范圍內的再次切分,例如可以把一個機架上的服務器劃分為一個AZ,劃分AZ是為了提高容災能力和提供廉價的隔離服務;2. AZ主要是通過冗余來解決可用性的問題,在Amazon的聲明中,Instance不可用是指用戶所有AZ中的同一個Instance都不可達才表明不可用;3. AZ是用戶可見的一個概念,并可選擇,是物理隔離的,一個AZ不可用不會影響其他的AZ,用戶在創建Instance的時候可以選擇創建到那些AZ中;4. Host Aggreates:一組具有共同屬性的節點集合,如以CPU作為區分類型的一個屬性
Cell
-
概念:nova為了增加橫向擴展以及分布式、大規模(地理位置級別)部署的能力,同時又不增加數據庫和消息中間件的復雜度,引入了cell的概念,并引入了nova-cell服務。
-
作用
- 解決OpenStack的擴展性和規模瓶頸
- 每個Cell都有自己獨立的DB和AMQP,不與其他模塊共用DB和AMQP,解決了大規模環境中DB和AMQP的瓶頸問題;
- Cell實現了樹形結構(通過消息路由)和分級調度(過濾算法和權重算法),Cell之間通過RPC通訊,解決了擴展性問題;
Cinder
-
作用:存儲服務,為運行實例提供穩定的數據塊存儲服務
-
核心組件
-
工作流程
- 用戶向 cinder-api發送創建volume的請求
- cinder-api對請求做一些必要處理后,通過 Messaging將創建消息發送給cinder-scheduler
- cinder-scheduler從 Messaging 獲取到 cinder-api發給它的消息,然后執行調度算法,從若干計存儲點中選出節點 A
- cinder-scheduler通過 Messaging 將創建消息發送給存儲節點A
- 存儲節點 A 的 cinder-volume從 Messaging 中獲取到 cinder-scheduler發給它的消息,然后通過 driver 在 volume provider 上創建 volume。
數據持久化
鏡像(帶有選中“創建新卷”):此選項使用鏡像來啟動實例,并且創建一個新卷來持久化實例數據。您可以指定卷大小并指定在刪除實例時是否刪除實例。
卷:這個選項使用一個已存在的卷。它不創建新卷。您可以選擇在刪除實例時刪除卷。注意:當選擇卷時,您只能啟動一個實例。
卷快照:此選項使用卷快照啟動實例,并且創建一個新卷來持久化實例數據。您可以選擇在刪除實例時刪除卷。
搭建云平臺(單雙節點)
創建虛擬機并配置網絡
- 虛擬機規格(單雙節點均可用)
- 網絡配置
3 . 基本環境配置
4 . 編輯環境變量
5 . 執行腳本安裝服務
1 . 單節點(computer改為compute)
2 . 雙節點(computer改為compute)
面試題
說一下 OpenStack 及其主要組件?
OpenStack 是一系列開源軟件,這些軟件組成了一個云供給軟件,也就是 OpenStack,意即開源軟件或項目棧。
下面是 OpenStack 的主要關鍵組件:
Nova – 用于在計算級別管理虛擬機,并在計算或管理程序級別執行其他計算任務。
Neutron – 為虛擬機、計算和控制節點提供網絡功能。
Keystone – 為所有云用戶和 OpenStack 云服務提供身份認證服務。換句話說,我們可以說 Keystone 是一個提供給云用戶和云服務訪問權限的方法。
Horizon – 用于提供圖形用戶界面。使用圖形化管理界面可以很輕松地完成各種日常操作任務。
Cinder – 用于提供塊存儲功能。通常來說 OpenStack 的 Cinder 中集成了 Chef 和 ScaleIO 來共同為計算和控制節點提供塊存儲服務。
Swift – 用于提供對象存儲功能。通常來說,Glance 管理的鏡像是存儲在對象存儲空間的。像 ScaleIO 這樣的外部存儲也可以提供對象存儲,可以很容易的集成 Glance 服務。
Glance – 用于提供鏡像服務。使用 Glance 的管理平臺來上傳和下載云鏡像。
Heat – 用于提供編排服務或功能。使用 Heat 管理平臺可以輕松地將虛擬機作為堆棧,并且根據需要可以將虛擬機擴展或收縮。
Ceilometer – 用于提供計量與監控功能。
什么服務通常在控制節點上運行?
以下服務通常在控制節點上運行:
認證服務(KeyStone)
鏡像服務(Glance)
Nova 服務比如 Nova API、Nova Scheduler 和 Nova DB
塊存儲和對象存儲服務
Ceilometer 服務
MariaDB / MySQL 和 RabbitMQ 服務
網絡(Neutron)和網絡代理的管理服務
編排服務(Heat)
計算節點上虛擬機的默認地址是什么?
虛擬機存儲在計算節點的/var/lib/nova/instances
什么服務通常在計算節點上運行?
Nova 計算
網絡服務,比如 OVS
Glance 鏡像的默認地址是什么?
因為 Glance 服務運行在控制節點上,所以 Glance 鏡像都被存儲在控制節點的 /var/lib/glance/images 文件夾下。
說一下如何使用命令行啟動一個虛擬機?
我們可以使用如下 OpenStack 命令來啟動一個新的虛擬機:
# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID} --nic net-id={Network-ID} --security-group {Security_Group_ID} –key-name {Keypair-Name} <VM_Name>
如何在 OpenStack 中顯示用戶的網絡命名空間列表?
可以使用 ip net ns 命令來列出用戶的網絡命名空間。
ip netns list
qdhcp-a51635b1-d023-419a-93b5-39de47755d2d
haproxy
vrouter
如何在 OpenStack 中執行網絡命名空間內的命令?
假設我們想在 qdhcp-a51635b1-d023-419a-93b5-39de47755d2d 網絡命名空間中執行 ifconfig 命令,我們可以執行如下命令。
命令格式 : ip netns exec {network-space} :
ip netns exec qdhcp-a51635b1-d023-419a-93b5-39de47755d2d "ifconfig"
在 Glance 服務中如何使用命令行上傳和下載鏡像?
Glance 服務中云鏡像上傳可以使用如下 OpenStack 命令:
openstack image create --disk-format qcow2 --container-format bare --public --file {Name-Cloud-Image}.qcow2 <Cloud-Image-Name>
下載云鏡像則使用如下命令:
glance image-download --file <Cloud-Image-Name> --progress <Image-ID>
OpenStack 如何將虛擬機從錯誤狀態轉換為活動狀態?
在某些情況下虛擬機可能會進入錯誤狀態,可以使用如下命令將錯誤狀態轉換為活動狀態:
~# nova reset-state --active {Instance_id}
如何使用命令行來獲取可使用的浮動 IP 列表?
可使用如下命令來顯示可用浮動 IP 列表:
~]# openstack ip floating list | grep None | head -10
如何在特定可用區域中或在計算主機上配置虛擬機?
假設我們想在 compute-02 中的可用區 NonProduction 上配置虛擬機,可以使用如下命令:
~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=e0be93b8-728b-4d4d-a272-7d672b2560a6 --security-group NonProd_SG --key-name linuxtec --availability-zone NonProduction:compute-02 nonprod_testvm
如何使用命令行查看 OpenStack 實例的控制臺日志?
使用如下命令可查看實例的控制臺日志。
首先獲取實例的 ID,然后使用如下命令:
~# openstack console log show {Instance-id}
如何在特定計算節點上獲取配置的虛擬機列表?
假設我們想要獲取在 compute-0-19 中配置的虛擬機列表,可以使用如下命令:
openstack server list –all-projects –long -c Name -c Host | grep -i {Compute-Node-Name}
:
~# openstack server list --all-projects --long -c Name -c Host | grep -i compute-0-19
如何獲取 OpenStack 實例的控制臺的 URL 地址?
可以使用以下 OpenStack 命令從命令行檢索實例的控制臺 URL 地址:
~# openstack console url show {Instance-id}
如何使用命令行創建可啟動的 cinder / block 存儲卷?
假設創建一個 8GB 可啟動存儲卷,可參考如下步驟:
使用如下命令獲取鏡像列表
~# openstack image list | grep -i cirros
| 89254d46-a54b-4bc8-8e4d-658287c7ee92 | cirros | active |
使用 cirros 鏡像創建 8GB 的可啟動存儲卷
~# cinder create --image-id 89254d46-a54b-4bc8-8e4d-658287c7ee92 --display-name cirros-bootable-vol 8
如何列出所有在你的 OpenStack 中創建的項目或用戶?
可以使用如下命令來檢索所有項目和用戶:
~# openstack project list --long
如何顯示 OpenStack 服務端點列表?
OpenStack 服務端點被分為 3 類:
公共端點
內部端點
管理端點
使用如下 OpenStack 命令來查看各種 OpenStack 服務端點:
~# openstack catalog list
可通過以下命令來顯示特定服務端點(比如說 keystone)列表:
~# openstack catalog show keystone
在控制節點上你應該按照什么步驟來重啟 nova 服務?
應該按照如下步驟來重啟 OpenStack 控制節點的 nova 服務:
service nova-api restart
service nova-cert restart
service nova-conductor restart
service nova-consoleauth restart
service nova-scheduler restart
如何使用命令行在 OpenStack 中向存在的安全組 SG(安全組)中添加新規則?
可以使用 neutron 命令向 OpenStack 已存在的安全組中添加新規則:
~# neutron security-group-rule-create --protocol <tcp or udp> --port-range-min <port-number> --port-range-max <port-number> --direction <ingress or egress> --remote-ip-prefix <IP-address-or-range> Security-Group-Name
假如計算節點上為數據流量配置了一些 DPDK 端口,你如何檢查 DPDK 端口的狀態呢?
因為我們使用 openvSwitch (OVS) 來配置 DPDK 端口,因此可以使用如下命令來檢查端口的狀態:
root@compute-0-15:~# ovs-appctl bond/show | grep dpdk
active slave mac: 90:38:09:ac:7a:99(dpdk0)
slave dpdk0: enabled
slave dpdk1: enabled
root@compute-0-15:~#
root@compute-0-15:~# dpdk-devbind.py --status
如何查看控制節點和計算節點的 OVS 橋配置?
控制節點和計算節點的 OVS 橋配置可使用以下命令來查看:
~]# ovs-vsctl show
計算節點上的集成橋(br-int)的作用是什么?
集成橋(br-int)對來自和運行在計算節點上的實例的流量執行 VLAN 標記和取消標記。
數據包從實例的 n/w 接口發出使用虛擬接口 qvo 通過 Linux 橋(qbr)。qvb 接口是用來連接 Linux 橋的,qvo 接口是用來連接集成橋的。集成橋上的 qvo 端口有一個內部 VLAN 標簽,這個標簽是用于當數據包到達集成橋的時候貼到數據包頭部的。
隧道橋(br-tun)在計算節點上的作用是什么?
隧道橋(br-tun)根據 OpenFlow 規則將 VLAN 標記的流量從集成網橋轉換為隧道 ID。
隧道橋允許不同網絡的實例彼此進行通信。隧道有利于封裝在非安全網絡上傳輸的流量,它支持兩層網絡,即 GRE 和 VXLAN。
外部 OVS 橋(br-ex)的作用是什么?
顧名思義,此網橋轉發來往網絡的流量,以允許外部訪問實例。br-ex 連接物理接口比如 eth2,這樣用戶網絡的浮動 IP 數據從物理網絡接收并路由到用戶網絡端口。
OpenStack 網絡中 OpenFlow 規則的作用是什么?
OpenFlow 規則是一種機制,這種機制定義了一個數據包如何從源到達目的地。OpenFlow 規則存儲在 flow 表中。flow 表是 OpenFlow 交換機的一部分。
當一個數據包到達交換機就會被第一個 flow 表檢查,如果不匹配 flow 表中的任何入口,那這個數據包就會被丟棄或者轉發到其他 flow 表中。
怎樣查看 OpenFlow 交換機的信息(比如端口、表編號、緩存編號等)?
假如我們要顯示 OpenFlow 交換機的信息(br-int),需要執行如下命令:
root@compute-0-15# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000fe981785c443
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst1(patch-tun): addr:3a:c6:4f:bd:3e:3bconfig: 0state: 0speed: 0 Mbps now, 0 Mbps max2(qvob35d2d65-f3): addr:b2:83:c4:0b:42:3aconfig: 0state: 0current: 10GB-FD COPPERspeed: 10000 Mbps now, 0 Mbps max………………………………………
CPU Pinning 是什么?
CPU Pinning 是指為某個虛擬機保留物理核心。它也稱為 CPU 隔離或處理器關聯。有兩個目的:
它確保虛擬機只能在專用核心上運行
它還確保公共主機進程不在這些核心上運行
我們也可以認為 Pinning 是物理核心到一個用戶虛擬 CPU(vCPU)的一對一映射。
如何顯示交換機中的所有 flow 的入口?
可以使用命令ovs-ofctl dump-flows
來查看交換機的 flow 入口。
假設我們想顯示 OVS 集成橋(br-int)的所有 flow 入口,可以使用如下命令:
[root@compute01 ~]# ovs-ofctl dump-flows br-int
什么是 Neutron 代理?如何顯示所有 Neutron 代理?
OpenStack Neutron 服務器充當中心控制器,實際網絡配置是在計算節點或者網絡節點上執行的。Neutron 代理是計算節點或者網絡節點上進行配置更新的軟件實體。Neutron 代理通過 Neuron 服務和消息隊列來和中心 Neutron 服務通信。
可通過如下命令查看 Neutron 代理列表:
~# openstack network agent list -c ‘Agent type’ -c Host -c Alive -c State