計算服務Nova
使用OpenStack Compute來托管和管理雲計算系統。 OpenStack Compute是基礎架構即服務(IaaS)系統的主要部分。 主要模塊用Python實現。
OpenStack Compute與OpenStack Identity交互以進行身份驗證; 用於磁盤和服務器映像的OpenStack映像服務; 和OpenStack Dashboard用於用戶和管理界面。
圖像訪問受項目和用戶的限制; 配額是按項目限制的(例如,實例數)。 OpenStack Compute可以在標准硬件上水平擴展,並將圖像下載到啟動實例。
節點配置信息說明:
控制節點:controller:
IP:192.168.164.128
hostname&hosts:likeadmin
計算加點:Nova:
IP:192.168.164.129
hostname&hosts:likenode
塊存儲節點:cinder:
IP:192.168.164.136
hostname&hosts:likeblock
1. OpenStack計算服務由下列組件所構成:
``nova-api``服務
接收和響應來自最終用戶的計算API請求。此服務支持OpenStack計算服務API,Amazon EC2 API,以及特殊的管理API用於賦予用戶做一些管理的操作。它會強制實施一些規則,發起多數的編排活動,例如運行一個實例。
``NOVA-API-metadata``服務
接受來自實例的元數據請求。 當您在具有nova-network安裝的多主機模式下運行時,通常會使用nova-api-metadata服務。 有關詳細信息,請參閱“OpenStack管理員指南”中的元數據服務。
``NOVA-API-metadata``服務
接受來自實例的元數據請求。 當您在具有nova-network安裝的多主機模式下運行時,通常會使用nova-api-metadata服務。 有關詳細信息,請參閱“OpenStack管理員指南”中的元數據服務。
``nova-compute``服務
一個持續工作的守護進程,通過Hypervior的API來創建和銷毀虛擬機實例。例如:
XenServer/XCP 的 XenAPI
KVM 或 QEMU 的 libvirt
VMware 的 VMwareAPI
過程是蠻復雜的。最為基本的,守護進程同意了來自隊列的動作請求,轉換為一系列的系統命令如啟動一個KVM實例,然后,到數據庫中更新它的狀態。
nova-placement-api服務
跟蹤每個提供商的庫存和使用情況。
``NOVA-scheduler``服務
拿到一個來自隊列請求虛擬機實例,然后決定那台計算服務器主機來運行它。
``NOVA-conductor``模塊
調解nova-compute服務與數據庫之間的交互。它消除了nova-compute服務對雲數據庫的直接訪問。 nova-conductor模塊水平縮放。但是,請勿將其部署在運行nova-compute服務的節點上。有關更多信息,請參閱“配置參考指南”
nova-cert模塊
服務器守護進程向Nova Cert服務提供X509證書。用來為``euca-bundle-image``生成證書。僅僅是在EC2 API的請求中使用
nova-consoleauth模塊
為控制台代理提供的用戶授權令牌。請參閱nova-novncproxy和nova-xvpvncproxy。必須運行此服務才能使控制台代理生效。您可以針對群集配置中的單個nova-consoleauth服務運行任一類型的代理。有關信息,請參閱關於nova-consoleauth。
nova-novncproxy模塊
提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持基於瀏覽器的novnc客戶端。
``NOVA-spicehtml5proxy``守護進程
提供一個代理,用於訪問正在運行的實例,通過SPICE協議,支持基於瀏覽器的HTML5客戶端。
nova-xvpvncproxy守護進程
提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持OpenStack的特定的Java的客戶端。
隊列
用於在守護進程之間傳遞消息的中央集線器。通常用RabbitMQ實現,也可以用另一個AMQP消息隊列實現,比如ZeroMQ。
SQL數據庫
存儲構建時和運行時的狀態,為雲基礎設施,包括有:
可用實例類型
使用中的實例
可用網絡
項目
從理論上講,OpenStack Compute可以支持SQLAlchemy支持的任何數據庫。常見的數據庫是用於測試和開發工作的SQLite3,MySQL,MariaDB和PostgreSQL。
2.安裝並配置控制節點
注:這個部分將描述如何在控制節點上安裝和配置 Compute 服務,即 nova
在安裝和配置 Compute 服務前,你必須創建數據庫服務的憑據以及 API endpoints。
為了創建數據庫,必須完成這些步驟:
用數據庫連接客戶端以 root 用戶連接到數據庫服務器:
$ mysql -u root -p
1)創建計算服務器的nova_api, nova, and nova_cell0 數據庫:
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
2)對數據庫進行正確的授權:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';
用合適的密碼代替 NOVA_DBPASS。此試驗環境選用的是:djl18001作為密碼,生成環境,請使用密文作為密碼。
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| glance |
| information_schema |
| keystone |
| mysql |
| nova |
| nova_api |
| nova_cell0 |
| performance_schema |
+--------------------+
8 rows in set (0.00 sec)
2)獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
[root@likeadmin ~]# source /root/.admin-openrc
3)創建Compute服務憑據:
創建 nova 用戶:
[root@likeadmin ~]# openstack user create --domain default --password-prompt nova
User Password: djl18001
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 42c406d7a7ed4784a08a6f2696c2db6c |
| name | nova |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@likeadmin ~]#
給 nova 用戶添加 admin 角色:
[root@likeadmin ~]# openstack role add --project service --user nova admin
創建 nova 服務實體:
[root@likeadmin ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| name | nova |
| type | compute |
+-------------+----------------------------------+
[root@likeadmin ~]#
4)創建Compute API服務端點:
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute public http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | ea27f64912a3468f9c77df9298ae6fd7 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute internal http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 829019c5bfe94637af4876725213690e |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute admin http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 2d3ee70a3c4c4cb399ba3a689a7fdf82 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]#
[root@likeadmin ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| 0f5af5f9e444442eb07ad78fe1314705 | RegionOne | keystone | identity | True | internal | http://likeadmin:5000/v3/ |
| 2d3ee70a3c4c4cb399ba3a689a7fdf82 | RegionOne | nova | compute | True | admin | http://likeadmin:8774/v2.1/%(tenant_id)s |
| 36495ec2b54a4a07a8cd83745a3a19b8 | RegionOne | glance | image | True | public | http://likeadmin:9292 |
| 59ee7ce4b50d4142b5a66c8ab3c8e01a | RegionOne | glance | image | True | admin | http://likeadmin:9292 |
| 829019c5bfe94637af4876725213690e | RegionOne | nova | compute | True | internal | http://likeadmin:8774/v2.1/%(tenant_id)s |
| 8a1893ba8035440f8e4a7bdc440ffef8 | RegionOne | glance | image | True | internal | http://likeadmin:9292 |
| b572d79c6f5c47a789b258ec7474599c | RegionOne | keystone | identity | True | public | http://likeadmin:5000/v3/ |
| ea27f64912a3468f9c77df9298ae6fd7 | RegionOne | nova | compute | True | public | http://likeadmin:8774/v2.1/%(tenant_id)s |
| ed967ed76c6141cba66f6f20b9b9c5f2 | RegionOne | keystone | identity | True | admin | http://likeadmin:35357/v3/ |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
[root@likeadmin ~]#
5)使用您選擇的PLACEMENT_PASS創建一個Placement服務用戶:
[root@likeadmin ~]# openstack user create --domain default --password-prompt placement
User Password: djl18001
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 4025c84b6bfe4470bcb8d66d530fce62 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@likeadmin ~]#
使用admin角色將Placement用戶添加到服務項目:
[root@likeadmin ~]# openstack role add --project service --user placement admin
6)在服務目錄中創建Placement API條目:
[root@likeadmin ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | a9d8071fc5024ea7a160ffdf2b2629cd |
| name | placement |
| type | placement |
+-------------+----------------------------------+
[root@likeadmin ~]#
7)創建Placement API服務端點:
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement public http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 5e5a460effe3446bbad3d434a0c128c4 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement internal http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 94c895aac78141f8a397a1c0f80f8ea1 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement admin http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | e54a008fe46741588458cf66fd67c31f |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]#
3。安全並配置組件
1)安裝軟件包:
#yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api
2)編輯``/etc/nova/nova.conf``文件並完成下面的操作:
在``[DEFAULT]``部分,只啟用計算和元數據API:
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata
在``[api_database]``和``[database]``部分,配置數據庫的連接:
[api_database]
# ...
connection = mysql+pymysql://nova:djl18001@likeadmin/nova_api
[database]
# ...
connection = mysql+pymysql://nova:djl18001@likeadmin/nova
用你為 Compute 數據庫選擇的密碼來代替 NOVA_DBPASS。
在``[DEFAULT]``部分,配置``RabbitMQ``消息隊列訪問權限:
[DEFAULT]
# ...
transport_url = rabbit://openstack:djl18001@likeadmin
用你在 “RabbitMQ” 中為 “openstack” 選擇的密碼替換 “RABBIT_PASS”。
In the [api] and [keystone_authtoken] sections, configure Identity service access:
[api]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
auth_uri = http://likeadmin:5000
auth_url = http://likeadmin:35357
memcached_servers = likeadmin:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = djl18001
使用你在身份認證服務中設置的``nova`` 用戶的密碼替換``NOVA_PASS``。
在 [DEFAULT 部分,配置``my_ip`` 來使用控制節點的管理接口的IP 地址。
[DEFAULT]
# ...
my_ip = 192.168.164.128
在 ``[DEFAULT]``部分,啟用網絡服務支持:
[DEFAULT]
# ...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
注解:默認情況下,計算服務使用內置的防火牆服務。由於網絡服務包含了防火牆服務,你必須使用``nova.virt.firewall.NoopFirewallDriver``防火牆服務來禁用掉計算服務內置的防火牆服務
在``[vnc]``部分,配置VNC代理使用控制節點的管理接口IP地址 :
[vnc]
enabled = true
# ...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
在 [glance] 區域,配置鏡像服務 API 的位置:
[glance]
# ...
api_servers = http://likeadmin:9292
在 [oslo_concurrency] 部分,配置鎖路徑:
[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp
在[placement]部分中,配置Placement API:
[placement]
# ...
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://likeadmin:35357/v3
username = placement
password = djl18001
將PLACEMENT_PASS替換為您在Identity服務中為放置用戶選擇的密碼。 注釋掉[placement]部分中的任何其他選項。
由於 packaging bug,您必須通過將以下配置添加到/etc/httpd/conf.d/00-nova-placement-api.conf來啟用對Placement API的訪問:
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
Restart the httpd service:
# systemctl restart httpd
3)填充nova-api數據庫:
# su -s /bin/sh -c "nova-manage api_db sync" nova
4)注冊cell0數據庫:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
5)創建cell1小區:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
1a73b8c8-e82f-4378-9323-a34fe771904b
6)Populate the nova database:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
[root@likeadmin ~]#
7)驗證nova cell0和cell1是否正確注冊:
[root@likeadmin ~]# nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name | UUID |
+-------+--------------------------------------+
| cell0 | 00000000-0000-0000-0000-000000000000 |
| cell1 | 1a73b8c8-e82f-4378-9323-a34fe771904b |
+-------+--------------------------------------+
[root@likeadmin ~]#
4.完成安裝
啟動 Compute 服務並將其設置為隨系統啟動:
# 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
注:至此在控制節點上部署計算服務Nova已完成
