---
title: 安装Nova
description: "Nova管理OpenStack项目中虚拟机实例计算资源的全部生命周期，包括创建、调度和终止。请在控制节点和计算节点安装Nova。在控制节点和计算节点场景安装Nova的操作有所不同，操作过程中请仔细分辨。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstackwallaby_04_018.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstackwallaby_04_018.html
indexId: 31ff397f236edd0b8fb1721ebaf17782d70f9eb95fe33ec73168f28cae88453484
---
# 安装Nova

Nova管理OpenStack项目中虚拟机实例计算资源的全部生命周期，包括创建、调度和终止。请在控制节点和计算节点安装Nova。在控制节点和计算节点场景安装Nova的操作有所不同，操作过程中请仔细分辨。

#### 在控制节点安装和配置Nova

1. 创建数据库、服务凭证和API端点。

  a. 以root用户登录数据库。

```
mysql -u root -p
```


  b. 创建数据库。
    1 2 3 4 5 6 7 8 9 CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; 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'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

    将NOVA_DBPASS替换为Nova数据库用户的密码，请根据实际情况进行设置。密码中请勿包含字符“#@$”，支持特殊字符“&=- _ . + ! * ()”


  c. 退出数据库。

```
exit
```


  d. 创建Nova服务凭证。

```
source
~
/.admin-openrc
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Computer" compute
```


    密码请勿包含字符“#@$”，支持特殊字符“&=- _ . + ! * ()”

  e. 创建Nova API端点。

```
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
```


2. 安装软件包。

```
yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
```


3. 编辑配置文件。

  a. 打开文件。

```
vi /etc/nova/nova.conf
```


  b. 按“i”进入编辑模式，添加如下内容。

```
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:
RABBIT_PASSWORD
@controller:5672/
my_ip =
192.168.14.2
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
block_device_allocate_retries =
block_device_allocate_retries_interval =
[api_database]
connection = mysql+pymysql://nova:
NOVA_DBPASS
@controller/nova_api
[database]
connection = mysql+pymysql://nova:
NOVA_DBPASS
@controller/nova
[api]
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password =
NOVA_PASSWORD
[vnc]
enabled = true
server_listen =
192.168.14.2
server_proxyclient_address =
192.168.14.2
[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password =
PLACEMENT_PASSWORD
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password =
NEUTRON_PASSWORD
service_metadata_proxy = true
metadata_proxy_shared_secret =
NEUTRON_PASSWORD
```


    [default]字段的内容用于启用计算和元数据的API，配置RabbitMQ消息队列入口，配置my_ip，启用网络服务Neutron。 [api_database] [database]字段的内容用于配置数据库参数。 [api] [keystone_authtoken]字段的内容用于配置身份认证服务入口。 [vnc]字段的内容用于启用并配置远程控制台入口。 [glance]字段的内容用于配置镜像服务API的地址。 [oslo_concurrency]字段的内容用于配置lock path。 [placement]字段的内容用于配置Placement服务的入口。 将RABBIT_PASSWORD替换为RabbitMQ中OpenStack账户的密码。 my_ip为当前节点的管理IP地址。 server_listen为对应节点的管理IP地址。 server_proxyclient_address为对应节点的管理IP地址。 将NOVA_DBPASS替换为Nova数据库的密码。 将NOVA_PASSWORD替换为Nova用户的密码。 将PLACEMENT_PASSWORD替换为Placement用户的密码。 将NEUTRON_PASSWORD替换为Neutron用户的密码。 将METADATA_SECRET替换为合适的元数据代理secret。


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
4. 同步数据库。

  a. 同步nova-api数据库。

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


  b. 注册cell0数据库。

```
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
```


  c. 创建cell1 cell。

```
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
```


  d. 同步nova数据库。

```
su -s /bin/sh -c "nova-manage db sync" nova
```


  e. 验证cell0和cell1注册正确。

```
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
```


5. 启动Compute服务并设置为系统引导时启动。

```
systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
```


#### 在计算节点安装和配置Nova

1. 安装组件。

```
yum install openstack-nova-compute edk2-aarch64
```


2. 编辑配置文件。

  a. 打开文件。

```
vi /etc/nova/nova.conf
```


  b. 按“i”进入编辑模式，添加如下内容。

