1、概述
使用OpenStack Compute來托管和管理雲計算系統。OpenStack Compute是基礎架構即服務(IaaS)系統的主要部分。主要模塊在Python中實現。
OpenStack Compute與OpenStack Identity進行交互以進行身份驗證; 和OpenStack Image交互以進行磁盤和服務器鏡像管理; 和OpenStack dashboard交互以提供用戶和管理界面的接口。鏡像訪問受到項目和用戶的限制; 每個項目的配額有限(例如數量)。OpenStack Compute可以在標准硬件上水平擴展,並下載鏡像以啟動實例。
OpenStack Compute由以下幾個方面組成:
-
nova-api
服務 - 接受並響應最終用戶的計算API調用。該服務支持OpenStack Compute API,Amazon EC2 API和特殊的Admin API,用於特權用戶執行管理操作。它執行一些策略並啟動大多數業務流程活動,例如運行一個實例。
-
nova-api-metadata
服務 -
接受來自實例的元數據請求。
nova-api-metadata
當您在多主機模式下運行nova-network
安裝時,通常使用該服務 。 -
nova-compute
服務 -
通過虛擬機管理程序API創建和終止虛擬機實例的工作程序守護程序。例如:
- 適用於XenServer / XCP的XenAPI
- KVM或QEMU的libvirt
- 適用於VMware的VMwareAPI
處理相當復雜。基本上,守護程序接受隊列中的操作,並執行一系列系統命令,例如啟動KVM實例並更新數據庫中的狀態。
-
nova-scheduler
服務 - 從隊列獲取虛擬機實例請求,並確定運行哪個計算服務器主機。
-
nova-conductor
模 -
中介
nova-compute
服務和數據庫之間的交互。它消除了對nova-compute
服務器所做的雲數據庫的直接訪問。該nova-conductor
模塊水平縮放。但是,請勿將其部署到nova-compute
運行服務的節點上 。 -
nova-cert
模型 -
為X509證書提供Nova Cert服務的服務器守護程序。用於生成證書
euca-bundle-image
。只需要EC2 API。 -
nova-network worker
守護進程 -
與
nova-compute
服務類似,接受隊列中的聯網任務並操縱網絡。執行諸如設置橋接接口或更改IPtables規則等任務。 -
nova-consoleauth
守護進程 -
為控制台代理提供的用戶授權令牌。看到
nova-novncproxy
和nova-xvpvncproxy
。此服務必須運行才能使控制台代理工作。您可以在集群配置中針對單個nova-consoleauth服務運行任一類型的代理。 -
nova-novncproxy
守護進程 - 提供通過VNC連接訪問運行實例的代理。支持基於瀏覽器的novnc客戶端。
-
nova-spicehtml5proxy
守護進程 - 提供通過SPICE連接訪問運行實例的代理。支持基於瀏覽器的HTML5客戶端。
-
nova-xvpvncproxy
守護進程 - 提供通過VNC連接訪問運行實例的代理。支持特定於OpenStack的Java客戶機。
-
nova-cert
守護進程 - x509證書。
-
nova
客戶 - 允許用戶作為租戶管理員或最終用戶提交命令。
- The queue
- 在守護進程之間傳遞消息的中心樞紐。通常用 RabbitMQ 實現,也可以用另一個AMQP消息隊列來實現,如 ZeroMQ 。
- SQL數據庫
存儲雲基礎架構的大部分構建時間和運行時狀態,包括:
- 可用的實例類型
- 正在使用的實例
- 可用網絡
- 項目
理論上,OpenStack Compute可以支持SQL-Alchemy支持的任何數據庫。公共數據庫是用於測試和開發工作的SQLite3,MySQL,MariaDB和PostgreSQL。
- 2、環境准備
- 2.1、創建數據庫(,服務憑據和API端點)。
- 2.1.1、連接數據庫
# mysql -u root -p
2.1.2、創建nova_api
和nova
數據庫
MariaDB [(none)]> CREATE DATABASE nova_api; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE nova; Query OK, 1 row affected (0.00 sec)
2.1.3、授予數據庫訪問權限
MariaDB [(none)]> grant all privileges on nova_api .* to 'nova'@'localhost' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all privileges on nova_api .* to 'nova'@'%' identified by 'daemon'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> grant all privileges on nova .* to 'nova'@'localhost' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all privileges on nova .* to 'nova'@'%' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec)
2.2、輸入admin
憑據以訪問僅管理CLI命令
# source admin-openrc
2.3、創建服務憑據
2.3.1、創建nova
用戶
# openstack user create --domain default \ > --password-prompt nova User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 037784f488424d98aa48586caf0813cf | | name | nova | | password_expires_at | None | +---------------------+----------------------------------+
2.3.2、將admin
角色添加到nova
用戶
# openstack role add --project service --user nova admin
2.3.3、創建nova
服務實體
# openstack service create --name nova \ > --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | 512ecd99568448178f7beb16720bc7ba | | name | nova | | type | compute | +-------------+----------------------------------+
2.4、創建Compute服務API端點
# openstack endpoint create --region RegionOne \ > compute public http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 0b3eaec2ea364ba1b3c1e6b67c99847f | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
# openstack endpoint create --region RegionOne \ > compute internal http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 9a8ead97c6f04bb8a88991fa8425e3a0 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
# openstack endpoint create --region RegionOne \ > compute admin http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 7d2825d796944fc3a6e8155a7c2b75c9 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
3、在控制節點上安裝和配置compute服務
3.1、安裝軟件包
yum install openstack-nova-api openstack-nova-conductor \ openstack-nova-console openstack-nova-novncproxy \ openstack-nova-scheduler
3.2、配置(/etc/nova/nova.conf)
3.2.1、在[DEFAULT]節
中,僅啟用計算和元數據API
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
3.2.2、在[api_database]
和[database]
部分,配置數據庫訪問
[api_database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
3.2.3、在[DEFAULT]
節中,配置RabbitMQ
消息隊列訪問
[DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller
3.2.4、在[DEFAULT]
和[keystone_authtoken]
部分,配置身份服務訪問
[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
NOTICE:注釋掉或刪除該[keystone_authtoken]
部分中的任何其他選項 。
3.2.5、在[DEFAULT]
節中,配置my_ip
選項以使用控制器節點的管理接口IP地址
[DEFAULT] ... my_ip = 10.0.0.11
3.2.6、在[DEFAULT]
節中,啟用對網絡服務的支持
[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
Notice:默認情況下,Compute使用內部防火牆驅動程序。由於網絡服務包含防火牆驅動程序,
因此您必須使用nova.virt.firewall.NoopFirewallDriver
防火牆驅動程序,
禁用Compute防火牆驅動程序。
3.2.7、在[vnc]
節中,配置VNC代理以使用控制器節點的管理接口IP地址
[vnc] ... vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip
3.2.8、在[glance]
節中,配置Image Service API的位置
[glance] ... api_servers = http://controller:9292
3.2.9、在[oslo_concurrency]節
中,配置鎖定路徑
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
3.3、完成以上配置之后,填充數據庫
# su -s /bin/sh -c "nova-manage api_db sync" nova # su -s /bin/sh -c "nova-manage db sync" nova
忽略此輸出中的任何廢棄消息。
3.4、完成安裝,設置啟動和自啟動
# 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
4、在計算節點上安裝和配置Compute服務
4.1、安裝和配置組件(/etc/nova/nova.conf)
4.1.1、安裝軟件包
# yum install openstack-nova-compute
4.1.2、配置組件
4.1.2.1、在[DEFAULT]
部分中,僅啟用計算和元數據API
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
4.1.2.2、在[DEFAULT]
節中,配置RabbitMQ
消息隊列訪問
[DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller
4.1.2.3、在[DEFAULT]
和[keystone_authtoken]
部分,配置身份服務訪問
[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
注釋掉或刪除該[keystone_authtoken]
部分中的任何其他選項 。
4.1.2.4、在[DEFAULT]
節中,配置my_ip
選項
[DEFAULT] ... my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
替換MANAGEMENT_INTERFACE_IP_ADDRESS
為計算節點上的管理網絡接口的IP地址
4.1.2.5、在[DEFAULT]
節中,啟用對網絡服務的支持
[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
默認情況下,Compute使用內部防火牆服務。由於網絡包括防火牆服務,因此您必須使用nova.virt.firewall.NoopFirewallDriver
防火牆驅動程序禁用Compute防火牆服務 。
4.1.2.6、在[vnc]
節中,啟用和配置遠程控制台訪問
[vnc] ... enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html
服務器組件偵聽所有IP地址,代理組件只偵聽計算節點的管理接口IP地址。基本URL表示可以使用Web瀏覽器訪問此計算節點上實例的遠程控制台的位置。
4.1.2.7、在[glance]
節中,配置Image Service API的位置
[glance] ... api_servers = http://controller:9292
4.1.2.8、在[oslo_concurrency]
部分中,配置鎖定路徑
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
4.2、完成安裝
4.2.1、確定您的計算節點是否支持虛擬機的硬件加速
# egrep -c '(vmx|svm)' /proc/cpuinfo
如果此命令返回大於0的值,則您的計算節點支持硬件加速,通常不需要額外的配置。
如果此命令返回值0
,則您的計算節點不支持硬件加速,您必須配置libvirt
為使用QEMU而不是KVM。
4.2.1.1、編輯 /etc/nova/nova.conf
文件中的[libvirt]
部分
[libvirt]
...
virt_type = qemu
4.2.2、啟動Compute服務,包括其依賴關系,並將其配置為在系統引導時自動啟動
# systemctl enable libvirtd.service openstack-nova-compute.service # systemctl start libvirtd.service openstack-nova-compute.service
如果nova-compute
服務無法啟動,請檢查/var/log/nova/nova-compute.log
。錯誤消息 可能表示控制器節點上的防火牆阻止訪問端口5672。AMQP server on controller:5672 isunreachable
5、問題
5.1、4.2.2中無法啟動計算服務
原因為無法連接控制節點5672端口,可以使用以下命令開放該端口
開放5672端口 # firewall-cmd --permanent --add-port=5672/tcp 重啟防火牆服務 # systemctl restart firewalld.service
6、在控制器節點上 驗證操作
6.1、讀取admin
憑據以訪問僅管理CLI命令
# source admin-openrc
6.2、列出服務組件,以驗證每個進程的成功啟動和注冊
# openstack compute service list +----+------------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+------------------+------------+----------+---------+-------+----------------------------+ | 1 | nova-consoleauth | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 2 | nova-conductor | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 5 | nova-scheduler | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 7 | nova-compute | compute | nova | enabled | up | 2017-07-21T02:04:30.000000 | +----+------------------+------------+----------+---------+-------+----------------------------+
該輸出應指示在控制器節點上啟用的三個服務組件和在計算節點上啟用的一個服務組件