云計(jì)算OpenStack核心組件——Nova計(jì)算服務(wù)(3)

一、nova介紹:

Nova 是 OpenStack 最核心的服務(wù),負(fù)責(zé)維護(hù)和管理云環(huán)境的計(jì)算資源。OpenStack 作為 IaaS 的云操作系統(tǒng),虛擬機(jī)生命周期管理也就是通過 Nova 來實(shí)現(xiàn)的。

用途與功能 :

  1. 實(shí)例生命周期管理
  2. 管理計(jì)算資源
  3. 網(wǎng)絡(luò)和認(rèn)證管理
    4)REST 風(fēng)格的 API
  4. 異步的一致性通信
    6)Hypervisor 透明:支持Xen,XenServer/XCP,KVM, UML, VMware vSphere and Hyper-V
image.png

在上圖中可以看到,Nova 處于 Openstak 架構(gòu)的中心,其他組件都為 Nova 提供支持: Glance 為 VM 提供 image Cinder 和 Swift 分別為 VM 提供塊存儲和對象存儲 Neutron 為 VM 提供網(wǎng)絡(luò)連接。

Nova 架構(gòu)如下:

image.png

Nova 的架構(gòu)比較復(fù)雜,包含很多組件。 這些組件以子服務(wù)(后臺 deamon 進(jìn)程)的形式運(yùn)行,可以分為以下幾類:

API

nova-api

是整個(gè) Nova 組件的門戶,接收和響應(yīng)客戶的 API 調(diào)用。所有對 Nova 的請求都首先由 nova-api 處理。nova-api 向外界暴露若干 HTTP REST API 接口 在 keystone 中我們可以查詢 nova-api 的 endponits。

image.png

客戶端就可以將請求發(fā)送到 endponits 指定的地址,向 nova-api 請求操作。 當(dāng)然,作為最終用戶的我們不會直接發(fā)送 Rest AP I請求。 OpenStack CLI,Dashboard 和其他需要跟 Nova 交換的組件會使用這些 API。

Nova-api 對接收到的 HTTP API 請求會做如下處理:

1. 檢查客戶端傳入的參數(shù)是否合法有效
2. 調(diào)用 Nova 其他子服務(wù)的處理客戶端 HTTP 請求
3. 格式化 Nova 其他子服務(wù)返回的結(jié)果并返回給客戶端

nova-api 接收哪些請求?

簡單的說,只要是跟虛擬機(jī)生命周期相關(guān)的操作,nova-api 都可以響應(yīng)。 大部分操作都可以在 Dashboard 上找到。打開Instance管理界面

image.png

除了提供 OpenStack 自己的API,nova-api 還支持 Amazon EC2 API。 也就是說,如果客戶以前使用 Amazon EC2,并且用 EC2 的 API 開發(fā)了些工具來管理虛機(jī),那么如果現(xiàn)在要換成 OpenStack,這些工具可以無縫遷移到 OpenStack,因?yàn)?nova-api 兼容 EC2 API,無需做任何修改。

Compute Core

a)nova-scheduler:

虛機(jī)調(diào)度服務(wù),負(fù)責(zé)決定在哪個(gè)計(jì)算節(jié)點(diǎn)上運(yùn)行虛機(jī)。創(chuàng)建 Instance 時(shí),用戶會提出資源需求,例如 CPU、內(nèi)存、磁盤各需要多少。OpenStack 將這些需求定義在 flavor 中,用戶只需要指定用哪個(gè) flavor 就可以了。

image.png

可用的 flavor 在 System->Flavors 中管理。

image.png

下面介紹 nova-scheduler 是如何實(shí)現(xiàn)調(diào)度的。在 /etc/nova/nova.conf 中,nova 通過 driver=filter_scheduler 這個(gè)參數(shù)來配置 nova-scheduler。

driver=filter_scheduler

Filter scheduler

Filter scheduler 是 nova-scheduler 默認(rèn)的調(diào)度器,調(diào)度過程分為兩步:

1. 通過過濾器(filter)選擇滿足條件的計(jì)算節(jié)點(diǎn)(運(yùn)行 nova-compute)
2. 通過權(quán)重計(jì)算(weighting)選擇在最優(yōu)(權(quán)重值最大)的計(jì)算節(jié)點(diǎn)上創(chuàng)建 Instance。

