centos7.9上部署openstack(train版)——5. Compute--nova
概述
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请求做以下处理:
- 检查客户端传入的参数是否合法有效
- 调用nova其他服务来处理客户端HTTP请求
- 格式化nova其他子服务返回结果并返回给客户端
-
Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。
Scheduler
-
Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu构架(intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。
-
创建虚拟机实例时,用户会提出资源需求,如cpu.内存、磁盘各需要多少。Openstack将这些需求定义在实例类型中,用户只需指定使用哪个实例类型即可
-
Nova调度器的类型:
- 随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。
- 过滤器调度器(filter scheduler) :根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器
- 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。
Controller安装与配置
- 准备 在安装和配置nova服务之前,必须创建 数据库、服务凭据和 API 终结点
- 要创建数据库,请完成以下步骤:
- 使用数据库访问客户端连接到数据库服务器 作为用户: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'; - 退出数据库访问客户端。
- 使用数据库访问客户端连接到数据库服务器 作为用户:root
- 获取凭据以获取对仅限管理员的 CLI 命令的访问权限:admin
$ . ~/admin-openrc.sh - 创建nova服务凭据:
- 创建用户: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 | +---------------------+----------------------------------+ - 把 admin 角色添加到 service 项目和 nove 用户
$ openstack role add --project service --user nova admin - 创建服务实体:nova
$ openstack service create --name nova --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | a53993e24f95423b9ed6ba8e41760957 | | name | nova | | type | compute | +-------------+----------------------------------+
- 创建用户:nova
- 创建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 | +--------------+----------------------------------+
- 要创建数据库,请完成以下步骤:
- 安装和配置组件
- 安装软件包:
# yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler - 编辑文件并完成以下操作:
/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] - 填充数据库:nova-api
# su -s /bin/sh -c "nova-manage api_db sync" nova - 注册数据库:cell0
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova - 创建单元格:cell1
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova - 填充 nova 数据库:
这里遇到两个警告信息,不是很严重,后续版本会修复,再重新执行一下就不会报了# su -s /bin/sh -c "nova-manage db sync" nova - 验证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 | +-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
- 安装软件包:
- 完成安装
- 启动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
- 启动nova服务并将其配置为在系统引导时启动:
Compute安装与配置
- 安装和配置组件
- 安装软件包:
# yum install -y openstack-nova-compute - 编辑文件并完成以下操作:
/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]
- 安装软件包:
- 完成安装
- 确定计算节点是否支持硬件加速 虚拟机:
$ egrep -c '(vmx|svm)' /proc/cpuinfo- 如果此命令返回的值为0
编辑[libvirt]/etc/nova/nova.conf[libvirt] # ... virt_type = qemu
- 如果此命令返回的值为0
- 启动计算服务(包括其依赖项)并将其配置为 系统引导时自动启动:
# systemctl enable libvirtd.service openstack-nova-compute.service # systemctl restart libvirtd.service openstack-nova-compute.service
- 确定计算节点是否支持硬件加速 虚拟机:
- 将计算节点添加到单元数据库
- 获取管理员凭据以启用仅限管理员的 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 | +----+--------------+---------+------+---------+-------+----------------------------+ - 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
- 获取管理员凭据以启用仅限管理员的 CLI 命令,然后确认 数据库中有计算主机:
验证操作
- 获取凭据以获取对仅限管理员的 CLI 命令的访问权限:admin
$ . ~/admin-openrc.sh - 列出服务组件以验证每个组件的成功启动和注册过程:
$ 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 | +----+----------------+------------+----------+---------+-------+----------------------------+ - 列出标识服务中的 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 | | | | | +-----------+-----------+-----------------------------------------+ - 在映像服务中列出映像以验证与映像的连接 服务:
$ openstack image list +--------------------------------------+--------+--------+ | ID | Name | Status | +--------------------------------------+--------+--------+ | a58019ab-7a69-4988-a8df-0fc91f899b9a | cirros | active | +--------------------------------------+--------+--------+ - 检查单元格和放置 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 | +--------------------------------+
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)