概述

NOVA组件

Nova计算服务
Nova系统架构
Nova组件介绍
基于命令界面进行管理Nova

Nova计算服务
  • 计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源,它在openstack项目中代号是nova。
  • Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持Hypervisor(虚拟机管理器) 进行交互。所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)
  • Nova需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。
Nova系统架构

Nova由多个服务器进程组成,每个进程执行不同的功能
在这里插入图片描述

  • DB:用于数据存储的sql数据库。
  • API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件。
  • Scheduler:用于决定哪台计算节点承载计算实例的nova调度器
  • Network:管理IP转发、网桥或虚拟局域网的nova网络组件。
  • Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件。
  • Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换
Nova组件介绍
API
  • API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点。

  • 所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。

  • 最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API。

  • 只要跟虚拟机生命周期相关的操作,nova-api都可以响应。

  • Nova-api对接收到的HTTP API请求做以下处理:

    1. 检查客户端传入的参数是否合法有效
    2. 调用nova其他服务来处理客户端HTTP请求
    3. 格式化nova其他子服务返回结果并返回给客户端
  • Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。

Scheduler
  • Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu构架(intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。

  • 创建虚拟机实例时,用户会提出资源需求,如cpu.内存、磁盘各需要多少。Openstack将这些需求定义在实例类型中,用户只需指定使用哪个实例类型即可

  • Nova调度器的类型:

    1. 随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。
    2. 过滤器调度器(filter scheduler) :根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器
    3. 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。

Controller安装与配置

  1. 准备 在安装和配置nova服务之前,必须创建 数据库、服务凭据和 API 终结点
    1. 要创建数据库,请完成以下步骤:
      • 使用数据库访问客户端连接到数据库服务器 作为用户:root
        $ mysql -u root -p000000
        
      • 创建数据库:nova_api nova nova_cell0
        MariaDB [(none)]> CREATE DATABASE nova_api;
        MariaDB [(none)]> CREATE DATABASE nova;
        MariaDB [(none)]> CREATE DATABASE nova_cell0;
        
      • 授予对数据库的适当访问权限:
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'IDENTIFIED BY '000000';
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '000000';
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '000000';
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '000000';
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '000000';
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '000000';
        
      • 退出数据库访问客户端。
    2. 获取凭据以获取对仅限管理员的 CLI 命令的访问权限:admin
      $ . ~/admin-openrc.sh
      
    3. 创建nova服务凭据:
      1. 创建用户:nova
        $ openstack user create --domain default --password-prompt nova
        
        User Password:000000
        Repeat User Password:000000
        +---------------------+----------------------------------+
        | Field               | Value                            |
        +---------------------+----------------------------------+
        | domain_id           | default                          |
        | enabled             | True                             |
        | id                  | a697f1dde850441b955ce6b7f8a64863 |
        | name                | nova                             |
        | options             | {}                               |
        | password_expires_at | None                             |
        +---------------------+----------------------------------+
        
      2. admin 角色添加到 service 项目和 nove 用户
        $ openstack role add --project service --user nova admin
        
      3. 创建服务实体:nova
        $ openstack service create --name nova --description "OpenStack Compute" compute
        
        +-------------+----------------------------------+
        | Field       | Value                            |
        +-------------+----------------------------------+
        | description | OpenStack Compute                |
        | enabled     | True                             |
        | id          | a53993e24f95423b9ed6ba8e41760957 |
        | name        | nova                             |
        | type        | compute                          |
        +-------------+----------------------------------+
        
    4. 创建nova API 服务终结点:
      $ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
      
      +--------------+----------------------------------+
      | Field        | Value                            |
      +--------------+----------------------------------+
      | enabled      | True                             |
      | id           | 68040275c7ab46d9a8e4d6b9a10b521a |
      | interface    | public                           |
      | region       | RegionOne                        |
      | region_id    | RegionOne                        |
      | service_id   | a53993e24f95423b9ed6ba8e41760957 |
      | service_name | nova                             |
      | service_type | compute                          |
      | url          | http://controller:8774/v2.1      |
      +--------------+----------------------------------+
      
      $ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
      
      +--------------+----------------------------------+
      | Field        | Value                            |
      +--------------+----------------------------------+
      | enabled      | True                             |
      | id           | 19f94bbf766d4abab4c63e237bb3bfed |
      | interface    | internal                         |
      | region       | RegionOne                        |
      | region_id    | RegionOne                        |
      | service_id   | a53993e24f95423b9ed6ba8e41760957 |
      | service_name | nova                             |
      | service_type | compute                          |
      | url          | http://controller:8774/v2.1      |
      +--------------+----------------------------------+
      
      $ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
      
      +--------------+----------------------------------+
      | Field        | Value                            |
      +--------------+----------------------------------+
      | enabled      | True                             |
      | id           | a09d7d9f3c0a414dbdf4fd493ec29c07 |
      | interface    | admin                            |
      | region       | RegionOne                        |
      | region_id    | RegionOne                        |
      | service_id   | a53993e24f95423b9ed6ba8e41760957 |
      | service_name | nova                             |
      | service_type | compute                          |
      | url          | http://controller:8774/v2.1      |
      +--------------+----------------------------------+
      
  2. 安装和配置组件
    1. 安装软件包:
      # yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
      
    2. 编辑文件并完成以下操作:/etc/nova/nova.conf
      [DEFAULT]
      enabled_apis = osapi_compute,metadata
      transport_url = rabbit://openstack:000000@controller:5672/
      my_ip = 192.168.200.150
      use_neutron = true
      firewall_driver = nova.virt.firewall.NoopFirewallDriver
      [api]
      auth_strategy = keystone
      [api_database]
      connection = mysql+pymysql://nova:000000@controller/nova_api
      [barbican]
      [cache]
      [cinder]
      [compute]
      [conductor]
      [console]
      [consoleauth]
      [cors]
      [database]
      connection = mysql+pymysql://nova:000000@controller/nova
      [devices]
      [ephemeral_storage_encryption]
      [filter_scheduler]
      [glance]
      api_servers = http://controller:9292
      [guestfs]
      [healthcheck]
      [hyperv]
      [ironic]
      [key_manager]
      [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 = 000000
      [libvirt]
      [metrics]
      [mks]
      [neutron]
      [notifications]
      [osapi_v21]
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp
      [oslo_messaging_amqp]
      [oslo_messaging_kafka]
      [oslo_messaging_notifications]
      [oslo_messaging_rabbit]
      [oslo_middleware]
      [oslo_policy]
      [pci]
      [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 = 000000
      [powervm]
      [privsep]
      [profiler]
      [quota]
      [rdp]
      [remote_debug]
      [scheduler]
      [serial_console]
      [service_user]
      [spice]
      [upgrade_levels]
      [vault]
      [vendordata_dynamic_auth]
      [vmware]
      [vnc]
      enabled=true
      server_listen=$my_ip
      server_proxyclient_address=$my_ip
      [workarounds]
      [wsgi]
      [xenserver]
      [xvp]
      [zvm]
      
    3. 填充数据库:nova-api
      # su -s /bin/sh -c "nova-manage api_db sync" nova
      
    4. 注册数据库:cell0
      # su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
      
    5. 创建单元格:cell1
      # su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
      
    6. 填充 nova 数据库:
      这里遇到两个警告信息,不是很严重,后续版本会修复,再重新执行一下就不会报了
      # su -s /bin/sh -c "nova-manage db sync" nova
      
    7. 验证nova cell0 和 cell1 是否已正确注册:
      # su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
      +-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
      |  Name |                 UUID                 |              Transport URL               |               Database Connection               | Disabled |
      +-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
      | cell0 | 00000000-0000-0000-0000-000000000000 |                  none:/                  | mysql+pymysql://nova:****@controller/nova_cell0 |  False   |
      | cell1 | e4563778-94b6-4f1f-8a53-2a19cedd1f34 | rabbit://openstack:****@controller:5672/ |    mysql+pymysql://nova:****@controller/nova    |  False   |
      +-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
      
  3. 完成安装
    • 启动nova服务并将其配置为在系统引导时启动:
      # 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
      

Compute安装与配置

  1. 安装和配置组件
    1. 安装软件包:
      # yum install -y openstack-nova-compute
      
    2. 编辑文件并完成以下操作:/etc/nova/nova.conf
      [DEFAULT]
      enabled_apis = osapi_compute,metadata
      transport_url = rabbit://openstack:000000@controller
      my_ip = 192.168.200.151
      use_neutron = true
      firewall_driver = nova.virt.firewall.NoopFirewallDriver
      [api]
      auth_strategy = keystone
      [api_database]
      [barbican]
      [cache]
      [cinder]
      [compute]
      [conductor]
      [console]
      [consoleauth]
      [cors]
      [database]
      [devices]
      [ephemeral_storage_encryption]
      [filter_scheduler]
      [glance]
      api_servers = http://controller:9292
      [guestfs]
      [healthcheck]
      [hyperv]
      [ironic]
      [key_manager]
      [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 = 000000
      [libvirt]
      [metrics]
      [mks]
      [neutron]
      [notifications]
      [osapi_v21]
      [oslo_concurrency]
      lock_path = /var/lib/nova/tmp
      [oslo_messaging_amqp]
      [oslo_messaging_kafka]
      [oslo_messaging_notifications]
      [oslo_messaging_rabbit]
      [oslo_middleware]
      [oslo_policy]
      [pci]
      [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 = 000000
      [powervm]
      [privsep]
      [profiler]
      [quota]
      [rdp]
      [remote_debug]
      [scheduler]
      [serial_console]
      [service_user]
      [spice]
      [upgrade_levels]
      [vault]
      [vendordata_dynamic_auth]
      [vmware]
      [vnc]
      enabled = true
      server_listen = 0.0.0.0
      server_proxyclient_address = $my_ip
      novncproxy_base_url = http://controller:6080/vnc_auto.html
      [workarounds]
      [wsgi]
      [xenserver]
      [xvp]
      [zvm]
      
  2. 完成安装
    1. 确定计算节点是否支持硬件加速 虚拟机:
      $ egrep -c '(vmx|svm)' /proc/cpuinfo
      
      • 如果此命令返回的值为0
        编辑[libvirt]/etc/nova/nova.conf
        [libvirt]
        # ...
        virt_type = qemu
        
    2. 启动计算服务(包括其依赖项)并将其配置为 系统引导时自动启动:
      # systemctl enable libvirtd.service openstack-nova-compute.service
      # systemctl restart libvirtd.service openstack-nova-compute.service
      
  3. 将计算节点添加到单元数据库
    1. 获取管理员凭据以启用仅限管理员的 CLI 命令,然后确认 数据库中有计算主机:
      $ . ~/admin-openrc.sh
      
      $ openstack compute service list --service nova-compute
      +----+--------------+---------+------+---------+-------+----------------------------+
      | ID | Binary       | Host    | Zone | Status  | State | Updated At                 |
      +----+--------------+---------+------+---------+-------+----------------------------+
      |  7 | nova-compute | compute | nova | enabled | up    | 2023-03-21T07:00:04.000000 |
      +----+--------------+---------+------+---------+-------+----------------------------+
      
    2. controller发现计算主机:
      # su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
      
      Found 2 cell mappings.
      Skipping cell0 since it does not contain hosts.
      Getting computes from cell 'cell1': e4563778-94b6-4f1f-8a53-2a19cedd1f34
      Checking host mapping for compute host 'compute': 3599ed61-5ff1-4d20-b429-ef74401f4208
      Creating host mapping for compute host 'compute': 3599ed61-5ff1-4d20-b429-ef74401f4208
      Found 1 unmapped computes in cell: e4563778-94b6-4f1f-8a53-2a19cedd1f34
      
      查看是否添加计算节点
      # nova hypervisor-list 
      

验证操作

  1. 获取凭据以获取对仅限管理员的 CLI 命令的访问权限:admin
    $ . ~/admin-openrc.sh
    
  2. 列出服务组件以验证每个组件的成功启动和注册过程:
    $ openstack compute service list
    
    +----+----------------+------------+----------+---------+-------+----------------------------+
    | ID | Binary         | Host       | Zone     | Status  | State | Updated At                 |
    +----+----------------+------------+----------+---------+-------+----------------------------+
    |  3 | nova-conductor | controller | internal | enabled | up    | 2023-03-21T07:03:45.000000 |
    |  5 | nova-scheduler | controller | internal | enabled | up    | 2023-03-21T07:03:47.000000 |
    |  7 | nova-compute   | compute    | nova     | enabled | up    | 2023-03-21T07:03:44.000000 |
    +----+----------------+------------+----------+---------+-------+----------------------------+
    
  3. 列出标识服务中的 API 终结点,以验证与身份服务:
    $ openstack catalog list
    
    +-----------+-----------+-----------------------------------------+
    | Name      | Type      | Endpoints                               |
    +-----------+-----------+-----------------------------------------+
    | nova      | compute   | RegionOne                               |
    |           |           |   admin: http://controller:8774/v2.1    |
    |           |           | RegionOne                               |
    |           |           |   public: http://controller:8774/v2.1   |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:8774/v2.1 |
    |           |           |                                         |
    | glance    | image     | RegionOne                               |
    |           |           |   internal: http://controller:9292      |
    |           |           | RegionOne                               |
    |           |           |   public: http://controller:9292        |
    |           |           | RegionOne                               |
    |           |           |   admin: http://controller:9292         |
    |           |           |                                         |
    | keystone  | identity  | RegionOne                               |
    |           |           |   internal: http://controller:5000/v3/  |
    |           |           | RegionOne                               |
    |           |           |   admin: http://controller:5000/v3/     |
    |           |           | RegionOne                               |
    |           |           |   public: http://controller:5000/v3/    |
    |           |           |                                         |
    | placement | placement | RegionOne                               |
    |           |           |   public: http://controller:8778        |
    |           |           | RegionOne                               |
    |           |           |   admin: http://controller:8778         |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:8778      |
    |           |           |                                         |
    +-----------+-----------+-----------------------------------------+
    
  4. 在映像服务中列出映像以验证与映像的连接 服务:
    $ openstack image list
    
    +--------------------------------------+--------+--------+
    | ID                                   | Name   | Status |
    +--------------------------------------+--------+--------+
    | a58019ab-7a69-4988-a8df-0fc91f899b9a | cirros | active |
    +--------------------------------------+--------+--------+
    
  5. 检查单元格和放置 API 是否正常工作,以及其他 必要的先决条件已到位:
    # nova-status upgrade check
    
    +--------------------------------+
    | Upgrade Check Results          |
    +--------------------------------+
    | Check: Cells v2                |
    | Result: Success                |
    | Details: None                  |
    +--------------------------------+
    | Check: Placement API           |
    | Result: Success                |
    | Details: None                  |
    +--------------------------------+
    | Check: Ironic Flavor Migration |
    | Result: Success                |
    | Details: None                  |
    +--------------------------------+
    | Check: Cinder API              |
    | Result: Success                |
    | Details: None                  |
    +--------------------------------+
    
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