```
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:
RABBIT_PASSWORD
@controller:5672/
my_ip =
192.168.14.4
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
block_device_allocate_retries =
block_device_allocate_retries_interval =
compute_driver=libvirt.LibvirtDriver
instances_path = /var/lib/nova/instances/
lock_path = /var/lib/nova/tmp
log_dir = /var/log/nova
[api]
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password =
NOVA_PASSWORD
[vnc]
enabled = true
server_listen =
192.168.14.4
server_proxyclient_address =
192.168.14.4
novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance]
api_servers = http://controller:9292
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password =
PLACEMENT_PASSWORD
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password =
NEUTRON_PASSWORD
[libvirt]
virt_type = kvm
live_migration_uri = qemu+ssh://root@%s/system
live_migration_inbound_addr =
192.168.14.4
```


    [DEFAULT]字段用于启用计算和元数据的API，配置RabbitMQ消息队列入口，配置my_ip，启用网络服务Neutron。 [vnc]字段用于启用并配置远程控制台入口。 [glance]字段用于配置镜像服务API的地址。 [placement]字段用于配置Placement服务的入口。 将RABBIT_PASSWORD替换为RabbitMQ中OpenStack账户的密码。 my_ip为当前节点的管理IP地址。 live_migration_inbound_addr为当前节点的管理IP地址。 server_listen为对应节点的管理IP地址。 server_proxyclient_address为对应节点的管理IP地址。 将NOVA_DBPASS替换为Nova数据库的密码。 将NOVA_PASSWORD替换为Nova用户的密码。 将PLACEMENT_PASSWORD替换为Placement用户的密码。 将NEUTRON_PASSWORD替换为Neutron用户的密码。

  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
3. 创建AAVMF文件和链接。

```
mkdir -p /usr/share/AAVMF
chown nova:nova /usr/share/AAVMF
ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw /usr/share/AAVMF/AAVMF_CODE.fd
ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw /usr/share/AAVMF/AAVMF_VARS.fd
```


4. 修改“/etc/libvirt/qemu.conf”文件。

  a. 打开文件。

```
vi /etc/libvirt/qemu.conf
```


  b. 按“i”进入编辑模式，添加如下内容。

```
nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd",
"/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"]
```


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
5. 添加“/etc/qemu/firmware/edk2-aarch64.json”文件。

  a. 打开文件。

```
mkdir -p /etc/qemu/firmware
vi /etc/qemu/firmware/edk2-aarch64.json
```


  b. 按“i”进入编辑模式，添加如下内容。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 { "description": "UEFI firmware for ARM64 virtual machines", "interface-types": [ "uefi" ], "mapping": { "device": "flash", "executable": { "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw", "format": "raw" }, "nvram-template": { "filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw", "format": "raw" } }, "targets": [ { "architecture": "aarch64", "machines": [ "virt-*" ] } ], "features": [ ], "tags": [ ] }

  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
6. 配置使能热迁移功能。

  a. 查询CPU信息。

```
cat /proc/cpuinfo
```


    记录“CPU part”的值。

  b. 查询vendor name。

```
cat /usr/share/libvirt/cpu_map/arm_vendors.xml|grep -io hisilicon
```


    记录返回值。

  c. 新增arm_Kunpeng-920-current.xml文件。

```
cd /usr/share/libvirt/cpu_map
vi arm_Kunpeng-920-current.xml
```


  d. 按“i”进入编辑模式，添加如下内容。
    1 2 3 4 5 6 <cpus> <model name='arm_Kunpeng-920-current'> <vendor name='Hisilicon'/> <pvr value='0xd01'/> </model> </cpus>

    请将vendor name的值替换为6.b中的返回值。 请将pvr value的值替换为6.a中“CPU part”的值。

  e. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
  f. 修改index.xml文件。

```
cd /usr/share/libvirt/cpu_map
vi index.xml
```


  g. 按“i”进入编辑模式，在<include filename="arm_Kunpeng-920.xml"/>后新增一行，填写如下内容。
    1 <include filename="arm_Kunpeng-920-current.xml"/>

  h. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
7. 启动Compute服务。

```
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
```


8. 在控制节点执行如下命令。

```
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
```


#### 在控制节点验证Nova

1. 在控制节点验证Nova。

```
source
~
/.admin-openrc
```


2. 列出服务组件，验证每个服务都成功启动和注册。

```
openstack compute service list
```


3. 列出身份服务中的API端点，验证与身份服务的连接。

```
openstack catalog list
```


4. 检查cells是否运作成功，以及其他必要条件是否已具备。

```
nova-status upgrade check
```
