---
title: 安装配置并验证Nova
description: "Nova管理OpenStack项目中虚拟机实例计算资源的全部生命周期，包括创建、调度和结束。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstackqueens_04_009.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/OpenStack/kunpengopenstackqueens_04_009.html
indexId: 54d190631c5ff23a0a3ba326261f50f38b37a5d871eef1d29ca35c1b1f8efc5283
---
# 安装配置并验证Nova

Nova管理OpenStack项目中虚拟机实例计算资源的全部生命周期，包括创建、调度和结束。

#### 创建Nova数据库

在控制节点执行以下操作。

1. 使用root用户连接数据库。
  1 mysql -u root -p

2. 创建nova,nova_api,nova_cell0数据库。
  1 2 3 4 CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; CREATE DATABASE placement;

3. 授予对数据库的适当访问权限。
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '<PASSWORD>';

4. 退出数据库。
  1 exit


#### 创建角色和用户

在控制节点执行以下操作。

1. 使用admin用户登录OpenStack命令行。
  1 source /etc/keystone/admin-openrc

2. 创建nova用户。
  1 openstack user create --domain default --password-prompt nova

3. 将admin角色添加到nova用户。
  1 openstack role add --project service --user nova admin

4. 创建Nova服务实体。
  1 openstack service create --name nova --description "OpenStack Compute" compute

5. 创建compute API服务端点。
  1 2 3 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

6. 创建用户placement并设置密码。
  1 openstack user create --domain default --password-prompt placement

7. 添加角色。
  1 openstack role add --project service --user placement admin

8. 创建Placement 服务实体。
  1 openstack service create --name placement --description "Placement API" placement

9. 创建Placement API服务端点。
  1 2 3 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


#### 安装和配置Nova（控制节点）

在控制节点执行以下操作。

1. 安装组件。
  1 yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api novnc-0.5.1-2.oe1.noarch

