6-OpenStack计算服务nova

熊 0 阅读 虚拟化

1. Nova简介

Nova 是 openstack 中最早出现的模块之一 , 主要是为openstack提供计算服务。在openstack中 , Nova又分为计算节点和控制节点。我们把安装有nova-compute的节点称为计算节点 , 其他的节点称为控制节点。nova的计算节点只负责创建虚拟机 , 而nova的控制节点负责控制。

Nova 主要有以下服务

  1. API 负责接收和响应外部请求 , 支持openstack api、EC2(亚马逊云) API等。

  2. Cert 负责进行身份认证。

  3. ·Scheduler 用于云主机调度。

  4. Conductor 用于计算节点访问数据。

  5. Consoleauth 用于控制台的授权验证。

  6. Novncproxy VNC代理。

2. Nova 系统架构

Nova 由多个服务器进程构成 , 每个进程执行不同的功能 , 下面介绍各个组件的功能。

openstack-nova-1
  • nova-api : 接收 rest 消息 , 包括 HTTP 请求 , 服务间通信。

  • nova-schedule : 选择合适的主机。

  • nova-conductor : 数据库操作和复杂流程控制。

  • nova-compute : 虚拟机生命周期管理和资源管理 , 负责处理虚机和 hypervisor 间的通信。

  • db:sql : 数据库存储nova相关的业务数据。

3. Nova 组件详解

3.1 Nova-API

openstack-nova-2

Nova API提供的功能 :

  1. 对外提供REST接口 , 接收和处理请求。

  2. 对传入的参数进行合法性校验和约束限制。

  3. 对请求的资源进行配额的校验和预留。

  4. 资源的创建 , 更新 , 删除查询等。

  5. 虚拟机生命周期管理的入口。

3.2 Nova-Conductor

openstack-nova-3

Nova-Conductor功能 :

  1. 数据库操作 , 解耦其他组件(Nova-Compute)数据库访问。

  2. Nova复杂流程控制 , 如创建 , 冷迁移 , 热迁移 , 虚拟机规格调整 , 虚拟机重建。

  3. 其他组件的依赖 , 如 nova-compute 需要 nova-conductor 启动成功后才能启动。

  4. 其他组件的心跳定时写入。

引入nova-conductor的好处

  1. 安全性上考虑。之前每个nova-compute都是直接访问数据库的。如果由于某种原因 , 某个计算节点被攻陷了 , 那攻击者就可以获取访问数据库的全部权限 , 肆意操作数据库。

  2. 方便升级。将数据库和nova-compute解耦 , 如果数据库的模式改变 , nova compute就不用升级了。

  3. 性能上考虑。之前数据库的访问在nova-compute中直接访问且数据库访问是阻塞性的 , 由于nova-compute只有一个os线程 , 所以当一个绿色线程去访问数据库的时候会阻塞其他绿色线程 , 导致绿色线程无法并发。但是nova-conductor是通过rpc 调用 , rpc调用是绿色线程友好的 , 一个rpc call的执行返回前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。

3.3 Nova-Scheduler

Scheduler 用于决定那台计算节点承载计算实例的 nova 调度器。Nova-Scheduler 功能 :

  1. 筛选和确定将虚拟机实例分配到哪一台物理机。

  2. 分配过程主要分两步 , 过滤和权重;通过过滤器选择满足条件的计算节点 , 通过权重选择最优的节点。

openstack-nova-4

调度器的类型

  1. 随机调度器 : 从所有正常运行 nova-compute 服务的节点中随机选择。

  2. 缓存调度器 : 是随机调度器的一种特殊类型 , 在随机调度器的基础上 , 将主机资源信息缓存在本地内存中 , 然后通过后台的定时任务 , 定时从数据库中获取最新的主机资源信息 , 周期性同步而不是实时获取主机资源信息。

  3. 过滤器调度器 : 根据指定的过滤条件以及权重选择最佳的计算节点 , 又称为筛选器。

调度器的调度过程

Nova Scheduler 的调度过程如下图所示 :

openstack-nova-5

从上图可以看出 , Nova Scheduler的调度过程分为两个步骤 , 即过滤和权值计算。所谓过滤就是根据虚拟机资源配置情况和各个主机的实际情况 , 过滤掉一些不符合条件的主机。在进行过滤后 , Nova Scheduler会对剩余的主机进行权重计算 , 最终选择最优的物理机进行调度。