Nova 允許使用第三方 scheduler,配置 scheduler_driver 即可。 這又一次體現(xiàn)了OpenStack的開放性。Scheduler 可以使用多個(gè) filter 依次進(jìn)行過濾,過濾之后的節(jié)點(diǎn)再通過計(jì)算權(quán)重選出最適合的節(jié)點(diǎn)。

image.png

上圖是調(diào)度過程的一個(gè)示例:

1. 最開始有 6 個(gè)計(jì)算節(jié)點(diǎn) Host1-Host6
2. 通過多個(gè) filter 層層過濾,Host2 和 Host4 沒有通過,被刷掉了
3. Host1,Host3,Host5,Host6 計(jì)算權(quán)重,結(jié)果 Host5 得分最高,最終入選

當(dāng) Filter scheduler 需要執(zhí)行調(diào)度操作時(shí),會讓 filter 對計(jì)算節(jié)點(diǎn)進(jìn)行判斷,filter 返回 True 或 False。經(jīng)過前面一堆 filter 的過濾,nova-scheduler 選出了能夠部署 instance 的計(jì)算節(jié)點(diǎn)。

如果有多個(gè)計(jì)算節(jié)點(diǎn)通過了過濾,那么最終選擇哪個(gè)節(jié)點(diǎn)呢?

Scheduler 會對每個(gè)計(jì)算節(jié)點(diǎn)打分,得分最高的獲勝。 打分的過程就是 weight,翻譯過來就是計(jì)算權(quán)重值,那么 scheduler 是根據(jù)什么來計(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)行。通過調(diào)用Hypervisor API實(shí)現(xiàn)節(jié)點(diǎn)上的 instance的生命周期管理。 OpenStack 對 instance 的操作,最后都是交給 nova-compute 來完成的。 nova-compute 與 Hypervisor 一起實(shí)現(xiàn) OpenStack 對 instance 生命周期的管理。

通過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)示意圖:

image.png

c)nova-conductor:

nova-compute 經(jīng)常需要更新數(shù)據(jù)庫,比如更新和獲取虛機(jī)的狀態(tài)。 出于安全性和伸縮性的考慮,nova-compute 并不會直接訪問數(shù)據(jù)庫,而是將這個(gè)任務(wù)委托給 nova-conductor。

image.png

這樣做有兩個(gè)顯著好處:

1. 更高的系統(tǒng)安全性
2. 更好的系統(tǒng)伸縮性

Console Interface

nova-console: 用戶可以通過多種方式訪問虛機(jī)的控制臺:
nova-novncproxy: 基于 Web 瀏覽器的 VNC 訪問
nova-spicehtml5proxy: 基于 HTML5 瀏覽器的 SPICE 訪問
nova-xvpnvncproxy: 基于 Java 客戶端的 VNC 訪問
nova-consoleauth: 負(fù)責(zé)對訪問虛機(jī)控制臺請求提供 Token 認(rèn)證
nova-cert: 提供 x509 證書支持

Database

Nova 會有一些數(shù)據(jù)需要存放到數(shù)據(jù)庫中,一般使用 MySQL。數(shù)據(jù)庫安裝在控制節(jié)點(diǎn)上。 Nova 使用命名為 “nova” 的數(shù)據(jù)庫。

image.png

Message Queue

在前面我們了解到 Nova 包含眾多的子服務(wù),這些子服務(wù)之間需要相互協(xié)調(diào)和通信。為解耦各個(gè)子服務(wù),Nova 通過 Message Queue 作為子服務(wù)的信息中轉(zhuǎn)站。 所以在架構(gòu)圖上我們看到了子服務(wù)之間沒有直接的連線,是通過 Message Queue 聯(lián)系的。

image.png

OpenStack 默認(rèn)是用 RabbitMQ 作為 Message Queue。 MQ 是 OpenStack 的核心基礎(chǔ)組件,我們后面也會詳細(xì)介紹。

二、Nova 組件如何協(xié)同工作

Nova 物理部署方案