2. 配置Nova，编辑“/etc/nova/nova.conf”文件。

  a. 启用计算和元数据API，配置RabbitMQ消息队列访问以及启用网络服务的支持。
    1 2 3 4 5 6 7 [DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:<PASSWORD>@controller my_ip = 172.168.201.11 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver allow_resize_to_same_host = true

    my_ip为控制节点的管理IP地址，<PASSWORD>为RabbitMQ服务为用户openstack设置的密码。

  b. 配置数据库访问。
    1 2 3 4 [api_database] connection = mysql+pymysql://nova:<PASSWORD>@controller/nova_api [database] connection = mysql+pymysql://nova:<PASSWORD>@controller/nova

  c. 配置身份服务访问。
    1 2 3 4 5 6 7 8 9 10 11 [api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = <PASSWORD>

  d. 配置“/etc/nova/nova.conf”的[neutron]部分，启用元数据代理并配置密码。
    1 2 3 4 5 6 7 8 9 10 11 12 [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 = <PASSWORD> service_metadata_proxy = true metadata_proxy_shared_secret = <PASSWORD>

  e. 配置VNC代理以使用控制器节点的管理接口IP地址。
    1 2 3 4 [vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip

  f. 配置Image服务API的位置。
    1 2 [glance] api_servers = http://controller:9292

  g. 配置锁定路径。
    1 2 [oslo_concurrency] lock_path = /var/lib/nova/tmp

  h. 配置对Placement服务的访问。
    1 2 3 4 5 6 7 8 9 [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 = <PASSWORD>

  i. 在[placement_database]部分中，配置数据库访问，<PASSWORD>修改为数据库设置的密码。
    1 2 [placement_database] connection = mysql+pymysql://placement:<PASSWORD>@controller/placement

  j. 修改配置文件“/etc/httpd/conf.d/00-nova-placement-api.conf”。
    1 vim /etc/httpd/conf.d/00-nova-placement-api.conf

    在ErrorLog /var/log/placement/placement-api.log下面添加：

    1 2 3 4 5 6 7 8 9 <Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory>

  k. 重启httpd服务。
    1 systemctl restart httpd

  l. 填充nova-api数据库。
    1 2 3 4 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 su -s /bin/sh -c "nova-manage db sync" nova

  m. 验证cell0和cell1是否正确注册。
    1 su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

  n. 启动compute服务并设置为系统引导时启动。
    1 2 3 4 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. 安装组件。
  1 yum -y install openstack-nova-compute edk2-aarch64

2. 编辑文件“/etc/nova/nova.conf”。

  a. 启用计算和元数据API。
    1 2 3 4 5 6 7 8 9 [DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:<PASSWORD>@controller my_ip = 172.168.201.12 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver compute_driver=libvirt.LibvirtDriver instances_path = /var/lib/nova/instances/ lock_path = /var/lib/nova/tmp

    此处的my_ip设置为计算节点的管理IP地址。

  b. 配置身份服务访问。
    1 2 3 4 5 6 7 8 9 10 11 [api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = <PASSWORD>

  c. 配置“/etc/nova/nova.conf”的[neutron]部分，在[neutron]部分，添加如下信息。
    1 2 3 4 5 6 7 8 9 10 [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 = <PASSWORD>

  d. 启用并配置远程控制台访问。
    1 2 3 4 5 [vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html

  e. 配置Image服务API的位置。
    1 2 [glance] api_servers = http://controller:9292

  f. 配置锁定路径。
    1 2 [oslo_concurrency] lock_path = /var/lib/nova/tmp

  g. 配置Placement API。
    1 2 3 4 5 6 7 8 9 [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 = <PASSWORD>

  h. 在[libvirt]模块添加如下信息。
    1 virt_type = kvm

    上述配置文件nova.conf默认创建的虚拟机PCI为6，若要修改虚拟机的PCI数量，可在计算节点修改配置文件nova.conf，更改num_pcie_ports参数。 1 vim /etc/nova/nova.conf 打开注释并修改以下参数： 1 num_pcie_ports=15 重启虚拟机后进入虚拟机执行lspci可查看。

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. 启动Compute服务及其依赖项，并将它们配置为在系统引导时自动启动。
  1 2 systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service


#### 将计算节点添加到单元数据库

在控制节点执行以下操作。

1. 使用admin用户登录OpenStack命令行。
  1 source /etc/keystone/admin-openrc

2. 查看数据库的主机。
  1 openstack compute service list --service nova-compute

3. 发现主机。
  1 su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

  注意添加新计算节点时，需要在控制器节点执行以下命令，以注册这些新计算节点。

  1 nova-manage cell_v2 discover_hosts

  或者，在以下位置设置适当的间隔，让控制节点周期性发现计算节点。

  1 vim /etc/nova/nova.conf

  1 2 [scheduler] discover_hosts_in_cells_interval = 300


#### 验证Nova

在控制节点执行以下操作。

1. 使用admin用户登录OpenStack命令行。
  1 source /etc/keystone/admin-openrc

2. 列出服务组件。
  1 openstack compute service list

3. 列出Identity服务中的API端点以验证与Identity服务的连接。
  1 openstack catalog list

4. 列出Glance服务中的Image。
  1 openstack image list

5. 检查单元格和放置API是否正常运行以及其他必要的先决条件是否到位。
  1 nova-status upgrade check


#### Nova常用命令

| 命令行 | 功能描述 |
| --- | --- |
| openstack flavor create <flavor\-name> \-\-vcpus 4 \-\-ram 8192 \-\-disk 20 | 创建指定规格的flavor |
| openstack server create \-\-flavor m1.nano \-\-image cirros \ \-\-nic net\-id=provider \-\-security\-group default \ \-\-key\-name mykey provider\-vm | 创建虚拟机实例 |
| openstack server start provider\-vm | 启动实例 |
| openstack server list | 查看所有实例 |
| openstack server stop vm1 | 关闭实例 |
| openstack server delete vm1 | 删除所选的实例 |
