1 2 3 4 5 6 7 作者:李晓辉 联系方式: 微信:Lxh_Chat 邮箱:939958092@qq.com
前言 在云计算环境中,计算资源的高效管理和调度是确保虚拟机快速部署和稳定运行的关键。OpenStack作为一个强大的开源云平台,提供了灵活的资源管理和高效的虚拟化能力。而Nova服务作为OpenStack的核心组件之一,负责管理虚拟机的生命周期,包括创建、启动、停止和删除等操作。本文将详细介绍如何在OpenStack控制节点上安装和配置Nova服务,帮助你顺利搭建一个功能完善的云平台。
Nova服务概述 Nova的作用 Nova服务是OpenStack中的计算服务,它在OpenStack架构中扮演着至关重要的角色。以下是Nova的主要功能:
虚拟机管理 :Nova负责管理虚拟机的生命周期,包括创建、启动、停止、删除等操作。它提供了RESTful API接口,供用户和管理员管理虚拟机实例。
资源调度 :Nova与Placement服务协作,根据资源情况选择最适合运行虚拟机的计算节点。调度器根据资源信息,选择合适的节点来部署虚拟机。
计算资源管理 :Nova管理计算节点上的资源,如CPU、内存、磁盘等。它确保计算节点的资源被合理分配和使用。
Nova的架构 Nova服务由以下几个主要组件构成:
nova-api :这是Nova服务的核心组件,提供RESTful API接口,供用户和管理员管理虚拟机实例。
nova-scheduler :调度器组件,负责根据资源情况选择最适合运行虚拟机的计算节点。
nova-conductor :协调组件,负责处理与数据库的交互,确保多个Nova服务实例之间的数据一致性。
nova-compute :计算服务组件,运行在每个计算节点上,负责管理虚拟机的生命周期。
数据库 :Nova使用关系型数据库(如MariaDB)存储虚拟机实例和计算资源的信息。
配置文件 :Nova的主要配置文件是nova.conf
,其中包含了数据库连接信息、身份认证配置、消息队列配置等。
工作原理 Nova的工作原理可以概括为以下几个步骤:
API请求处理 :用户通过Nova API发送请求,如创建虚拟机、查询虚拟机状态等。nova-api
组件接收这些请求,并将其转发给相应的服务组件。
调度决策 :当用户请求创建虚拟机时,nova-scheduler
组件根据Placement服务提供的资源信息,选择最适合运行虚拟机的计算节点。
资源分配 :nova-conductor
组件与数据库交互,确保资源分配信息被正确记录。
虚拟机管理 :nova-compute
组件在选定的计算节点上创建、启动、停止或删除虚拟机。
资源释放 :当虚拟机被删除时,Nova服务释放相应的资源,并更新资源分配信息。
通过以上机制,Nova服务确保了虚拟机的高效管理和资源的合理利用。接下来我将详细介绍如何在OpenStack控制节点上安装和配置Nova服务,以确保你的OpenStack环境能够高效地管理虚拟机实例。
需要注意,此章节是在控制节点完成的
这个部分将描述如何在控制节点上安装和配置 Compute 的API服务
准备nova数据库用户和权限 创建Nova数据库和用户,并分配权限,以便Nova服务可以访问数据库。
1 mysql -u root -pLiXiaohui
1 2 3 CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0;
1 2 3 4 5 6 7 GRANT ALL PRIVILEGES ON nova_api.* TO 'nova' @'localhost' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova' @'%' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON nova.* TO 'nova' @'localhost' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON nova.* TO 'nova' @'%' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova' @'localhost' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova' @'%' IDENTIFIED BY 'LiXiaohui' ; exit
创建nova服务用户和角色 加载管理员环境变量文件,以便使用OpenStack命令行工具
创建Nova用户并添加为service项目的管理员。
1 2 3 4 5 6 7 8 9 10 11 [root@controller ~]# openstack user create --domain default --password LiXiaohui nova +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 0f41bea70add4b9d97c3c91eaf7d6e7b | | name | nova | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
1 [root@controller ~]# openstack role add --project service --user nova admin
创建Nova服务和Endpoint 创建Nova服务 1 2 3 4 5 6 7 8 9 10 [root@controller ~]# openstack service create --name nova --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | 7e6cb73bc6a1465282cce7d9af3d37a1 | | name | nova | | type | compute | +-------------+----------------------------------+
创建nova endpoint 创建公共、内部和管理三个Endpoint
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 32 33 34 35 36 37 38 39 40 41 42 [root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 44b7bb17a1a24455971de09c3a1ee2e9 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 7e6cb73bc6a1465282cce7d9af3d37a1 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 2fd4074deb8d49738d0060ede3164c9d | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 7e6cb73bc6a1465282cce7d9af3d37a1 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 30f44d023bcf44e09874f4faafcb1f1b | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 7e6cb73bc6a1465282cce7d9af3d37a1 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+----------------------------------+
安装配置nova组件 安装Nova组件 安装Nova服务所需的软件包
1 yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
准备配置文件 准备配置文件/etc/nova/nova.conf
准备配置文件/etc/nova/nova.conf,该文件包含了Nova服务的全局配置信息,包括数据库连接、身份认证、消息队列、VNC设置等
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 32 33 34 35 36 37 38 crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller:5672/ crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.8.10 crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:LiXiaohui@controller/nova_api crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:LiXiaohui@controller/nova crudini --set /etc/nova/nova.conf api auth_strategy keystone crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller:5000 crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000 crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000 crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken project_name service crudini --set /etc/nova/nova.conf keystone_authtoken username nova crudini --set /etc/nova/nova.conf keystone_authtoken password LiXiaohui crudini --set /etc/nova/nova.conf service_user send_service_user_token true crudini --set /etc/nova/nova.conf service_user auth_url http://controller:5000/identity crudini --set /etc/nova/nova.conf service_user auth_strategy keystone crudini --set /etc/nova/nova.conf service_user auth_type password crudini --set /etc/nova/nova.conf service_user project_domain_name Default crudini --set /etc/nova/nova.conf service_user user_domain_name Default crudini --set /etc/nova/nova.conf service_user project_name service crudini --set /etc/nova/nova.conf service_user username nova crudini --set /etc/nova/nova.conf service_user password LiXiaohui crudini --set /etc/nova/nova.conf vnc enabled true crudini --set /etc/nova/nova.conf vnc server_listen ' $my_ip' crudini --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip' crudini --set /etc/nova/nova.conf glance api_servers http://controller:9292 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp crudini --set /etc/nova/nova.conf placement region_name RegionOne crudini --set /etc/nova/nova.conf placement project_domain_name Default crudini --set /etc/nova/nova.conf placement project_name service crudini --set /etc/nova/nova.conf placement auth_type password crudini --set /etc/nova/nova.conf placement user_domain_name Default crudini --set /etc/nova/nova.conf placement auth_url http://controller:5000/v3 crudini --set /etc/nova/nova.conf placement username placement crudini --set /etc/nova/nova.conf placement password LiXiaohui
或者
enabled_apis
:指定Nova服务启用的API接口。这里启用了计算API(osapi_compute
)和元数据API(metadata
)。
transport_url
:指定消息队列的连接字符串,Nova服务通过它与RabbitMQ通信。这里使用的是RabbitMQ,用户名为openstack
,密码为LiXiaohui
,服务运行在controller
主机的5672端口。
my_ip
:指定Nova服务绑定的IP地址,用于监听API请求。这里设置为192.168.8.10
。
1 2 3 4 5 [DEFAULT] ... enabled_apis = osapi_compute,metadatatransport_url = rabbit://openstack:LiXiaohui@controller:5672 /my_ip = 192.168 .8.10
[api_database] 部分 connection
:指定Nova API数据库的连接字符串。这里使用的是MySQL数据库,用户名为nova
,密码为LiXiaohui
,数据库名称为nova_api
,服务运行在controller
主机上。
[database] 部分 connection
:指定Nova主数据库的连接字符串。这里使用的是MySQL数据库,用户名为nova
,密码为LiXiaohui
,数据库名称为nova
,服务运行在controller
主机上。
1 2 3 4 5 6 7 [api_database] ... connection = mysql+pymysql://nova:LiXiaohui@controller/nova_api[database] ... connection = mysql+pymysql://nova:LiXiaohui@controller/nova
auth_strategy
:指定Nova API使用的认证策略。这里设置为keystone
,表示使用Keystone服务进行身份认证。1 2 3 [api] ... auth_strategy = keystone
这部分配置了Nova服务如何与Keystone服务进行交互,以进行身份认证和授权
1 2 3 4 5 6 7 8 9 10 11 [keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:5000 /memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = novapassword = LiXiaohui
这部分配置了Nova服务用户的信息,用于与Keystone交互
1 2 3 4 5 6 7 8 9 10 [service_user] send_service_user_token = true auth_url = http://controller:5000 /identityauth_strategy = keystoneauth_type = passwordproject_domain_name = Defaultproject_name = serviceuser_domain_name = Defaultusername = novapassword = LiXiaohui
enabled
:启用VNC服务,允许用户通过VNC访问虚拟机。
server_listen
:指定VNC服务监听的IP地址,这里使用$my_ip
变量。
server_proxyclient_address
:指定VNC代理客户端的IP地址,这里使用$my_ip
变量。
1 2 3 4 [vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip
这部分配置了Nova服务如何与Glance服务进行交互
1 2 3 [glance] ... api_servers = http://controller:9292
这部分配置了Nova服务的并发设置,lock_path指定锁文件的存储路径,用于确保多个Nova服务实例之间的数据一致性。
1 2 3 [oslo_concurrency] ... lock_path = /var/lib/nova/tmp
这部分配置了Nova服务如何与Placement服务进行交互
1 2 3 4 5 6 7 8 9 10 [placement] ... region_name = RegionOneproject_domain_name = Defaultproject_name = serviceauth_type = passworduser_domain_name = Defaultauth_url = http://controller:5000 /v3username = placementpassword = LiXiaohui
准备Nova相关数据库 同步Nova的API数据库,创建所有必要的表和初始数据结构。
1 su -s /bin/sh -c "nova-manage api_db sync" nova
注册cell0数据库 将cell0映射到Nova的数据库,cell0是Nova的默认单元格,用于管理全局资源,nova-manage cell_v2 map_cell0:此命令将cell0单元格映射到Nova的数据库,确保全局资源管理的正常运行
1 su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
创建cell1 创建一个名为cell1的单元格,用于管理计算节点的资源
1 su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
填充nova数据库 同步Nova的主数据库,确保所有表和数据结构与服务版本一致
1 su -s /bin/sh -c "nova-manage db sync" nova
验证cell0和cell1注册正常 验证cell0和cell1是否成功注册到Nova服务中
1 2 3 4 5 6 7 8 [root@controller ~]# 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:****@controller/nova_cell0 | False | | cell1 | a906846b-650e-42c1-8d9e-dcf5cbec6a6e | rabbit://openstack:****@controller:5672/ | mysql+pymysql://nova:****@controller/nova | False | +-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
启动nova服务 1 2 3 4 5 systemctl enable --now \ openstack-nova-api.service \ openstack-nova-scheduler.service \ openstack-nova-conductor.service \ openstack-nova-novncproxy.service
启用并启动Nova服务的相关组件,确保服务能够正常运行
openstack-nova-api.service
:Nova API服务,处理用户请求。
openstack-nova-scheduler.service
:Nova调度器服务,选择最适合运行虚拟机的计算节点。
openstack-nova-conductor.service
:Nova协调服务,处理与数据库的交互。
openstack-nova-novncproxy.service
:Nova VNC代理服务,提供VNC访问。