点击下方名片,设为星标

回复“1024”获取2TB学习资源!

前面介绍了 Openstack 入门基础环境部署Keystone 、Glance等相关的知识点,今天我将详细的为大家介绍 Openstack 计算服务 Nova相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发分享朋友圈支持一波!!!

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代理。

Nova 系统架构

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

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

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

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

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

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

  • 更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Nova 组件详解

Nova-API

7db146a04a1aacc0a89db0b1accbc85f.pngNova API提供的功能:

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

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

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

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

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

Nova-Conductor

b34c1507c3f790af865fdb0509de495c.pngNova-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的执行返回前不会阻塞其他绿色线程的执行。这样就会提高了操作的并发。

Nova-Scheduler

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

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

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

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

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

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

调度器的调度过程

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

Nova-Compute
Nova-Compute 框架
  • Manager

  • Driver

Driver对接不同的虚拟化平台
  • 1、KVM

  • 2、VMware

  • 3、Xen

  • 4、LXC

  • 5、QEMU


  • 94e24d86a0b768db6219d1f22a812137.png

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

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

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

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

Nova 安装

Nova节点的安装是在Keystone节点成功安装的基础上进行的。Nova节点的安装可以以YUM的方式进行,直接执行命令:

yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler

即可完成Nova的安装。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Nova 配置

Nova 数据库配置

在Nova节点安装完成后,我们接下来要做的就是配置Nova节点的数据库。打开Nova的配置文件/etc/nova/nova.conf,找到database模块,在该模块下添加如下内容:

connection=mysql+pymysql://nova:nova@192.168.136.101/nova

配置完成后如下所示:
731cd8c73352cbe7b94c1cf768d4d9e0.png然后,找到api_database模块,在该模块下添加如下内容:

connection=mysql+pymysql://nova_api:nova_api@192.168.136.101/nova_api

配置完成后如下所示:
7ecb85bf040cc8d2891105dd6a09acd1.png这样,我们的Nova数据库配置就完成了。

Nova数据库初始化

在完成Nova的数据库配置后,我们接下来就需要进行Nova的数据库同步。执行命令:

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova

即可实现nova和nova_api两个数据库的同步,这两条命令执行情况如下所示:
58bebb04c27329452e03673818ad4faa.png注意,在上述命令执行时,可能会出现warning信息,只要是不Error信息,我们不用理会,如果不放心,还可以在命令执行结束后,执行echo $?查看命令执行的结果。

接下来,我们就来验证一下Nova的数据库初始化结果。执行命令:

mysql -h 192.168.136.101 -unova -pnova -e "use nova;show tables;"
mysql -h 192.168.136.101 -unova_api -pnova_api -e "use nova_api;show tables;"

即可查看数据库内是否有初始化后的表,这两条命令执行情况如下所示:
127ab4546012868c4f718796b9745e3e.pngdf4e461958efb414c4fc2cfca3145a1d.png从以上可以看出,我们的nova和nova_api数据库已经有相关内容,这说明我们的数据库初始化成功!

Nova Keystone配置

在上文中,我们介绍了openstack中Nova节点的安装与数据库的初始化操作。今天,我们就来介绍一下Nova的其他配置。

我们打开Nova的配置文件/etc/nova/nova.conf,在该文件中的default模块,加入如下内容:

[DEFAULT]
auth_strategy=keystone

上述内容表示Nova使用keystone进行认证,完成后的配置文件如下所示:
2f2f1cc10b8263b0ad6b1955c2bf8b89.png之后,我们再keystone_authtoken模块下,添加如下内容:

[keystone_authtoken]
auth_uri=http://192.168.136.101:5000
auth_url=http://192.168.136.101:35357
memcached_servers=192.168.136.101:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=nova

上述内容是keystone认证的相关配置,包括IP地址、认证类型、域名称、项目名称、用户名以及密码,完成后的配置文件如下所示:
31f2b52e6b9926b26eb89cb3c6e64b71.png

Nova Rabbitmq 配置

之后,由于nova服务之间使用消息队列进行沟通,所以我们需要设置Rabbitmq。打开Nova的配置文件/etc/nova/nova.conf,在DEFAULT模块下添加如下配置:

rpc_backend=rabbit

如下所示:
ae0cf834f071e9a916f469a9b7e1d2c3.png之后,找到[oslo_messaging_rabbit]模块,在该模块下添加如下配置:

rabbit_host=192.168.136.101
rabbit_port=5672
rabbit_userid=openstack
rabbit_password=openstack

上述配置内容,分别指定了rabbitmq的IP地址、端口号、用户名和密码。
完成后的配置文件如下所示:
0335580cf3b204d59f143a131a855c2e.png71488185dd6ff59623e7cb7bc5051c7b.png这样,我们的Nova的rabbitmq设置就完成了。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Nova自身配置

最后,我们还要设置一下Nova的一些自身功能。我们搜索Nova的以下参数,并将其修改为如下配置:

enabled_apis=osapi_compute,metadata
use_neutron=true
firewall_driver=nova.virt.firewall.NoopFirewallDriver
vncserver_listen=192.168.136.101
vncserver_proxyclient_address=192.168.136.101
api_servers=http://192.168.136.101:9292
lock_path=/var/lib/nova/tmp

上述配置内容,分别表示设置元数据启用的API,设置Neutron的网络服务支持,关闭防火墙,设置VNC代理,配置Glance镜像服务API,以及配置锁路径等等。
完成后的配置文件如下所示:
9aaa6fc74fa2b15431d6a7e2c5ddf2b0.pngfa7bb00c21f91a6ff10894bc7723ea51.png50a07d40dafa022e2f6219fc501ed194.pngc256217b1d73e4bf2cf27d75f3fe98b0.png1d5b036963fea07c43b57cc21e516550.pngbc8bb52a9d4532afc0ad08035d99f93c.png这样,Nova自身的配置就完成了。

Nova配置概览

最后,我们执行命令:

grep "^[a-Z]" /etc/nova/nova.conf

可以查看当前Nova的配置文件中所有生效的命令,该命令执行结果如下所示:
488804428592b3ca28f526f4aecdc73d.png

Nova 服务启动

在上文中,我们完成了Nova整体的配置文件,接下来,我们就可以启动Nova服务了,Nova服务的启动,需要执行以下命令:

systemctl start openstack-nova-api
systemctl start openstack-nova-consoleauth
systemctl start openstack-nova-scheduler
systemctl start openstack-nova-conductor
systemctl start openstack-nova-novncproxy

这些命令,分别表示启动Nova各项服务的启动。

Nova服务创建

在Nova服务启动后,我们还要在Keystone上注册Nova服务。首先,执行命令:

source admin-openstack.sh

给我们接下来的操作赋予openstacl的token权限,之后,我们执行命令:

openstack service create --name nova --description "openstack nova" compute

来创建Nova的Service服务,该命令执行结果如下所示:
0f65d63ca93173fc3e90be71e9c62ac6.png之后,我们需要创建Nova Compute服务的API端点,我们需要创建public、internal和admin的三种端点,分别执行命令:

openstack endpoint create --region RegionOne compute public http://192.168.136.101:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne compute internal http://192.168.136.101:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne compute admin http://192.168.136.101:8774/v2.1/%\(tenant_id\)s

这些命令执行结果分别如下所示:
c694a0338f86f5f95f55677c66584ff3.pngc5ace57339c07ccea90674c7960acd9e.png2f914111b59874460c187a688fd7ccab.png最后,我们执行命令:

openstack host list

来检查控制节点的配置情况,结果如下所示:
6e423ebb7141e1aa4ffbb2c87338bab6.png从上图可以看出,我们的Nova服务注册成功!

以上就是我们关于 Nova 服务的原理与安装、配置的介绍。

参考文章:https://blog.csdn.net/weixin_40228200/

article/details/125126937  https://blog.csdn.net

/weixin_40228200/article/details/125126716

读者专属技术群

构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。

扫码加我好友,拉你进群

143607099e351cb902b5f6b194cb738e.jpeg

推荐阅读 点击标题可跳转

淘宝、京东重大调整!网友:已经被逼到绝路了

一个比 Navicat 更强大、更牛逼的客户端工具

打败Notion的年度笔记软件!到底还有多少牛X功能

扛不住了?暴跌 36%!这是要凉啊……

被约谈!两天走人。。。被裁是一种什么体验?

别总写代码!这 130 个网站比涨工资都重要!

把电脑分辨率改成500%的犟种们,解决办法来了

c4a9622db15036a52836fe628cbe82c9.png

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点在看支持我们吧!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