3.4 Nova-Compute

Nova-Compute 框架

  • Manager

  • Driver

Driver对接不同的虚拟化平台

  • KVM

  • VMware

  • Xen

  • LXC

  • QEMU

  • …

openstack-nova-6

Nova-Compute功能

  • 虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver)。

  • 底层对接不同虚拟化的平台(KVM/VMware/XEN/Ironic等)

  • 内置周期性任务,完成资源刷新,虚拟机状态同步等功能。

  • 资源管理模块(resource_tracker)配合插件机制,完成资源的统计。

4. Nova 安装

4.1 控制节点配置

4.1.1 环境准备

  1. 创建nova_api 、nova 、nova_cell0 数据库 ,

    [root@node02 ~]# mysql -u root -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 324
    Server version: 10.5.22-MariaDB MariaDB Server
    ​
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    ​
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    ​
    MariaDB [(none)]> CREATE DATABASE nova_api;
    Query OK, 1 row affected (0.001 sec)
    ​
    MariaDB [(none)]> CREATE DATABASE nova;
    Query OK, 1 row affected (0.001 sec)
    ​
    MariaDB [(none)]> CREATE DATABASE nova_cell0;
    Query OK, 1 row affected (0.001 sec)
    ​
    ​
  2. 对数据库授权

    [root@node02 ~]# mysql -u root -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 325
    Server version: 10.5.22-MariaDB MariaDB Server
    ​
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    ​
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    ​
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%'  IDENTIFIED BY 'nova123';
    Query OK, 0 rows affected (0.013 sec)
    ​
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'  IDENTIFIED BY 'nova123';
    Query OK, 0 rows affected (0.004 sec)
    ​
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%'  IDENTIFIED BY 'nova123';
    Query OK, 0 rows affected (0.005 sec)
    ​

    用其他主机使用nova用户连接mariadb,看看是否能够正常连接?是否能够看到nova_api,nova,nova_cell0这三个库

    [root@node01 ~]# mysql -unova -pnova123 -hnode02;
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 327
    Server version: 10.5.22-MariaDB MariaDB Server
    ​
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    ​
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    ​
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | nova               |
    | nova_api           |
    | nova_cell0         |
    +--------------------+
    4 rows in set (0.002 sec)
  3. 创建compute服务认证

    创建nova服务用户 ,设置其密码为nova

    [root@node01 ~]#  openstack user create --domain default --password-prompt nova
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | 1ebd8cb4b9f74118b199623cd733a831 |
    | name                | nova                             |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+

    将nova用户授权为admin角色,并指明是一个service项目

    [root@node01 ~]#  openstack role add --project service --user nova admin

    创建nova服务,并将其类型设置为compute

    [root@node01 ~]# openstack service create --name nova \
      --description "OpenStack Compute" compute
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack Compute                |
    | enabled     | True                             |
    | id          | c1887005bba9424ca1a28a063aeed2e7 |
    | name        | nova                             |
    | type        | compute                          |
    +-------------+----------------------------------+
  4. 创建compute API endport (服务端点,注册服务)

    创建公共端点

    [root@node01 ~]# openstack endpoint create --region RegionOne compute public http://openstack-vip.net:8774/v2.1
    +--------------+------------------------------------+
    | Field        | Value                              |
    +--------------+------------------------------------+
    | enabled      | True                               |
    | id           | dc53d259577147ba811ff9f95d0cd943   |
    | interface    | public                             |
    | region       | RegionOne                          |
    | region_id    | RegionOne                          |
    | service_id   | c1887005bba9424ca1a28a063aeed2e7   |
    | service_name | nova                               |
    | service_type | compute                            |
    | url          | http://openstack-vip.net:8774/v2.1 |
    +--------------+------------------------------------+

    创建私有端点

    [root@node01 ~]# openstack endpoint create --region RegionOne compute internal http://openstack-vip.net:8774/v2.1
    +--------------+------------------------------------+
    | Field        | Value                              |
    +--------------+------------------------------------+
    | enabled      | True                               |
    | id           | 93f4d8cf312c4a608bd26b72e9a9c759   |
    | interface    | internal                           |
    | region       | RegionOne                          |
    | region_id    | RegionOne                          |
    | service_id   | c1887005bba9424ca1a28a063aeed2e7   |
    | service_name | nova                               |
    | service_type | compute                            |
    | url          | http://openstack-vip.net:8774/v2.1 |
    +--------------+------------------------------------+
    ​

    管理端点

    [root@node01 ~]# openstack endpoint create --region RegionOne compute admin http://openstack-vip.net:8774/v2.1
    +--------------+------------------------------------+
    | Field        | Value                              |
    +--------------+------------------------------------+
    | enabled      | True                               |
    | id           | 5a1047ab5de742a1b122874445aa8b69   |
    | interface    | admin                              |
    | region       | RegionOne                          |
    | region_id    | RegionOne                          |
    | service_id   | c1887005bba9424ca1a28a063aeed2e7   |
    | service_name | nova                               |
    | service_type | compute                            |
    | url          | http://openstack-vip.net:8774/v2.1 |
    +--------------+------------------------------------+