前面大家已經(jīng)看到 Nova 由很多子服務(wù)組成,我們也知道 OpenStack 是一個(gè)分布式系統(tǒng),可以部署到若干節(jié)點(diǎn)上,那么接下來大家可能就會問:Nova 的這些服務(wù)在物理上應(yīng)該如何部署呢?

對于 Nova,這些服務(wù)會部署在兩類節(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)境的具體部署情況。 通過在計(jì)算節(jié)點(diǎn)和控制節(jié)點(diǎn)上運(yùn)行

ps -elf | grep nova 來查看運(yùn)行的 nova 子服務(wù)

計(jì)算節(jié)點(diǎn)compute只運(yùn)行了nova-compute子服務(wù)

image.png

控制節(jié)點(diǎn)controller運(yùn)行了若干nova-*子服務(wù)

image.png

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ī)。

image.png
image.png

這也向我們展示了 OpenStack 這種分布式架構(gòu)部署上的靈活性: 可以將所有服務(wù)都放在一臺物理機(jī)上,作為一個(gè) All-in-One 的測試環(huán)境; 也可以將服務(wù)部署在多臺物理機(jī)上,獲得更好的性能和高可用。

另外,也可以用 nova service-list 查看 nova-* 子服務(wù)都分布在哪些節(jié)點(diǎn)上

image.png

從虛機(jī)創(chuàng)建流程看 nova-* 子服務(wù)如何協(xié)同工作

從學(xué)習(xí) Nova 的角度看,虛機(jī)創(chuàng)建是一個(gè)非常好的場景,涉及的 nova-* 子服務(wù)很全,下面是流程圖。

image.png
  1. 客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發(fā)送請求:“幫我創(chuàng)建一個(gè)虛機(jī)”
  2. API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發(fā)送了一條消息:“讓 Scheduler 創(chuàng)建一個(gè)虛機(jī)”
  3. Scheduler(nova-scheduler)從 Messaging 獲取到 API 發(fā)給它的消息,然后執(zhí)行調(diào)度算法,從若干計(jì)算節(jié)點(diǎn)中選出節(jié)點(diǎn) A
  4. Scheduler 向 Messaging 發(fā)送了一條消息:“在計(jì)算節(jié)點(diǎn) A 上創(chuàng)建這個(gè)虛機(jī)”
  5. 計(jì)算節(jié)點(diǎn) A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發(fā)給它的消息,然后在本節(jié)點(diǎn)的 Hypervisor 上啟動虛機(jī)。
  6. 在虛機(jī)創(chuàng)建的過程中,Compute 如果需要查詢或更新數(shù)據(jù)庫信息,會通過 Messaging 向 Conductor(nova-conductor)發(fā)送消息,Conductor 負(fù)責(zé)數(shù)據(jù)庫訪問。

以上是創(chuàng)建虛機(jī)最核心的步驟, 這幾個(gè)步驟向我們展示了 nova-* 子服務(wù)之間的協(xié)作的方式,也體現(xiàn)了 OpenStack 整個(gè)系統(tǒng)的分布式設(shè)計(jì)思想,掌握這種思想對我們深入理解 OpenStack 會非常有幫助。

三、Nova 創(chuàng)建虛擬機(jī)詳細(xì)過程

image.png

1、界面或命令行通過RESTful API向keystone獲取認(rèn)證信息。

2、keystone通過用戶請求認(rèn)證信息,并生成auth-token返回給對應(yīng)的認(rèn)證請求。

3、界面或命令行通過RESTful API向nova-api發(fā)送一個(gè)boot instance的請求(攜帶auth-token)。

4、nova-api接受請求后向keystone發(fā)送認(rèn)證請求,查看token是否為有效用戶和token。

5、keystone驗(yàn)證token是否有效,如有效則返回有效的認(rèn)證和對應(yīng)的角色(注:有些操作需要有角色權(quán)限才能操作)。

6、通過認(rèn)證后nova-api和數(shù)據(jù)庫通訊。

7、初始化新建虛擬機(jī)的數(shù)據(jù)庫記錄。

8、nova-api通過rpc.call向nova-scheduler請求是否有創(chuàng)建虛擬機(jī)的資源(Host ID)。

9、nova-scheduler進(jìn)程偵聽消息隊(duì)列,獲取nova-api的請求。

