nova的結構體系
Nova主要有API、Compute、Conductor、Schedule四個核心組成,他們之間通過AMQP消息隊列進行通信。
創建虛擬機爲例
1、首先用戶執行novaclient提供的用於創建虛擬機的命令
2、API服務監聽到novaclient發送的HTTP請求餅子額將它轉換成AMQP消息,通過消息隊列(Queue)調用Conductor服務
3、Conductor接收到消息隊列,做一些準備工作(例如彙總虛擬機參數等),再通過消息隊列告訴Scheduler。
4、Scheduler選擇一個滿足虛擬機創建要求的主機,通過消息隊列(Queue)提供給Conductor
5、conductor根據Scheduler提供的主機信息,要求Computer服務創建虛擬機。
配置nova數據庫
mysql -uroot -pPASS -e "CREATE DATABASE nova;"
mysql -uroot -pPASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';"
mysql -uroot -pPASS -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';"
創建user、service,endpoint
- source 變量
source admin-openrc.sh
- 創建 nova user
openstack user create --password-prompt nova
User Password:
Repeat User Password:
+----------+----------------------------------+
| Field | Value |
+----------+----------------------------------+
| email | None |
| enabled | True |
| id | 53385e00e2054a4aac343756e730359e |
| name | nova |
| username | nova |
+----------+----------------------------------+
- 給予nova user admin 角色
openstack role add --project service --user nova admin
+-------+----------------------------------+
| Field | Value |
+-------+----------------------------------+
| id | 53e5d390efe84b948ba5718f116b4861 |
| name | admin |
+-------+----------------------------------+
- 創建nova service
openstack service create --name nova \
--description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 7aecce6f02c2420a94daf3f1c6feb601 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
- 創建 nova api endpoint
openstack endpoint create \
--publicurl http://controller:8774/v2/%\(tenant_id\)s \
--internalurl http://controller:8774/v2/%\(tenant_id\)s \
--adminurl http://controller:8774/v2/%\(tenant_id\)s \
--region RegionOne \
compute
+--------------+-----------------------------------------+
| Field | Value |
+--------------+-----------------------------------------+
| adminurl | http://controller:8774/v2/%(tenant_id)s |
| id | fac39d3cad58430889a59e10e50fed34 |
| internalurl | http://controller:8774/v2/%(tenant_id)s |
| publicurl | http://controller:8774/v2/%(tenant_id)s |
| region | RegionOne |
| service_id | 7aecce6f02c2420a94daf3f1c6feb601 |
| service_name | nova |
| service_type | compute |
+--------------+-----------------------------------------+
安裝nova
yum -y install openstack-nova-api openstack-nova-cert openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient
配置nova
- nova.conf
openstack-config --set /etc/nova/nova.conf database connection mysql://nova:nova@controller/nova
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password RABBIT_PASS
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_plugin password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_id default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_id default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password nova
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.0.0.11
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 10.0.0.11
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 10.0.0.11
openstack-config --set /etc/nova/nova.conf glance host controller
openstack-config --set /etc/nova/nova.conf lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf DEFAULT verbose True
- 初始化nova數據庫
su -s /bin/sh -c "nova-manage db sync" nova
- 啓動服務並設置開機啓動
systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl restart openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service