4.1.2 安装配置组件

  1. 安装软件包

    [root@node01 ~]# dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

  2. 编辑配置/etc/nova/nova.conf文件,

    在[DEFAULT]配置段配置 ,仅启用compute和metadata API

    [DEFAULT]
    # ...
    enabled_apis = osapi_compute,metadata

    在 [api_database] 和 [database] 部分,配置数据库访问:

    [api_database]
    # ...
    connection = mysql+pymysql://nova:nova123@openstack-vip.net/nova_api
    
    [database]
    # ...
    connection = mysql+pymysql://nova:nova123@openstack-vip.net/nova

    在 [DEFAULT] 部分,配置 RabbitMQ 消息队列访问:

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:openstack123@openstack-vip.net:5672/

    在 [api] 和 [keystone_authtoken] 部分,配置身份服务访问:

    [api]
    # ...
    auth_strategy = keystone
    
    [keystone_authtoken]
    # ...
    www_authenticate_uri = http://openstack-vip.net:5000/
    auth_url = http://openstack-vip.net:5000/
    memcached_servers = openstack-vip.net:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = nova
    password = nova

    在 [service_user] 部分,配置服务用户令牌, 这个是wallaby版本之后新加的部分:

    [service_user]
    send_service_user_token = true
    auth_url = http://openstack-vip.net/identity
    auth_strategy = keystone
    auth_type = password
    project_domain_name = Default
    project_name = service
    user_domain_name = Default
    username = nova
    password = nova

    这里官方给的auth_url时https, 这里需要ssl证书,默认安装的时候没有监控443端口。所以这里直接使用http://openstack-vip.net/identity。这里是Bobcat版本开始是这个url, 另外可以使用auth_url为http://openstack-vip.net:5000/v3

    在 [DEFAULT] 部分,配置 my_ip 选项以使用控制节点的管理接口 IP 地址:

    [DEFAULT]
    # ...
    my_ip = 192.168.71.11

    在 [vnc] 部分,配置 VNC 代理以使用控制节点的管理接口 IP 地址:

    [vnc]
    enabled = true
    # ...
    server_listen = $my_ip
    server_proxyclient_address = $my_ip

    在 [glance] 部分,配置镜像服务 API 的位置:

    [glance]
    # ...
    api_servers = http://openstack-vip.net:9292

    在 [oslo_concurrency] 部分,配置lock路径:

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp

    在 [placement] 部分,配置对 Placement 服务的访问:

    [placement]
    # ...
    region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://openstack-vip.net:5000/v3
    username = placement
    password = placement
  3. 填充 nova-api 数据库:

    [root@node01 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
  4. 注册 cell0 数据库:

    [root@node01 ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
  5. 创建 cell1 单元

    [root@node01 ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
  6. 填充 Nova 数据库:

    [root@node01 ~]# su -s /bin/sh -c "nova-manage db sync" nova
  7. 验证 nova cell0 和 cell1 是否注册正确

    [root@node01 ~]# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
    Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
    +-------+--------------------------------------+-------------------------------------------------+--------------------------------------------------------+----------+
    |  Name |                 UUID                 |                  Transport URL                  |                  Database Connection                   | Disabled |
    +-------+--------------------------------------+-------------------------------------------------+--------------------------------------------------------+----------+
    | cell0 | 00000000-0000-0000-0000-000000000000 |                      none:/                     | mysql+pymysql://nova:****@openstack-vip.net/nova_cell0 |  False   |
    | cell1 | 617af809-ffb0-42d1-9085-511fb45c4719 | rabbit://openstack:****@openstack-vip.net:5672/ |    mysql+pymysql://nova:****@openstack-vip.net/nova    |  False   |
    +-------+--------------------------------------+-------------------------------------------------+--------------------------------------------------------+----------+
  8. 启动服务

    [root@node01 ~]# systemctl enable openstack-nova-api.service     openstack-nova-scheduler.service     openstack-nova-conductor.service     openstack-nova-novncproxy.service --now
  9. 调整haproxy节点的haproxy配置文件

    listen openstack_nova_port
        bind 192.168.71.250:8774
        mode tcp
        log global
        server 192.168.71.11 192.168.71.11:8774 check inter 3000 fall 3 rise 5
    
    listen openstack_nova_port_8775
        bind 192.168.71.250:8775
        mode tcp
        log global
        server 192.168.71.11 192.168.71.11:8775 check inter 3000 fall 3 rise 5
    
    listen openstack_nova_vnc_port
        bind 192.168.71.250:6080
        mode tcp
        log global
        server 192.168.71.11 192.168.71.11:6080 check inter 3000 fall 3 rise 5
    
    listen openstack_nova_identity_port
        bind 192.168.71.250:80
        mode tcp
        log global
        server 192.168.71.11 192.168.71.11:80 check inter 3000 fall 3 rise 5
  10. 查看nova数据库中是否有表生成

    [root@node02 ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 6751
    Server version: 10.5.22-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> use nova;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [nova]> show tables;
    +--------------------------------------------+
    | Tables_in_nova                             |
    +--------------------------------------------+
    | agent_builds                               |
    | aggregate_hosts                            |
    | aggregate_metadata                         |
    | aggregates                                 |
    | alembic_version                            |
    | allocations                                |
    | block_device_mapping                       |
    | bw_usage_cache                             |
    | cells                                      |
    | certificates                               |
    | compute_nodes                              |
    | console_auth_tokens                        |
    | console_pools                              |
    | consoles                                   |
    | dns_domains                                |
    | fixed_ips                                  |
    | floating_ips                               |
    | instance_actions                           |
    | instance_actions_events                    |
    | instance_extra                             |
    | instance_faults                            |
    | instance_group_member                      |
    | instance_group_policy                      |
    | instance_groups                            |
    | instance_id_mappings                       |
    | instance_info_caches                       |
    | instance_metadata                          |
    | instance_system_metadata                   |
    | instance_type_extra_specs                  |
    | instance_type_projects                     |
    | instance_types                             |
    | instances                                  |
    | inventories                                |
    | key_pairs                                  |
    | migrations                                 |
    | networks                                   |
    | pci_devices                                |
    | project_user_quotas                        |
    | provider_fw_rules                          |
    | quota_classes                              |
    | quota_usages                               |
    | quotas                                     |
    | reservations                               |
    | resource_provider_aggregates               |
    | resource_providers                         |
    | s3_images                                  |
    | security_group_default_rules               |
    | security_group_instance_association        |
    | security_group_rules                       |
    | security_groups                            |
    | services                                   |
    | shadow_agent_builds                        |
    | shadow_aggregate_hosts                     |
    | shadow_aggregate_metadata                  |
    | shadow_aggregates                          |
    | shadow_alembic_version                     |
    | shadow_block_device_mapping                |
    | shadow_bw_usage_cache                      |
    | shadow_cells                               |
    | shadow_certificates                        |
    | shadow_compute_nodes                       |
    | shadow_console_pools                       |
    | shadow_consoles                            |
    | shadow_dns_domains                         |
    | shadow_fixed_ips                           |
    | shadow_floating_ips                        |
    | shadow_instance_actions                    |
    | shadow_instance_actions_events             |
    | shadow_instance_extra                      |
    | shadow_instance_faults                     |
    | shadow_instance_group_member               |
    | shadow_instance_group_policy               |
    | shadow_instance_groups                     |
    | shadow_instance_id_mappings                |
    | shadow_instance_info_caches                |
    | shadow_instance_metadata                   |
    | shadow_instance_system_metadata            |
    | shadow_instance_type_extra_specs           |
    | shadow_instance_type_projects              |
    | shadow_instance_types                      |
    | shadow_instances                           |
    | shadow_key_pairs                           |
    | shadow_migrations                          |
    | shadow_networks                            |
    | shadow_pci_devices                         |
    | shadow_project_user_quotas                 |
    | shadow_provider_fw_rules                   |
    | shadow_quota_classes                       |
    | shadow_quota_usages                        |
    | shadow_quotas                              |
    | shadow_reservations                        |
    | shadow_s3_images                           |
    | shadow_security_group_default_rules        |
    | shadow_security_group_instance_association |
    | shadow_security_group_rules                |
    | shadow_security_groups                     |
    | shadow_services                            |
    | shadow_snapshot_id_mappings                |
    | shadow_snapshots                           |
    | shadow_task_log                            |
    | shadow_virtual_interfaces                  |
    | shadow_volume_id_mappings                  |
    | shadow_volume_usage_cache                  |
    | snapshot_id_mappings                       |
    | snapshots                                  |
    | tags                                       |
    | task_log                                   |
    | virtual_interfaces                         |
    | volume_id_mappings                         |
    | volume_usage_cache                         |
    +--------------------------------------------+
    110 rows in set (0.001 sec)
    

    可以看到nova数据库中生成了很多张表,说明初始nova数据库没有问题;

    检测端口: 6080是nova-novncproxy服务所监听的端口;8774和8775是nova-api所监听的端口;

    image-20240920074744636

到此nova服务在控制节点上就安装配置完毕

4.2 计算节点配置

  1. 安装组件包

    yum install openstack-nova-compute 

    这里需要注意,官网给出的命令是上面这种, 但是实验之后发现, 安装过程中缺少libvirt软件包

    需要额外运行以下命令

    dnf install libvirt qemu-kvm
  2. 编辑 /etc/nova/nova.conf 文件并完成以下操作

    在 [DEFAULT] 部分,仅启用compute和 metadata API:

    [DEFAULT]
    # ...
    enabled_apis = osapi_compute,metadata

    在 [DEFAULT] 部分,配置 RabbitMQ 消息队列访问:

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:openstack123@openstack-vip.net

    在 [api] 和 [keystone_authtoken] 部分,配置身份服务访问:

    [api]
    # ...
    auth_strategy = keystone
    
    [keystone_authtoken]
    # ...
    www_authenticate_uri = http://openstack-vip.net:5000/
    auth_url = http://openstack-vip.net:5000/
    memcached_servers = openstack-vip.net:11211
    auth_type = password
    project_domain_name = Default
    user_domain_name = Default
    project_name = service
    username = nova
    password = nova

    在 [service_user] 部分,配置服务用户令牌:

    [service_user]
    send_service_user_token = true
    auth_url = http://openstack-vip.net/identity
    auth_strategy = keystone
    auth_type = password
    project_domain_name = Default
    project_name = service
    user_domain_name = Default
    username = nova
    password = nova

    在 [DEFAULT] 部分,配置 my_ip 选项:

    [DEFAULT]
    # ...
    my_ip = 192.168.71.30

    在 [vnc] 部分,启用并配置远程控制台访问:

    [vnc]
    # ...
    enabled = true
    server_listen = 0.0.0.0
    server_proxyclient_address = $my_ip
    novncproxy_base_url = http://openstack-vip.net:6080/vnc_auto.html

    服务器组件监听所有 IP 地址,而代理组件仅监听计算节点的管理接口 IP 地址。基础 URL 指示您可以使用 Web 浏览器访问此计算节点上实例的远程控制台的位置。

    在 [glance] 部分,配置镜像服务 API 的位置:

    [glance]
    # ...
    api_servers = http://openstack-vip.net:9292

    在 [oslo_concurrency] 部分,配置lock路径:

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp

    在 [placement] 部分,配置 Placement API:

    [placement]
    # ...
    region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://openstack-vip.net:5000/v3
    username = placement
    password = placement

    确定您的计算节点是否支持虚拟机的硬件加速:

    [root@node03 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
    40

    如果这个命令返回的值是一或更大,您的计算节点支持硬件加速,通常不需要额外的配置。

    如果这个命令返回的值是零,您的计算节点不支持硬件加速,您必须配置 libvirt 使用 QEMU 而不是 KVM。

    • 编辑 /etc/nova/nova.conf 文件中的 [libvirt] 部分如下:

      [libvirt]
      # ...
      virt_type = qemu
  3. 开启对应服务

    [root@node03 ~]# systemctl enable libvirtd.service openstack-nova-compute.service
    [root@node03 ~]# systemctl start  libvirtd.service openstack-nova-compute.service

    开启服务之后,会有如下报错提示

    Sep 20 09:39:33 node03 nova-compute[41489]: 2024-09-20 09:39:33.453 41489 ERROR nova.virt.driver [None req-45e42af7-ef51-431b-9780-c9c798d78840 - - - - - -] Compute driver option required, but not specified

    这里修改/etc/nova/nova.conf , 开启driver驱动

    [DEFAULT]
    compute_driver=libvirt.LibvirtDriver

    开启服务过程中提示报错

    Sep 20 09:42:54 node03 nova-compute[41986]: 2024-09-20 09:42:54.063 41986 ERROR oslo_service.service nova.exception.InvalidNodeConfiguration: Invalid node identity configuration: Unable to write uuid to /usr/lib/python3.9/site-packages/compute_id: [Errno 13] Permission denied: '/usr/lib/python3.9/site-packages/compute_id'

    需要创建对应文件解决这个问题

    [root@node03 ~]# chown nova:nova /usr/lib/python3.9/site-packages/compute_id
    [root@node03 ~]# chmod u+w /usr/lib/python3.9/site-packages/compute_id
    [root@node03 ~]# uuidgen > /usr/lib/python3.9/site-packages/compute_id

    另外开启过程中, 还有如下报错

    Sep 20 09:56:01 node03 nova-compute[46672]: 2024-09-20 09:56:01.840 46672 ERROR nova.compute.manager FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3.9/site-packages/instances'

    解决这个问题可以使用以下命令, 在 OpenStack Nova 中,/usr/lib/python3.9/site-packages/compute_id 目录包含的是与计算节点标识相关的文件。从 2023.1 版本开始,Nova 要求计算节点在其生命周期内保持一个恒定且一致的身份标识。这通常是通过在磁盘上持久化一个包含节点唯一标识符的文件来实现的。这个文件是在 nova-compute 服务首次启动时自动生成并写入磁盘的,之后会一直使用这个 UUID 作为其稳定的身份标识。

    [root@node03 ~]# touch /usr/lib/python3.9/site-packages/instances

    处理这三个问题之后直接启动对应服务即可

    只不过上面两个文件问题是一个参数导致的, 直接通过修改/etc/nova/nova.conf参数

    [DEFAULT]
    ...
    state_path = /var/lib/nova
    #默认为这个目录

    这里如果这个compute_id文件丢失, 可以通过数据库重新获取该节点的uuid

    MariaDB [nova]> SELECT uuid  FROM nova.compute_nodes WHERE hypervisor_hostname = 'node03'\G;
    *************************** 1. row ***************************
    uuid: 4eac8f84-fd92-4451-a7e9-d36070ffdb3a
    1 row in set (0.001 sec)
    

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

    [root@node01 ~]# openstack compute service list --service nova-compute
    +--------------------------------------+--------------+--------+------+---------+-------+----------------------------+
    | ID                                   | Binary       | Host   | Zone | Status  | State | Updated At                 |
    +--------------------------------------+--------------+--------+------+---------+-------+----------------------------+
    | 24d26380-78ae-4825-a9ec-b1efa39593d8 | nova-compute | node03 | nova | enabled | up    | 2024-09-20T01:59:48.000000 |
    +--------------------------------------+--------------+--------+------+---------+-------+----------------------------+
  5. 手动扫描发现计算节点

    [root@node01 ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

    设置自动发现计算节点,并自动完成计算节点注册的间隔时间

    [scheduler]
    discover_hosts_in_cells_interval = 300

    当你添加新的计算节点时, 你必须在控制节点上运行nova-manage cell_v2 discover_hosts来注册这些新的计算节点。你可以在/etc/nova/nova.conf中设置适当的间隔

    这个配置要在控制节点的nova.conf中配置,上述配置表示每隔300秒自动扫描一下有没有新的计算节点加入;

    到此,计算节点上的nova服务就安装配置完成了

  6. 在控制节点导出admin用户的环境变量,列出服务组件,验证每个流程的成功启动和注册

    [root@node01 ~]# openstack compute service list
    +--------------------------------------+----------------+--------+----------+---------+-------+----------------------------+
    | ID                                   | Binary         | Host   | Zone     | Status  | State | Updated At                 |
    +--------------------------------------+----------------+--------+----------+---------+-------+----------------------------+
    | 89a07788-8508-4888-85d3-8a2fc9cc24a5 | nova-conductor | node01 | internal | enabled | up    | 2024-09-20T02:28:53.000000 |
    | 47c9381b-7833-47d6-b71a-3ec8401e282f | nova-scheduler | node01 | internal | enabled | up    | 2024-09-20T02:28:53.000000 |
    | 24d26380-78ae-4825-a9ec-b1efa39593d8 | nova-compute   | node03 | nova     | enabled | up    | 2024-09-20T02:28:48.000000 |
    +--------------------------------------+----------------+--------+----------+---------+-------+----------------------------+

    能够看到controller节点上启用的两个服务组件和compute节点上启用的一个服务组件。能够看到上述信息,表示nova服务工作正常;

    验证:列出通过keystone验证的API端点

    [root@node01 ~]# openstack catalog list
    +-----------+-----------+------------------------------------------------+
    | Name      | Type      | Endpoints                                      |
    +-----------+-----------+------------------------------------------------+
    | glance    | image     | RegionOne                                      |
    |           |           |   public: http://openstack-vip.net:9292        |
    |           |           | RegionOne                                      |
    |           |           |   admin: http://openstack-vip.net:9292         |
    |           |           | RegionOne                                      |
    |           |           |   internal: http://openstack-vip.net:9292      |
    |           |           |                                                |
    | keystone  | identity  | RegionOne                                      |
    |           |           |   internal: http://openstack-vip.net:5000/v3/  |
    |           |           | RegionOne                                      |
    |           |           |   public: http://openstack-vip.net:5000/v3/    |
    |           |           | RegionOne                                      |
    |           |           |   admin: http://openstack-vip.net:5000/v3/     |
    |           |           |                                                |
    | nova      | compute   | RegionOne                                      |
    |           |           |   admin: http://openstack-vip.net:8774/v2.1    |
    |           |           | RegionOne                                      |
    |           |           |   internal: http://openstack-vip.net:8774/v2.1 |
    |           |           | RegionOne                                      |
    |           |           |   public: http://openstack-vip.net:8774/v2.1   |
    |           |           |                                                |
    | placement | placement | RegionOne                                      |
    |           |           |   admin: http://openstack-vip.net:8778         |
    |           |           | RegionOne                                      |
    |           |           |   internal: http://openstack-vip.net:8778      |
    |           |           | RegionOne                                      |
    |           |           |   public: http://openstack-vip.net:8778        |
    |           |           |                                                |
    +-----------+-----------+------------------------------------------------+

    验证:检查cell和placement是否工作正常

    [root@node01 ~]# nova-status upgrade check
    Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if the caller is only importing and not executing nova code.
    +-------------------------------------------+
    | Upgrade Check Results                     |
    +-------------------------------------------+
    | Check: Cells v2                           |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: Placement API                      |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: Cinder API                         |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: Policy File JSON to YAML Migration |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: Older than N-1 computes            |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: hw_machine_type unset              |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+
    | Check: Service User Token Configuration   |
    | Result: Success                           |
    | Details: None                             |
    +-------------------------------------------+

    这个检查必须要全部都是成功的才没有问题;到此nova服务的安装配置和测试就完了;后续我们还差一个neutron网络服务,就可以在openstack上启动虚拟机了;

    [root@node01 ~]# openstack hypervisor list
    +--------------------------------------+---------------------+-----------------+---------------+-------+
    | ID                                   | Hypervisor Hostname | Hypervisor Type | Host IP       | State |
    +--------------------------------------+---------------------+-----------------+---------------+-------+
    | 4eac8f84-fd92-4451-a7e9-d36070ffdb3a | node03              | QEMU            | 192.168.71.30 | up    |
    +--------------------------------------+---------------------+-----------------+---------------+-------+


参考链接

玩转企业云计算平台系列(五) : Openstack 计算服务 Nova (qq.com)