一、概述
使用OpenStack計算服務來托管和管理雲計算系統。OpenStack計算服務是基礎設施即服務(IaaS)系統的主要部分,模塊主要由Python實現。
OpenStack計算組件請求OpenStack Identity服務進行認證;請求OpenStack Image服務提供磁盤鏡像;為OpenStack dashboard提供用戶與管理員接口。磁盤鏡像訪問限制在項目與用戶上;配額以每個項目進行設定(例如,每個項目下可以創建多少實例)。OpenStack
組件可以在標准硬件上水平大規模擴展,並且下載磁盤鏡像啟動虛擬機實例。
OpenStack計算服務由下列組件所構成:
nova-api 服務:接受並響應所有計算服務請求,管理虛擬機(雲主機)生命周期。
nova-api-metadata 服務:接受來自虛擬機發送的元數據請求。
nova-compute服務(多個):真正管理虛擬機(nova-compute調用libvirt)。
nova-scheduler服務:nova調度器(挑選出最合適的nova-compute來創建虛擬機)。
nova-conductor模塊:幫助nova-compute代理修改數據庫中虛擬機的狀態。
nova-cert模塊:服務器守護進程向Nova Cert服務提供X509證書。用來為``euca-bundle-image``生成證書。僅僅是在EC2 API的請求中使用
nova-network worker 守護進程:與``nova-compute``服務類似,從隊列中接受網絡任務,並且操作網絡。執行任務例如創建橋接的接口或者改變IPtables的規則。
nova-consoleauth 守護進程和nova-novncproxy 守護進程:web版的vnc來直接操作雲主機。
nova-spicehtml5proxy 守護進程:提供一個代理,用於訪問正在運行的實例,通過 SPICE 協議,支持基於瀏覽器的 HTML5 客戶端。
nova-xvpvncproxy 守護進程:提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持OpenStack特定的Java客戶端。
nova-cert 守護進程:X509 證書。
nova客戶端:用於用戶作為租戶管理員或最終用戶來提交命令。
隊列:一個在守護進程間傳遞消息的中央集線器。
二、安裝並配置控制節點
1、創建數據庫
mysql -u root -p 登錄數據庫
CREATE DATABASE nova_api; 創建數據庫
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ 授權 IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY 'NOVA_DBPASS';
2、創建 nova 用戶,給 nova 用戶添加 admin 角色。
[root@controller ~]# openstack user create --domain default --password NOVA_PASS nova
[root@controller ~]# openstack role add --project service --user nova admin
3、創建 nova 服務實體
[root@controller ~]# openstack service create --name nova --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| name | nova |
| type | compute |
+-------------+----------------------------------+
4、創建 Compute 服務 API 端點
[root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 8dc955bdeb554ecbbc4fead51ad77dee |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 19d8e664c4b1434eafdb83fc5f72deec |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 8b301d9fe68c4486b1482a5e6d542da7 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | dd98c56c7ea948a7bfee86ed3a48bcdf | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
5、安裝並配置組件
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler -y
6、備份配置文件
cp /etc/nova/nova.conf{,.bak}
grep '^[a-z\[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
7、編輯``/etc/nova/nova.conf``文件並完成下面的操作
vim /etc/nova/nova.conf
[DEFAULT]
...
enabled_apis = osapi_compute,metadata 在``[DEFAULT]``部分,只啟用計算和元數據API [api_database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api 在``[api_database]``和``[database]``部分,配置數據庫的連接 [database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova [DEFAULT] ... rpc_backend = rabbit [oslo_messaging_rabbit] ... rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息隊列訪問,用你在 “RabbitMQ” 中為 “openstack” 選擇的密碼替換 “RABBIT_PASS”。 [DEFAULT] ... auth_strategy = keystone [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = 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_PASS 在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置認證服務訪問,使用你在身份認證服務中設置的``nova`` 用戶的密碼替換``NOVA_PASS``。 [DEFAULT] ... my_ip = 10.0.0.11 在 [DEFAULT 部分,配置``my_ip`` 來使用控制節點的管理接口的IP 地址。 [DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver 在 [DEFAULT] 部分,使能 Networking 服務,默認情況下,計算服務使用內置的防火牆服務。
由於網絡服務包含了防火牆服務,你必須使用``nova.virt.firewall.NoopFirewallDriver``防火牆服務來禁用掉計算服務內置的防火牆服務 [vnc] ... vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip 在``[vnc]``部分,配置VNC代理使用控制節點的管理接口IP地址 [glance] ... api_servers = http://controller:9292 在 [glance] 區域,配置鏡像服務 API 的位置 [oslo_concurrency] ... lock_path = /var/run/nova 在 [oslo_concurrency] 部分,配置鎖路徑
8、同步數據庫
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
9、啟動服務
# 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 批量啟動服務
10、驗證,用nova service-list命令查看,表里面為空,nova數據庫中的service中也有數據的。
注解:openstack在高版本里修復了網絡傳輸包的一個bug,同時更低版本的也進行了改動,所以在配置過程中需要加一些額外的操作(改配置文件單位源碼),其他都照舊,最后就可以配置nova成功。
不論新舊版本都強制增加了cell和placement實例的應用,所以在問題中提及的報錯其實是一個提示,配置過程中確實需要創建和實例化cell用戶以及placement服務配置才能正常繼續。
三、解決遺留問題
1、創建nova_cell0數據庫
[root@controller ~]# mysql -u root -p MariaDB [(none)]> CREATE DATABASE nova_cell0; 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、創建 placement用戶,給 placement用戶添加 admin 角色。
openstack user create --domain default --password PLACEMENT_PASS placement
openstack role add --project service --user placement admin
3、創建 placement 服務實體
openstack service create --name placement --description "Placement API" placement openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778
4、安裝openstack-nova-placement-api服務
yum install openstack-nova-placement-api -y
5、修改配置文件/etc/nova/nova.conf
[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller [placement] # ... os_region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:35357/v3 username = placement password = PLACEMENT_PASS
6、創建配置文件/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>
7、重啟服務
systemctl restart httpd
8、同步數據庫
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova 109e1d4b-536a-40d0-83c6-5f121b82b650 su -s /bin/sh -c "nova-manage db sync" nova
nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name | UUID | +-------+--------------------------------------+ | cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 | | cell0 | 00000000-0000-0000-0000-000000000000 | +-------+--------------------------------------+
9、重啟服務
systemctl restart openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service
10、再次查看
終於成功!!!
11、openstack-nova-api提供命令行服務,openstack-nova-novncproxy提供web版得vnc服務。