nova
一.计算服务nova
1.概述
nova:计算服务,是openstack最核心的服务之一,负责维护和管理云环境的计算资源
1.openstack原生架构
nova能提供虚拟化功能/资源
2.核心服务nova
nova是没有虚拟化的能力,靠的是自己虚拟化驱动,通过驱动和底层虚拟化技术,进行交互和调用操作
3.需要keystone、glance、neutron等服务支持,可与这些服务集成
2.nova系统架构
- nova架构,需要和其他组件集成
DB | 用于数据存储的sql数据库 |
---|---|
API | 用于接受http服务,转换命令(接受和响应) |
scheduler | 调度器,用于决定哪台计算节点承载计算实例的nova调度器 |
network | 管理IP转发,网桥或虚拟局域网的nova网络组件 |
compute | 管理虚拟机管理器与虚拟机之间通信的nova组件(负责执行) |
conductor | 分配协调作用,处理对象转换 |
二.组件介绍
1.API
API:(公共交互的入口),客户访问nova的http接口,它又nova-api服务实现,api服务接受和响应
- 来自最终用户的计算api请求,nova-api服务接受和响应来自最终用户的计算api请求,提供了集中的可用查询所有api的端点
- 所有请求都是首先由nova-api处理,api提供标准调用服务,便于和第三方系统集成,最终用户不会改送RESTFUL API,只需要和nova进行交互
总结:
- 1.nova可以为op内部提供标准化服务
- 2.同时也会为op外部相关的一些组件提供标准化服务
- 3.只要和虚拟机生命周期相关的操作,nova-api都可以响应
nova-api对接收到HTTP API请求做下处理:
-
1).检查客户端传入的参数是否合法有效
-
2).调用nova其他服务来处理客户端HTTP请求
-
3).格式化nova其他子服务返回结果并返回客户端
-
nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层
2.scheduler调度器
scheduler:调度器,负责决定实例创建在哪个节点上(根据规则和调度算法)
- 规则:考虑内存使用率,cpu负载率、cpu架构、多种因素,根据算法
- 确定在哪一台服务器上,从可用资源池中选择合适的计算节点来创建新的虚拟机实例
- 创建实例时,会提出资源需求,如cpu、内存、磁盘,openstack将这些需求定义在实例类型中
- 用户只需指定使用哪个实例类型
1)调度器类型
①随机调度器
- 从所有正常运行的nova-compute服务节点中随机选择
②过滤器调度器
- 根据指定的过滤条件及权重选择最佳的节点
③缓存调度器
- 可看作随机调度器,在随机的基础上将主机资源缓存在本地内存中
- 通过后台的定时任务,从数据库中获取最新的主机资源信息
2)过滤调度器调度过程
两个阶段
通过指定的过滤器选择满足条件的计算节点
可使用多个过滤器依次进行筛选
过滤后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实列
(选择最合适/最优的节点)
3)过滤器
当过滤器需要执行调度器操作,会让过滤器对计算节点进行判断
- /etc/nova/nova.conf配置文件中
scheduler_available_filters可用于配置可用过滤器,
默认是所有nova自带的过滤器,可用于过滤作用
另外一个还有一个选项scheduler_default_filter用于指定nava_scheduler服务真正使用的过滤器
4)过滤调度器按照列表中的顺序依次过滤
-
再审过滤器:用于过滤掉之前已经调度过的节点
-
可用区域过滤器:为了提高容灾性并提供隔离服务,可将计算节点划分到不同的可用区域中
-
内存过滤器:根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤,为了提高系统资源利用率,openstack在计算节点的可用内存时允许超过实际内存大小
-
硬盘调度器:磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉,磁盘同样允许超量
-
核心过滤器:根据可用cpu核心来调度虚拟机创建,将不能满足实例类型vcpu需求的计算节点顾虑掉,vcpu也允许超量,超量值是通过修改nova.conf中的cpu_allocation_ratio参数控制,默认值是16
-
计算过滤器:保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器
-
服务器组反亲和性过滤器:要求尽量将实例分散部署到不同节点上
-
服务器组亲和性过滤器:尽量将实例部署到同一个计算节点上
-
权重:nova-scheduler服务可用使用多个过滤器依次进行过滤,过滤之后,节点再通过计算权重选出能够部署实例的节点
三.compute
1.概述
- 1.在计算节点上运行,负载执行具体的与实例生命周期/管理实例相关的工作
- 2.报告节点状态(用于写入数据库,保证scheduler读取数据库,数据库信息的实时性、ceilmetor ,监控和管理openstack实例资源并汇报给用户/openstack本身/运维人员
通过Driver(驱动)架构支持多种hypervisor虚拟机管理器
为hypervispor定义统一的接口
只需要实现这些接口,可driver(驱动)形式即插即用到openstack系统中
2.功能
- 1.定期向openstack报告计算节点的状态
计算节点的资源使用情况(scheduler) - 2.实现虚拟机实例生命周期的管理
openstcak对虚拟机实列最主要的操作都是通过nova-compute实现
为实例创建为例来说明nova-compute实现过程
- 1.为实例准备资源
- 2.创建实例的镜像文件
- 3.创建实例的xml定义文件
四.conductor
- 由nova-conductor:模块实现
- compute服务与数据库之间交互的中间,避免了直接访问由nova-compute创建对数据库
有助于提高数据库的访问性能
可创建多个线程使用远程调用
可增加nova-conductor数量来应付日益增长的计算节点对数据库的访问量
五.placementAPI
1)概述
placementAPI:将所有计算节点资源情况累加起来,系统中还存在外部资源
- 由外部系统提供(统计外部资源),管理元需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是placementAPI
- 被消费的资源类型是按类进行跟踪的,如计算节点类、贡献存储池类、IP地址类等
六.虚拟机实例化流程
- 用户可通过多种方式访问虚拟机的控制台
nova-novnproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理支持浏览器novnc客户端 - nova-consoleauth守护进程:负载对访问虚拟机控制台提供用户令牌认证
这个服务必须与控制台代理程序共同使用
1.控制台接口
- 1.首先用户执行nova client提供用于创建虚拟机命令
- 2.nova-api服务监听来自nova client的http请求,将请求转换为AMQP消息之后加入消息队列
- 3.通过队列调用nova-conductor服务
- 4.nova-conductor服务从消息队列中接受到虚拟机实列化消息,准备
- 5.nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,nova-scheduler会读取数据库内容
- 6.nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息,通过消息队列来通知
nova-compute服务实现虚拟机的创建
七.nova部署架构
- 经典模式:单节点(单中心节点)
- nova负载均衡部署模式:多节点(多个中心节点)
1)cell架构
-
openstack nova集群的规模变大,数据库和消息服务就会出现瓶颈
-
nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库的消息中间的复杂度,引入cell概念
-
可看成单元,为支持更大规模的部署,
-
openstacak较大的nova集群分成小的单元
-
每个单元都又自己的数据库
单cell架构部署
创建虚拟机---->任务(ID用于定位)
- 1.nova-api 接收、响应请求
- 2.交给condutor处理/协调
if conductor------->scheduler----->最适合创建虚拟机的节点
if scheduler 调度失败,
then 将调度失败的信息,存放在cell0中
nova-api会读取cell0数据库,获取到失败的信息/原因,返回给客户端
elif scheduler 调度成功 a节点适合,
then conductor 就会将这个任务交割cell1处理(rabbitmq-cell接受、响应)
(cell1管理的范围,不仅仅只有一个节点 ABCD ) - 3.rabbitmq-cell ---->conductor-cell----->交给A节点上的compute进行具体创建
---->compute 汇报给cell1数据库------->响应给condutor-cell—>rabbitmq-cell–>nova的conductor - 4.nova-conductor 接受到cell的返回之后,保存在api数据库中(保存实例创建成功的信息)
- 5.nova-api组件,会读取api数据库,返回/响应给客户端(若想要获取具体信息,则会访问cell数据库)
多cell架构
是为了给rabbitmq和mariadb进行分压, 加入condutor-cell组件
mariadb---->全部数据变成只保存的全局信息
rabbitmq---->全部交互传递,一些具体执行的任务,直接交给rabbitmq-cell
condutor---->全部任务的协调分配工作---->把具体任务分配给cell(rabbitmq–cell)
八.OpenStack-NOVA组件部署
配置接:placement部署
- Nova 计算服务为 OpenStack 云环境提供了计算能力,相关环境需要在控制节点和计算节点分别进行部署。
控制节点ct:VM:192.168.153.10 NAT:192.168.133.70
nova-api(nova主服务)
nova-scheduler(nova调度服务)
nova-conductor(nova数据库服务,提供数据库访问)
nova-novncproxy(nova的vnc服务,提供实例的控制台)
计算节点c1:VM:192.168.153.20 NAT:192.168.133.80
计算节点c2:VM:192.168.153.30 NAT:192.168.133.90
nova-compute(nova计算服务)
1.在CT控制节点上配置 Nova 服务
CT VM:192.168.153.10 NAT:192.168.133.70
1)创建Nova数据库实例和执行授权
mysql -uroot -p
CREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
flush privileges;
exit
2)创建用户、修改配置文件
创建OpenStack的nova用户
#创建nova用户;验证openstack user list
openstack user create --domain default --password NOVA_PASS nova
#向nova用户添加admin角色;验证openstack role assignment list验证,还要查role、user、project列表看id号
openstack role add --project service --user nova admin
#创建nova服务实体;验证openstack service list
openstack service create --name nova --description "OpenStack Compute" compute
3)创建 compute API 服务端点
openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1
4)安装软件包
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
5)修改配置文件
cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
6)添加/etc/nova/nova.conf配置
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.10
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
7)初始化nova数据库,生成相关表结构
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
8)验证 nova cell0 和 cell1 是否正确注册
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
9)启动 Nova 服务并配置开机启动
systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
10)检查nova服务是否启动
netstat -tnlup|egrep '8774|8775'
curl http://ct:8774
2.在C1、C2计算节点上配置 Nova 服务
c1,VM:192.168.153.20 NAT:192.168.133.80
c2,VM:192.168.153.30 NAT:192.168.133.90
- 两个节点相同操作
1)安装软件包并修改配置文件
yum -y install openstack-nova-compute
cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
注意:下列命令中第三行需要修改当前节点的IP地址(C1:192.168.153.20 C2:192.168.153.30)
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.153.20
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://ct:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu
查看传参后的配置文件:
2)判断计算机是否支持虚拟机硬件加速
- 再次检查一下,以防配置失败
egrep -c '(vmx|svm)' /proc/cpuinfo
上述命令返回值不是 0,则计算节点支持硬件加速,不需要进行下面的配置。
上述命令返回值是 0,则计算节点不支持硬件加速,并且必须配置 libvirt 为使用
QEMU 而不是 KVM,需要编辑/etc/nova/nova.conf 文件中的[libvirt]部分
vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu
3)开启 Nova 计算服务并配置开机启动
systemctl start libvirtd.service openstack-nova-compute.service
systemctl enable libvirtd.service openstack-nova-compute.service
3.CT控制节点后续操作
CT VM:192.168.153.10 NAT:192.168.133.70
1)添加计算节点到 cell 数据库
openstack compute service list --service nova-compute
2)发现计算节点
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
以后添加新的计算节点时,必须在控制器节点上运行 su -s /bin/sh -c “nova-manage cell_v2 discover_hosts --verbose” nova 以注册这些新的计算节点。
3)设置适当的发现时间间隔(可选操作)
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
systemctl restart openstack-nova-api.service
4)验证计算服务
- 列出服务组件以验证每个进程的成功启动和注册情况
openstack compute service list
- 列出身份服务中的API端点以验证与身份服务的连接
openstack catalog list
- 列出图像服务中的图像以验证与图像服务的连接性:
openstack image list
5)检查Cells和placement API是否正常运行
nova-status upgrade check
总结
nova:负责维护和管理云环境的计算资源
1.nova可以为op内部提供标准化服务
2.同时也会为op外部相关的一些组件提供标准化服务
3.只要和虚拟机生命周期相关的操作,nova-api都可以响应
nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层
Nova分为控制节点、计算节点
Nova组件核心功能是调度资源,在配置文件中需要体现的部分:指向认证节点位置(URL、ENDPOINT)、调用服务、注册、提供支持等,配置文件中的所有配置参数基本都是围绕此范围(对实例生命周期管理)进行设置