Nova虚拟机管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nova虚拟机管理相关的知识,希望对你有一定的参考价值。

参考技术A 从主线上看,只涉及Nova-api,nova-Scheduler和nova-compute等3个服务

OpenStack——Nova计算服务

Nova简介

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

Nova系统架构

架构组成                                特性
DB                         用于数据存储的sql数据库
API                        用于接收HTTP请求、转换命令、通过消息队列(相对于nova组件本身对内)或HTTP(对外)与其他组件通信的nova组件。
Scheduler             用于决定哪台计算节点承载计算实例的nova调度器
Network                管理IP转发、网桥或虚拟局域网的nova网络组件
Compute               管理虚拟机管理器与虚拟机之间通信的nova计算组件
Conductor             处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换

Nova组件

Nova–API

Nova–Scheduler调度器

调度器的类型

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

工作流程:

  1. scheduler接收到任务的时候
  2. 先通过DB数据库中查询后端计算节点的资源信息,通过指定/未指定选择计算节点
  3. 若已指定host,直接发请求至制定compute node
  4. 若未指定host,需要通过DB数据库(数据库的信息可以和后端资源信息可以接近实时同步)获取后端资源信息,需要经过过滤和权重的计算打分,确定最适合创建实例的节点

调度器调度过程

  • 通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤。
  • 对过滤之后的主机列表进行权重计算并排序,选择最他的计算节点来创建虚拟机实例。

Compute

主要功能

  • Nova-compute在计算节点上运行,负责管理节点上的实例。通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的主机上取决于调度算法。OpenStack对实例的操作,最后都是提交给Nova-compute来完成。
  •  Nova-compute可分为两类,一类是定向openstack报告计算节点的状态,另一类是实现实例生命周期的管理。

工作过程

Conductor 

  •  由nova-conductor模块实现,旨在为数据库的访问提供一层安全保障。Nova-conductor作为nova-compute服务与数据库之间交互的中介,避免了直接访问由nova-compute服务创建对接数据库。
  •  Nova-compute访问数据库的全部操作都改到novaconductor中,nova-conductor作为对数据库操作的一个代理,而且nova-conductor是部署在控制节点上的。
  •  Nova-conductor有助于提高数据库的访问性能,nova-compute可以创建多个线程使用远程过程调用(RPC)访问nova-conductor。
  •  在一个大规模的openstack部署环境里,管理员可以通过增加nova-conductor的数量来应付日益增长的计算节点对数据库的访问量

PlacementAPI

  • 以前对资源的管理全部由计算节点承担,在统计资源使用情况时,只是简单的将所有计算节点的资源情况累加起来,但是系统中还存在外部资源,这些资源由外部系统提供。如ceph、nfs等提供的存储资源等。面对多种多样的资源提供者,管理员需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是PlacementAPI。
  •  PlacementAPl由nova-placement-api服务来实现,旨在追踪记录资源提供者的目录和资源使用情况。
  •  被消费的资源类型是按类进行跟踪的。如计算节点类、共享存储池类、IP地址类等。

Nova部署架构

Nova的Cell架构

  • 当openstack nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。
  •  Cell可译为单元。为支持更大规模的部署,openstack较大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中,Keystone、Neutron、Cinder、Glance等资源是共享的。
  •  API节点上的数据库
  •  nova_api数据库中存放全局信息,这些全局数据表是从nova库迁过来的,如flavor (实例模型) 、 instance groups (实例组)、quota (配额)
  •  nova_cello数据库的模式与nova一样,主要用途就是当实例调度失败时,实例的信息不属于任何一个Cell,因而存放到nova_cell0数据库中。

单cell架构

nova-api接收请求给到nova-conductor---->nova-conductor把任务请求信息和概览信息放入API数据库中,同时对接scheduler确定计算节点 ,创建资源-----找到对应的cell单元处理任务
conductor借由消息队列将创建虚拟机的任务交给cell数据库中的rabbitmq----找到cell内部的conductor组件—conductor调度具体的请求任务交给compute处理–compute处理好了之后任务返回conductor并把信息维护在cell数据库中—cell处理完成之后通过cell的rabbitma传给nova的消息队列-----nova的消息队列传给conductor—>nova-conductor会完善cell处理的结果“任务A id=1交给cell_01单元处理”并记录到API数据库,同时通知API任务完成和结果内容
API想要获取数据之后从API的数据库获取,完整信息在nova接收之后会做一个简单的格式化管理并返回给客户端

举例:创建虚拟机

 部署Nova计算服务

控制节点ct:
nova-api(nova主服务)
nova-scheduler(nova调度服务)
nova-conductor(nova数据库服务,提供数据库访问)
nova-novncproxy(nova的vnc服务,提供实例的控制台)
 计算节点c1、c2:
nova-compute(nova计算服务)

ct节点Nova服务配置

#创建nova数据库,并执行授权操作
mysql -uroot -p
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
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';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
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;

#管理Nova用户及服务
创建nova用户
openstack user create --domain default --password NOVA_PASS nova
openstack role add --project service --user nova admin
创建nova服务
openstack service create --name nova --description "OpenStack Compute" compute
给Nova服务关联endpoint(端点)
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
安装nova组件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

#修改nova配置文件(nova.conf)
cp -a /etc/nova/nova.conf,.bak
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
#修改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.220.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

#初始化数据库
su -s /bin/sh -c "nova-manage api_db sync" nova

#注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组
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数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
su -s /bin/sh -c "nova-manage db sync" nova

#可使用以下命令验证cell0和cell1是否注册成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

#启动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服务端口
netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

c1、c2节点配置Nova服务

#安装nova-compute组件
yum -y install openstack-nova-compute

#修改配置文件
cp -a /etc/nova/nova.conf,.bak
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /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 transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.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://192.168.100.10: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

#开启服务
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service

controller节点操作(ct)

#查看compute节点是否注册到controller上,通过消息队列;需要在controller节点执行
openstack compute service list --service nova-compute	

#扫描当前openstack中有哪些计算节点可用,发现后会把计算节点创建到cell中,后面就可以在cell中创建虚拟机;相当于openstack内部对计算节点进行分组,把计算节点分配到不同的cell中 
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

#默认每次添加个计算节点,在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端nova的主配置文件:
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300	
systemctl restart openstack-nova-api.service

#验证计算节点服务
openstack compute service list	#检查 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功
openstack catalog list			#查看各个组件的 api 是否正常
openstack image list			#查看是否能够拿到镜像
nova-status upgrade check		#查看cell的api和placement的api是否正常,只要其中一个有误,后期无法创建虚拟机

以上是关于Nova虚拟机管理的主要内容,如果未能解决你的问题,请参考以下文章

Nova服务运维

Nova

云计算管理平台之OpenStack启动虚拟机实例

ironic简介

Openstack之Nova创建虚机流程分析

Openstack之Nova分析