10、nova-scheduler通過查詢nova數(shù)據(jù)庫中計(jì)算資源的情況,并通過調(diào)度算法計(jì)算符合虛擬機(jī)創(chuàng)建需要的主機(jī)。

11、對于有符合虛擬機(jī)創(chuàng)建的主機(jī),nova-scheduler更新數(shù)據(jù)庫中虛擬機(jī)對應(yīng)的物理主機(jī)信息。

12、nova-scheduler通過rpc.cast向nova-compute發(fā)送對應(yīng)的創(chuàng)建虛擬機(jī)請求的消息。

13、nova-compute會從對應(yīng)的消息隊(duì)列中獲取創(chuàng)建虛擬機(jī)請求的消息。

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

15、nova-conductor從消息隊(duì)隊(duì)列中拿到nova-compute請求消息。

16、nova-conductor根據(jù)消息查詢虛擬機(jī)對應(yīng)的信息。

17、nova-conductor從數(shù)據(jù)庫中獲得虛擬機(jī)對應(yīng)信息。

18、nova-conductor把虛擬機(jī)信息通過消息的方式發(fā)送到消息隊(duì)列中。

19、nova-compute從對應(yīng)的消息隊(duì)列中獲取虛擬機(jī)信息消息。

20、nova-compute通過keystone的RESTfull API拿到認(rèn)證的token,并通過HTTP請求glance-api獲取創(chuàng)建虛擬機(jī)所需要鏡像。

21、glance-api向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。

22、token驗(yàn)證通過,nova-compute獲得虛擬機(jī)鏡像信息(URL)。

23、nova-compute通過keystone的RESTfull API拿到認(rèn)證k的token,并通過HTTP請求neutron-server獲取創(chuàng)建虛擬機(jī)所需要的網(wǎng)絡(luò)信息。

24、neutron-server向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。

25、token驗(yàn)證通過,nova-compute獲得虛擬機(jī)網(wǎng)絡(luò)信息。

26、nova-compute通過keystone的RESTfull API拿到認(rèn)證的token,并通過HTTP請求cinder-api獲取創(chuàng)建虛擬機(jī)所需要的持久化存儲信息。

27、cinder-api向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。

28、token驗(yàn)證通過,nova-compute獲得虛擬機(jī)持久化存儲信息。

29、nova-compute根據(jù)instance的信息調(diào)用配置的虛擬化驅(qū)動來創(chuàng)建虛擬機(jī)。

四、徹底刪除nova-compute節(jié)點(diǎn)

1、控制節(jié)點(diǎn)上操作查看計(jì)算節(jié)點(diǎn),刪除node1

openstack host list
nova service-list

image

2、將node1上的計(jì)算服務(wù)設(shè)置為down,然后disabled

systemctl stop openstack-nova-compute
nova service-list

image

nova service-disable node1 nova-compute
nova service-list

image

3、在數(shù)據(jù)庫里清理(nova庫)

(1)參看現(xiàn)在數(shù)據(jù)庫狀態(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ù)庫中的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ù)庫的用戶創(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用戶和服務(wù)項(xiàng)目
創(chuàng)建Nova用戶:

$ 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                             |
+---------------------+----------------------------------+

用戶加入到項(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用戶:

$ 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ū)動程序

enabled_apis=osapi_compute,metadata 

transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/)  #rabbit的OpenStack用戶的地址和密碼

[api]

auth_strategy = keystone

[api_database]
數(shù)據(jù)庫的連接地址用戶名和密碼:
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用戶訪問數(shù)據(jù)庫的連接地址:
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 #開啟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ù)庫

# su -s /bin/sh -c "nova-manage api_db sync" nova

8、注冊cell0數(shù)據(jù)庫

# 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、重啟和開機(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]
虛擬類型
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 #自動發(fā)現(xiàn)計(jì)算節(jié)點(diǎn)的刷新時(shí)間

[serial_console]

[service_user]

[spice]

[ssl]

[trusted_computing]

[upgrade_levels]

[vendordata_dynamic_auth]

[vmware]

[vnc]
開啟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、重啟和開機(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è)置,以開啟使用

# 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、檢測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             |
+---------------------------+
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容