一、nova介紹:
Nova 是 OpenStack 最核心的服務(wù)柏靶,負(fù)責(zé)維護(hù)和管理云環(huán)境的計(jì)算資源弃理。OpenStack 作為 IaaS 的云操作系統(tǒng),虛擬機(jī)生命周期管理也就是通過(guò) Nova 來(lái)實(shí)現(xiàn)的屎蜓。
用途與功能 :
- 實(shí)例生命周期管理
- 管理計(jì)算資源
- 網(wǎng)絡(luò)和認(rèn)證管理
4)REST 風(fēng)格的 API - 異步的一致性通信
6)Hypervisor 透明:支持Xen,XenServer/XCP,KVM, UML, VMware vSphere and Hyper-V
在上圖中可以看到痘昌,Nova 處于 Openstak 架構(gòu)的中心,其他組件都為 Nova 提供支持: Glance 為 VM 提供 image Cinder 和 Swift 分別為 VM 提供塊存儲(chǔ)和對(duì)象存儲(chǔ) Neutron 為 VM 提供網(wǎng)絡(luò)連接炬转。
Nova 架構(gòu)如下:
Nova 的架構(gòu)比較復(fù)雜辆苔,包含很多組件。 這些組件以子服務(wù)(后臺(tái) deamon 進(jìn)程)的形式運(yùn)行扼劈,可以分為以下幾類(lèi):
API
nova-api
是整個(gè) Nova 組件的門(mén)戶(hù)驻啤,接收和響應(yīng)客戶(hù)的 API 調(diào)用。所有對(duì) Nova 的請(qǐng)求都首先由 nova-api 處理荐吵。nova-api 向外界暴露若干 HTTP REST API 接口 在 keystone 中我們可以查詢(xún) nova-api 的 endponits骑冗。
客戶(hù)端就可以將請(qǐng)求發(fā)送到 endponits 指定的地址,向 nova-api 請(qǐng)求操作捍靠。 當(dāng)然沐旨,作為最終用戶(hù)的我們不會(huì)直接發(fā)送 Rest AP I請(qǐng)求。 OpenStack CLI榨婆,Dashboard 和其他需要跟 Nova 交換的組件會(huì)使用這些 API磁携。
Nova-api 對(duì)接收到的 HTTP API 請(qǐng)求會(huì)做如下處理:
1. 檢查客戶(hù)端傳入的參數(shù)是否合法有效
2. 調(diào)用 Nova 其他子服務(wù)的處理客戶(hù)端 HTTP 請(qǐng)求
3. 格式化 Nova 其他子服務(wù)返回的結(jié)果并返回給客戶(hù)端
nova-api 接收哪些請(qǐng)求?
簡(jiǎn)單的說(shuō)良风,只要是跟虛擬機(jī)生命周期相關(guān)的操作谊迄,nova-api 都可以響應(yīng)。 大部分操作都可以在 Dashboard 上找到烟央。打開(kāi)Instance管理界面
除了提供 OpenStack 自己的API统诺,nova-api 還支持 Amazon EC2 API。 也就是說(shuō)疑俭,如果客戶(hù)以前使用 Amazon EC2粮呢,并且用 EC2 的 API 開(kāi)發(fā)了些工具來(lái)管理虛機(jī),那么如果現(xiàn)在要換成 OpenStack,這些工具可以無(wú)縫遷移到 OpenStack啄寡,因?yàn)?nova-api 兼容 EC2 API豪硅,無(wú)需做任何修改。
Compute Core
a)nova-scheduler:
虛機(jī)調(diào)度服務(wù)挺物,負(fù)責(zé)決定在哪個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行虛機(jī)懒浮。創(chuàng)建 Instance 時(shí),用戶(hù)會(huì)提出資源需求识藤,例如 CPU砚著、內(nèi)存、磁盤(pán)各需要多少痴昧。OpenStack 將這些需求定義在 flavor 中稽穆,用戶(hù)只需要指定用哪個(gè) flavor 就可以了。
可用的 flavor 在 System->Flavors 中管理剪个。
下面介紹 nova-scheduler 是如何實(shí)現(xiàn)調(diào)度的秧骑。在 /etc/nova/nova.conf 中,nova 通過(guò) driver=filter_scheduler 這個(gè)參數(shù)來(lái)配置 nova-scheduler扣囊。
driver=filter_scheduler
Filter scheduler
Filter scheduler 是 nova-scheduler 默認(rèn)的調(diào)度器乎折,調(diào)度過(guò)程分為兩步:
1. 通過(guò)過(guò)濾器(filter)選擇滿(mǎn)足條件的計(jì)算節(jié)點(diǎn)(運(yùn)行 nova-compute)
2. 通過(guò)權(quán)重計(jì)算(weighting)選擇在最優(yōu)(權(quán)重值最大)的計(jì)算節(jié)點(diǎn)上創(chuàng)建 Instance。
Nova 允許使用第三方 scheduler侵歇,配置 scheduler_driver 即可骂澄。 這又一次體現(xiàn)了OpenStack的開(kāi)放性。Scheduler 可以使用多個(gè) filter 依次進(jìn)行過(guò)濾惕虑,過(guò)濾之后的節(jié)點(diǎn)再通過(guò)計(jì)算權(quán)重選出最適合的節(jié)點(diǎn)坟冲。
上圖是調(diào)度過(guò)程的一個(gè)示例:
1. 最開(kāi)始有 6 個(gè)計(jì)算節(jié)點(diǎn) Host1-Host6
2. 通過(guò)多個(gè) filter 層層過(guò)濾,Host2 和 Host4 沒(méi)有通過(guò)溃蔫,被刷掉了
3. Host1健提,Host3,Host5伟叛,Host6 計(jì)算權(quán)重私痹,結(jié)果 Host5 得分最高,最終入選
當(dāng) Filter scheduler 需要執(zhí)行調(diào)度操作時(shí)统刮,會(huì)讓 filter 對(duì)計(jì)算節(jié)點(diǎn)進(jìn)行判斷紊遵,filter 返回 True 或 False。經(jīng)過(guò)前面一堆 filter 的過(guò)濾侥蒙,nova-scheduler 選出了能夠部署 instance 的計(jì)算節(jié)點(diǎn)暗膜。
如果有多個(gè)計(jì)算節(jié)點(diǎn)通過(guò)了過(guò)濾,那么最終選擇哪個(gè)節(jié)點(diǎn)呢鞭衩?
Scheduler 會(huì)對(duì)每個(gè)計(jì)算節(jié)點(diǎn)打分学搜,得分最高的獲勝娃善。 打分的過(guò)程就是 weight,翻譯過(guò)來(lái)就是計(jì)算權(quán)重值恒水,那么 scheduler 是根據(jù)什么來(lái)計(jì)算權(quán)重值呢会放?
目前 nova-scheduler 的默認(rèn)實(shí)現(xiàn)是根據(jù)計(jì)算節(jié)點(diǎn)空閑的內(nèi)存量計(jì)算權(quán)重值: 空閑內(nèi)存越多,權(quán)重越大钉凌,instance 將被部署到當(dāng)前空閑內(nèi)存最多的計(jì)算節(jié)點(diǎn)上。
b)nova-compute:
nova-compute 是管理虛機(jī)的核心服務(wù)捂人,在計(jì)算節(jié)點(diǎn)上運(yùn)行御雕。通過(guò)調(diào)用Hypervisor API實(shí)現(xiàn)節(jié)點(diǎn)上的 instance的生命周期管理。 OpenStack 對(duì) instance 的操作滥搭,最后都是交給 nova-compute 來(lái)完成的酸纲。 nova-compute 與 Hypervisor 一起實(shí)現(xiàn) OpenStack 對(duì) instance 生命周期的管理。
通過(guò)Driver架構(gòu)支持多種Hypervisor
Hypervisor是計(jì)算節(jié)點(diǎn)上跑的虛擬化管理程序瑟匆,虛機(jī)管理最底層的程序闽坡。 不同虛擬化技術(shù)提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM愁溜,Xen疾嗅, VMWare 等。nova-compute 為這些 Hypervisor 定義了統(tǒng)一的接口冕象,Hypervisor 只需要實(shí)現(xiàn)這些接口代承,就可以 Driver 的形式即插即用到 OpenStack 系統(tǒng)中。 下面是Nova Driver的架構(gòu)示意圖:
c)nova-conductor:
nova-compute 經(jīng)常需要更新數(shù)據(jù)庫(kù)渐扮,比如更新和獲取虛機(jī)的狀態(tài)论悴。 出于安全性和伸縮性的考慮,nova-compute 并不會(huì)直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)墓律,而是將這個(gè)任務(wù)委托給 nova-conductor膀估。
這樣做有兩個(gè)顯著好處:
1. 更高的系統(tǒng)安全性
2. 更好的系統(tǒng)伸縮性
Console Interface
nova-console: 用戶(hù)可以通過(guò)多種方式訪(fǎng)問(wèn)虛機(jī)的控制臺(tái):
nova-novncproxy: 基于 Web 瀏覽器的 VNC 訪(fǎng)問(wèn)
nova-spicehtml5proxy: 基于 HTML5 瀏覽器的 SPICE 訪(fǎng)問(wèn)
nova-xvpnvncproxy: 基于 Java 客戶(hù)端的 VNC 訪(fǎng)問(wèn)
nova-consoleauth: 負(fù)責(zé)對(duì)訪(fǎng)問(wèn)虛機(jī)控制臺(tái)請(qǐng)求提供 Token 認(rèn)證
nova-cert: 提供 x509 證書(shū)支持
Database
Nova 會(huì)有一些數(shù)據(jù)需要存放到數(shù)據(jù)庫(kù)中,一般使用 MySQL耻讽。數(shù)據(jù)庫(kù)安裝在控制節(jié)點(diǎn)上察纯。 Nova 使用命名為 “nova” 的數(shù)據(jù)庫(kù)。
Message Queue
在前面我們了解到 Nova 包含眾多的子服務(wù)齐饮,這些子服務(wù)之間需要相互協(xié)調(diào)和通信捐寥。為解耦各個(gè)子服務(wù),Nova 通過(guò) Message Queue 作為子服務(wù)的信息中轉(zhuǎn)站祖驱。 所以在架構(gòu)圖上我們看到了子服務(wù)之間沒(méi)有直接的連線(xiàn)握恳,是通過(guò) Message Queue 聯(lián)系的。
OpenStack 默認(rèn)是用 RabbitMQ 作為 Message Queue捺僻。 MQ 是 OpenStack 的核心基礎(chǔ)組件乡洼,我們后面也會(huì)詳細(xì)介紹崇裁。
二、Nova 組件如何協(xié)同工作
Nova 物理部署方案
前面大家已經(jīng)看到 Nova 由很多子服務(wù)組成束昵,我們也知道 OpenStack 是一個(gè)分布式系統(tǒng)拔稳,可以部署到若干節(jié)點(diǎn)上,那么接下來(lái)大家可能就會(huì)問(wèn):Nova 的這些服務(wù)在物理上應(yīng)該如何部署呢锹雏?
對(duì)于 Nova巴比,這些服務(wù)會(huì)部署在兩類(lèi)節(jié)點(diǎn)上:計(jì)算節(jié)點(diǎn)和控制節(jié)點(diǎn)。
計(jì)算節(jié)點(diǎn)上安裝了 Hypervisor礁遵,上面運(yùn)行虛擬機(jī)轻绞。 由此可知:
1. 只有 nova-compute 需要放在計(jì)算節(jié)點(diǎn)上。
2. 其他子服務(wù)則是放在控制節(jié)點(diǎn)上的佣耐。
下面我們可以看看實(shí)驗(yàn)環(huán)境的具體部署情況政勃。 通過(guò)在計(jì)算節(jié)點(diǎn)和控制節(jié)點(diǎn)上運(yùn)行
ps -elf | grep nova 來(lái)查看運(yùn)行的 nova 子服務(wù)
計(jì)算節(jié)點(diǎn)compute只運(yùn)行了nova-compute子服務(wù)
控制節(jié)點(diǎn)controller運(yùn)行了若干nova-*子服務(wù)
RabbitMQ 和 MySQL 也是放在控制節(jié)點(diǎn)上的〖孀可能細(xì)心的同學(xué)已經(jīng)發(fā)現(xiàn)我們的控制節(jié)點(diǎn)上也運(yùn)行了 nova-compute奸远。 這實(shí)際上也就意味著 devstack-controller 既是一個(gè)控制節(jié)點(diǎn),同時(shí)也是一個(gè)計(jì)算節(jié)點(diǎn)讽挟,也可以在上面運(yùn)行虛機(jī)懒叛。
這也向我們展示了 OpenStack 這種分布式架構(gòu)部署上的靈活性: 可以將所有服務(wù)都放在一臺(tái)物理機(jī)上,作為一個(gè) All-in-One 的測(cè)試環(huán)境戏挡; 也可以將服務(wù)部署在多臺(tái)物理機(jī)上芍瑞,獲得更好的性能和高可用。
另外褐墅,也可以用 nova service-list 查看 nova-* 子服務(wù)都分布在哪些節(jié)點(diǎn)上
從虛機(jī)創(chuàng)建流程看 nova-* 子服務(wù)如何協(xié)同工作
從學(xué)習(xí) Nova 的角度看拆檬,虛機(jī)創(chuàng)建是一個(gè)非常好的場(chǎng)景,涉及的 nova-* 子服務(wù)很全妥凳,下面是流程圖竟贯。
- 客戶(hù)(可以是 OpenStack 最終用戶(hù),也可以是其他程序)向 API(nova-api)發(fā)送請(qǐng)求:“幫我創(chuàng)建一個(gè)虛機(jī)”
- API 對(duì)請(qǐng)求做一些必要處理后逝钥,向 Messaging(RabbitMQ)發(fā)送了一條消息:“讓 Scheduler 創(chuàng)建一個(gè)虛機(jī)”
- Scheduler(nova-scheduler)從 Messaging 獲取到 API 發(fā)給它的消息屑那,然后執(zhí)行調(diào)度算法,從若干計(jì)算節(jié)點(diǎn)中選出節(jié)點(diǎn) A
- Scheduler 向 Messaging 發(fā)送了一條消息:“在計(jì)算節(jié)點(diǎn) A 上創(chuàng)建這個(gè)虛機(jī)”
- 計(jì)算節(jié)點(diǎn) A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發(fā)給它的消息艘款,然后在本節(jié)點(diǎn)的 Hypervisor 上啟動(dòng)虛機(jī)持际。
- 在虛機(jī)創(chuàng)建的過(guò)程中,Compute 如果需要查詢(xún)或更新數(shù)據(jù)庫(kù)信息哗咆,會(huì)通過(guò) Messaging 向 Conductor(nova-conductor)發(fā)送消息蜘欲,Conductor 負(fù)責(zé)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)。
以上是創(chuàng)建虛機(jī)最核心的步驟晌柬, 這幾個(gè)步驟向我們展示了 nova-* 子服務(wù)之間的協(xié)作的方式姥份,也體現(xiàn)了 OpenStack 整個(gè)系統(tǒng)的分布式設(shè)計(jì)思想郭脂,掌握這種思想對(duì)我們深入理解 OpenStack 會(huì)非常有幫助。
三澈歉、Nova 創(chuàng)建虛擬機(jī)詳細(xì)過(guò)程
1展鸡、界面或命令行通過(guò)RESTful API向keystone獲取認(rèn)證信息。
2埃难、keystone通過(guò)用戶(hù)請(qǐng)求認(rèn)證信息莹弊,并生成auth-token返回給對(duì)應(yīng)的認(rèn)證請(qǐng)求。
3涡尘、界面或命令行通過(guò)RESTful API向nova-api發(fā)送一個(gè)boot instance的請(qǐng)求(攜帶auth-token)箱硕。
4、nova-api接受請(qǐng)求后向keystone發(fā)送認(rèn)證請(qǐng)求悟衩,查看token是否為有效用戶(hù)和token。
5栓拜、keystone驗(yàn)證token是否有效座泳,如有效則返回有效的認(rèn)證和對(duì)應(yīng)的角色(注:有些操作需要有角色權(quán)限才能操作)。
6幕与、通過(guò)認(rèn)證后nova-api和數(shù)據(jù)庫(kù)通訊挑势。
7、初始化新建虛擬機(jī)的數(shù)據(jù)庫(kù)記錄啦鸣。
8潮饱、nova-api通過(guò)rpc.call向nova-scheduler請(qǐng)求是否有創(chuàng)建虛擬機(jī)的資源(Host ID)。
9诫给、nova-scheduler進(jìn)程偵聽(tīng)消息隊(duì)列香拉,獲取nova-api的請(qǐng)求。
10中狂、nova-scheduler通過(guò)查詢(xún)nova數(shù)據(jù)庫(kù)中計(jì)算資源的情況凫碌,并通過(guò)調(diào)度算法計(jì)算符合虛擬機(jī)創(chuàng)建需要的主機(jī)。
11胃榕、對(duì)于有符合虛擬機(jī)創(chuàng)建的主機(jī)盛险,nova-scheduler更新數(shù)據(jù)庫(kù)中虛擬機(jī)對(duì)應(yīng)的物理主機(jī)信息。
12勋又、nova-scheduler通過(guò)rpc.cast向nova-compute發(fā)送對(duì)應(yīng)的創(chuàng)建虛擬機(jī)請(qǐng)求的消息苦掘。
13、nova-compute會(huì)從對(duì)應(yīng)的消息隊(duì)列中獲取創(chuàng)建虛擬機(jī)請(qǐng)求的消息楔壤。
14鹤啡、nova-compute通過(guò)rpc.call向nova-conductor請(qǐng)求獲取虛擬機(jī)消息。(Flavor)
15挺邀、nova-conductor從消息隊(duì)隊(duì)列中拿到nova-compute請(qǐng)求消息揉忘。
16跳座、nova-conductor根據(jù)消息查詢(xún)虛擬機(jī)對(duì)應(yīng)的信息。
17泣矛、nova-conductor從數(shù)據(jù)庫(kù)中獲得虛擬機(jī)對(duì)應(yīng)信息疲眷。
18、nova-conductor把虛擬機(jī)信息通過(guò)消息的方式發(fā)送到消息隊(duì)列中您朽。
19狂丝、nova-compute從對(duì)應(yīng)的消息隊(duì)列中獲取虛擬機(jī)信息消息。
20哗总、nova-compute通過(guò)keystone的RESTfull API拿到認(rèn)證的token几颜,并通過(guò)HTTP請(qǐng)求glance-api獲取創(chuàng)建虛擬機(jī)所需要鏡像。
21讯屈、glance-api向keystone認(rèn)證token是否有效蛋哭,并返回驗(yàn)證結(jié)果。
22涮母、token驗(yàn)證通過(guò)谆趾,nova-compute獲得虛擬機(jī)鏡像信息(URL)。
23叛本、nova-compute通過(guò)keystone的RESTfull API拿到認(rèn)證k的token沪蓬,并通過(guò)HTTP請(qǐng)求neutron-server獲取創(chuàng)建虛擬機(jī)所需要的網(wǎng)絡(luò)信息。
24来候、neutron-server向keystone認(rèn)證token是否有效跷叉,并返回驗(yàn)證結(jié)果。
25营搅、token驗(yàn)證通過(guò)云挟,nova-compute獲得虛擬機(jī)網(wǎng)絡(luò)信息。
26剧防、nova-compute通過(guò)keystone的RESTfull API拿到認(rèn)證的token植锉,并通過(guò)HTTP請(qǐng)求cinder-api獲取創(chuàng)建虛擬機(jī)所需要的持久化存儲(chǔ)信息。
27峭拘、cinder-api向keystone認(rèn)證token是否有效俊庇,并返回驗(yàn)證結(jié)果。
28鸡挠、token驗(yàn)證通過(guò)辉饱,nova-compute獲得虛擬機(jī)持久化存儲(chǔ)信息。
29拣展、nova-compute根據(jù)instance的信息調(diào)用配置的虛擬化驅(qū)動(dòng)來(lái)創(chuàng)建虛擬機(jī)彭沼。
四、徹底刪除nova-compute節(jié)點(diǎn)
1备埃、控制節(jié)點(diǎn)上操作查看計(jì)算節(jié)點(diǎn)姓惑,刪除node1
openstack host list
nova service-list
2褐奴、將node1上的計(jì)算服務(wù)設(shè)置為down,然后disabled
systemctl stop openstack-nova-compute
nova service-list
nova service-disable node1 nova-compute
nova service-list
3于毙、在數(shù)據(jù)庫(kù)里清理(nova庫(kù))
(1)參看現(xiàn)在數(shù)據(jù)庫(kù)狀態(tài)
[root@node1 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 90
Server version: 10.1.20-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use nova;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [nova]> select host from nova.services;
+---------+
| host |
+---------+
| 0.0.0.0 |
| 0.0.0.0 |
| node1 |
| node1 |
| node1 |
| node1 |
| node2 |
+---------+
7 rows in set (0.00 sec)
MariaDB [nova]> select hypervisor_hostname from compute_nodes;
+---------------------+
| hypervisor_hostname |
+---------------------+
| node1 |
| node2 |
+---------------------+
2 rows in set (0.00 sec)
(2)刪除數(shù)據(jù)庫(kù)中的node1節(jié)點(diǎn)信息
MariaDB [nova]> delete from nova.services where host="node1";
Query OK, 4 rows affected (0.01 sec)
MariaDB [nova]> delete from compute_nodes where hypervisor_hostname="node1";
Query OK, 1 row affected (0.00 sec)
MariaDB [nova]>
MariaDB [nova]>
MariaDB [nova]>
MariaDB [nova]> select host from nova.services;
+---------+
| host |
+---------+
| 0.0.0.0 |
| 0.0.0.0 |
| node2 |
+---------+
3 rows in set (0.00 sec)
MariaDB [nova]> select hypervisor_hostname from compute_nodes;
+---------------------+
| hypervisor_hostname |
+---------------------+
| node2 |
+---------------------+
1 row in set (0.00 sec)
MariaDB [nova]>
nova主控制端的配置流程
1敦冬、數(shù)據(jù)庫(kù)的用戶(hù)創(chuàng)建
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
#權(quán)限設(shè)置
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
2、創(chuàng)建OpenStack用戶(hù)和服務(wù)項(xiàng)目
創(chuàng)建Nova用戶(hù):
$ openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 8a7dbf5279404537b1c7b86c033620fe |
| name | nova |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
用戶(hù)加入到項(xiàng)目角色里:
$ openstack role add --project service --user nova admin
創(chuàng)建Nova服務(wù):
$ openstack service create --name nova \
--description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 060d59eac51b4594815603d75a00aba2 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
創(chuàng)建compute API 服務(wù)端口地址:
$ openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 3c1caa473bfe4390a11e7177894bcc7b |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 060d59eac51b4594815603d75a00aba2 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+-------------------------------------------+
$ openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | e3c918de680746a586eac1f2d9bc10ab |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 060d59eac51b4594815603d75a00aba2 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+-------------------------------------------+
$ openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 38f7af91666a47cfb97b4dc790b94424 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 060d59eac51b4594815603d75a00aba2 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+-------------------------------------------+
創(chuàng)建placement用戶(hù):
$ openstack user create --domain default --password-prompt placement
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | fa742015a6494a949f67629884fc7ec8 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
將placement加入到服務(wù)項(xiàng)目的角色里:
$ openstack role add --project service --user placement admin
創(chuàng)建placement API服務(wù):
$ openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | 2d1a27022e6e4185b86adac4444c495f |
| name | placement |
| type | placement |
+-------------+----------------------------------+
創(chuàng)建placement API 服務(wù)的端口地址:
$ openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 2b1b2637908b4137a9c2e0470487cbc0 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 02bcda9a150a4bd7993ff4879df971ab |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 3d71177b9e0f406f98cbff198d74b182 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
3唯沮、下載主控制程序數(shù)據(jù)包
# yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api
4脖旱、編輯配置文件
vim /etc/nova/nova.conf
[DEFAULT]
my_ip=172.16.254.63 #本機(jī)的ip地址
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver #防火墻驅(qū)動(dòng)程序
enabled_apis=osapi_compute,metadata
transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/) #rabbit的OpenStack用戶(hù)的地址和密碼
[api]
auth_strategy = keystone
[api_database]
數(shù)據(jù)庫(kù)的連接地址用戶(hù)名和密碼:
connection = mysql+[pymysql://nova:NOVA_DBPASS@controller/nova_api](pymysql://nova:NOVA_DBPASS@controller/nova_api)
[barbican]
[cache]
[cells]
[cinder]
#os_region_name = RegionOne #先不用
[cloudpipe]
[conductor]
[console]
[consoleauth]
[cors]
[cors.subdomain]
[crypto]
[database]
Nova用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的連接地址:
connection = mysql+[pymysql://nova:NOVA_DBPASS@controller/nova](pymysql://nova:NOVA_DBPASS@controller/nova)
[ephemeral_storage_encryption]
[filter_scheduler]
[glance]
api服務(wù)的地址
api_servers = [http://controller:9292](http://controller:9292/)
[guestfs]
[healthcheck]
[hyperv]
[image_file_url]
[ironic]
[key_manager]
[keystone_authtoken]
auth_uri = [http://controller:5000](http://controller:5000/) #內(nèi)外服務(wù)地址
auth_url = [http://controller:35357](http://controller:35357/)#管理服務(wù)地址
memcached_servers = controller:11211 #緩存服務(wù)地址
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova
[libvirt]
virt_type=qemu
[matchmaker_redis]
[metrics]
[mks]
[neutron] #先不用
url = [http://controller:9696](http://controller:9696/)
auth_url = [http://controller:35357](http://controller:35357/)
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
[notifications]
[osapi_v21]
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[pci]
[placement]
os_region_name = RegionOne
auth_type = password
auth_url = [http://controller:35357/v3](http://controller:35357/v3)
project_name = service
project_domain_name = Default
username = placement
password = placement
user_domain_name = Default
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vendordata_dynamic_auth]
[vmware]
[vnc]
enabled=true #開(kāi)啟vnc
vncserver_listen=$my_ip #本機(jī)ip
vncserver_proxyclient_address=$my_ip #本機(jī)ip
novncproxy_base_url = [http://172.16.254.63:6080/vnc_auto.html](http://172.16.254.63:6080/vnc_auto.html)
[workarounds]
[wsgi]
[xenserver]
[xvp]
5、編輯配置文件
vim /etc/httpd/conf.d/00-nova-placement-api.conf
添加以下文件
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
6介蛉、重啟httpd
systemctl restart httpd
7萌庆、同步api數(shù)據(jù)庫(kù)
# su -s /bin/sh -c "nova-manage api_db sync" nova
8、注冊(cè)cell0數(shù)據(jù)庫(kù)
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
9币旧、創(chuàng)建cell1
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
109e1d4b-536a-40d0-83c6-5f121b82b650
10践险、導(dǎo)入Nova表
# su -s /bin/sh -c "nova-manage db sync" nova
11、查看cell1和cell0
# nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name | UUID |
+-------+--------------------------------------+
| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
| cell0 | 00000000-0000-0000-0000-000000000000 |
+-------+--------------------------------------+
12吹菱、重啟和開(kāi)機(jī)自啟
# systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
13捏境、檢查服務(wù)狀態(tài)
[root@node1 ~]# openstack compute service list
+----+------------------+-------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+------------------+-------+----------+---------+-------+----------------------------+
| 1 | nova-conductor | node1 | internal | enabled | up | 2019-07-31T10:31:47.000000 |
| 2 | nova-consoleauth | node1 | internal | enabled | up | 2019-07-31T10:31:39.000000 |
| 3 | nova-scheduler | node1 | internal | enabled | up | 2019-07-31T10:31:48.000000 |
| 6 | nova-compute | node2 | nova | enabled | up | 2019-07-31T10:31:46.000000 |
| 7 | nova-compute | node3 | nova | enabled | up | 2019-07-31T10:31:45.000000 |
| 8 | nova-compute | node1 | nova | enabled | up | 2019-07-31T10:31:47.000000 |
+----+------------------+-------+----------+---------+-------+----------------------------+
[root@node1 ~]#
nova-compute 服務(wù)配置
一、數(shù)據(jù)包安裝
# yum install openstack-nova-compute -y
二毁葱、配置文件修改
[DEFAULT]
my_ip=172.16.254.63 #本機(jī)地址
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
enabled_apis=osapi_compute,metadata
transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/) #控制端ip
[api]
auth_strategy = keystone
[api_database]
不需要配置
connection = mysql+[pymysql://nova:NOVA_DBPASS@controller/nova_api](pymysql://nova:NOVA_DBPASS@controller/nova_api)
[barbican]
[cache]
[cells]
[cinder]
不需要配置
os_region_name = RegionOne
[cloudpipe]
[conductor]
[console]
[consoleauth]
[cors]
[cors.subdomain]
[crypto]
[database]
不需要配置
connection = mysql+[pymysql://nova:NOVA_DBPASS@controller/nova](pymysql://nova:NOVA_DBPASS@controller/nova)
[ephemeral_storage_encryption]
[filter_scheduler]
[glance]
主機(jī)端ip
api_servers = [http://controller:9292](http://controller:9292/)
[guestfs]
[healthcheck]
[hyperv]
[image_file_url]
[ironic]
[key_manager]
[keystone_authtoken]
主機(jī)端ip地址以及相應(yīng)服務(wù)的配置端口
auth_uri = [http://controller:5000](http://controller:5000/)
auth_url = [http://controller:35357](http://controller:35357/)
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova
[libvirt]
虛擬類(lèi)型
virt_type=qemu
[matchmaker_redis]
[metrics]
[mks]
[neutron]
不需要配置
url = [http://controller:9696](http://controller:9696/)
auth_url = [http://controller:35357](http://controller:35357/)
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
[notifications]
[osapi_v21]
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[pci]
[placement]
os_region_name = RegionOne
auth_type = password
主機(jī)端ip
auth_url = [http://controller:35357/v3](http://controller:35357/v3)
project_name = service
project_domain_name = Default
username = placement
password = placement
user_domain_name = Default
[quota]
[rdp]
[remote_debug]
[scheduler]
discover_hosts_in_cells_interval = 20 #自動(dòng)發(fā)現(xiàn)計(jì)算節(jié)點(diǎn)的刷新時(shí)間
[serial_console]
[service_user]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vendordata_dynamic_auth]
[vmware]
[vnc]
開(kāi)啟vnc
enabled=true
vncserver_listen=$my_ip #改為0.0.0.0
vncserver_proxyclient_address=$my_ip
novncproxy_base_url = [http://172.16.254.63:6080/vnc_auto.html](http://172.16.254.63:6080/vnc_auto.html) #不需要
[workarounds]
[wsgi]
[xenserver]
[xvp]
1、kvm虛擬服務(wù)的設(shè)置
$ egrep -c '(vmx|svm)' /proc/cpuinfo
非零數(shù)字即可是實(shí)現(xiàn)虛擬配置
2贰剥、重啟和開(kāi)機(jī)自啟libvirtd和compute程序
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service
3倾剿、檢查計(jì)算節(jié)點(diǎn)的狀態(tài)
$ . admin-openrc
$ openstack hypervisor list
+----+---------------------+-----------------+-----------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP | State |
+----+---------------------+-----------------+-----------+-------+
| 1 | compute1 | QEMU | 10.0.0.31 | up |
+----+---------------------+-----------------+-----------+-------+
4、發(fā)現(xiàn)計(jì)算終端的設(shè)置蚌成,以開(kāi)啟使用
# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
Found 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc
Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
Creating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
5前痘、計(jì)算端的服務(wù)展示
$ openstack compute service list
+----+--------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary | Host | Zone | Status | State | Updated At |
+----+--------------------+------------+----------+---------+-------+----------------------------+
| 1 | nova-consoleauth | controller | internal | enabled | up | 2016-02-09T23:11:15.000000 |
| 2 | nova-scheduler | controller | internal | enabled | up | 2016-02-09T23:11:15.000000 |
| 3 | nova-conductor | controller | internal | enabled | up | 2016-02-09T23:11:16.000000 |
| 4 | nova-compute | compute1 | nova | enabled | up | 2016-02-09T23:11:20.000000 |
+----+--------------------+------------+----------+---------+-------+----------------------------+
6、服務(wù)節(jié)點(diǎn)的展示
$ openstack catalog list
+-----------+-----------+-----------------------------------------+
| Name | Type | Endpoints |
+-----------+-----------+-----------------------------------------+
| keystone | identity | RegionOne |
| | | public: http://controller:5000/v3/ |
| | | RegionOne |
| | | internal: http://controller:5000/v3/ |
| | | RegionOne |
| | | admin: http://controller:35357/v3/ |
| | | |
| glance | image | RegionOne |
| | | admin: http://controller:9292 |
| | | RegionOne |
| | | public: http://controller:9292 |
| | | RegionOne |
| | | internal: http://controller:9292 |
| | | |
| nova | compute | RegionOne |
| | | admin: http://controller:8774/v2.1 |
| | | RegionOne |
| | | internal: http://controller:8774/v2.1 |
| | | RegionOne |
| | | public: http://controller:8774/v2.1 |
| | | |
| placement | placement | RegionOne |
| | | public: http://controller:8778 |
| | | RegionOne |
| | | admin: http://controller:8778 |
| | | RegionOne |
| | | internal: http://controller:8778 |
| | | |
+-----------+-----------+-----------------------------------------+
7担忧、鏡像列表
$ openstack image list
+--------------------------------------+-------------+-------------+
| ID | Name | Status |
+--------------------------------------+-------------+-------------+
| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros | active |
+--------------------------------------+-------------+-------------+
8芹缔、檢測(cè)cell和placement的服務(wù)是否正常使用
# nova-status upgrade check
+---------------------------+
| Upgrade Check Results |
+---------------------------+
| Check: Cells v2 |
| Result: Success |
| Details: None |
+---------------------------+
| Check: Placement API |
| Result: Success |
| Details: None |
+---------------------------+
| Check: Resource Providers |
| Result: Success |
| Details: None |
+---------------------------+