一.计算服务nova

1.1 概述
nova:计算服务,是openstack最核心的服务之一,负责维护和管理云环境的计算资源
  1. openstack原生架构
    nova能提供虚拟化功能/资源。
  2. 核心服务nova
    nova是没有虚拟化的能力,靠的是自己虚拟化驱动,通过驱动和底层虚拟化技术,进行交互和调用操作。
  3. 需要keystone、glance、neutron等服务支持,可与这些服务集成。
1.2 nova系统架构

在这里插入图片描述

DB用于数据存储的sql数据库
API用于接受http服务,转换命令(接受和响应)
scheduler调度器,用于决定哪台计算节点承载计算实例的nova调度器
network管理IP转发,网桥或虚拟局域网的nova网络组件
compute管理虚拟机管理器与虚拟机之间通信的nova组件(负责执行)
conductor分配协调作用,处理对象转换

二.组件介绍

2.1 API

API:(公共交互的入口),客户访问nova的http接口,它又nova-api服务实现,api服务接受和响应

  • 来自最终用户的计算api请求,nova-api服务接受和响应来自最终用户的计算api请求,提供了集中的可用查询所有api的端点
  • 所有请求都是首先由nova-api处理,api提供标准调用服务,便于和第三方系统集成,最终用户不会改送RESTFUL API,只需要和nova进行交互
2.2 总结
  1. nova可以为op内部提供标准化服务。
  2. 同时也会为op外部相关的一些组件提供标准化服务
  3. 只要和虚拟机生命周期相关的操作,nova-api都可以响应
2.3 nova-api对接收到HTTP API请求做下处理
  1. 检查客户端传入的参数是否合法有效。
  2. 调用nova其他服务来处理客户端HTTP请求
  3. 格式化nova其他子服务返回结果并返回客户端
  4. nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层

三 scheduler调度器

 scheduler:调度器,负责决定实例创建在哪个节点上(根据规则和调度算法)
  1. 规则:考虑内存使用率,cpu负载率、cpu架构、多种因素,根据算法
  2. 确定在哪一台服务器上,从可用资源池中选择合适的计算节点来创建新的虚拟机实例
  3. 创建实例时,会提出资源需求,如cpu、内存、磁盘,openstack将这些需求定义在实例类型中
  4. 用户只需指定使用哪个实例类型
3.1 调度器类型
  1. 随机调度器
    从所有正常运行的nova-compute服务节点中随机选择

  2. 过滤器调度器
    根据指定的过滤条件及权重选择最佳的节点

  3. 缓存调度器
    ① 可看作随机调度器,在随机的基础上将主机资源缓存在本地内存中
    ② 通过后台的定时任务,从数据库中获取最新的主机资源信息

3.2 过滤调度器调度过程
两个阶段
  1. 通过指定的过滤器选择满足条件的计算节点
    可使用多个过滤器依次进行筛选

  2. 过滤后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实列(选择最合适/最优的节点)

3.3 过滤器

当过滤器需要执行调度器操作,会让过滤器对计算节点进行判断

  1. /etc/nova/nova.conf配置文件中
  2. scheduler_available_filters可用于配置可用过滤器,
    默认是所有nova自带的过滤器,可用于过滤作用
  3. 另外一个还有一个选项scheduler_default_filter用于指定nava_scheduler服务真正使用的过滤器
3.4 过滤调度器按照列表中的顺序依次过滤
  1. 再审过滤器:用于过滤掉之前已经调度过的节点
  2. 可用区域过滤器:为了提高容灾性并提供隔离服务,可将计算节点划分到不同的可用区域中
  3. 内存过滤器:根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤,为了提高系统资源利用率,openstack在计算节点的可用内存时允许超过实际内存大小
  4. 硬盘调度器:磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉,磁盘同样允许超量
  5. 核心过滤器:根据可用cpu核心来调度虚拟机创建,将不能满足实例类型vcpu需求的计算节点顾虑掉,vcpu也允许超量,超量值是通过修改nova.conf中的cpu_allocation_ratio参数控制,默认值是16
  6. 计算过滤器:保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器
  7. 服务器组反亲和性过滤器:要求尽量将实例分散部署到不同节点上
  8. 服务器组亲和性过滤器:尽量将实例部署到同一个计算节点上
  9. 权重:nova-scheduler服务可用使用多个过滤器依次进行过滤,过滤之后,节点再通过计算权重选出能够部署实例的节点

四.compute

4.1 概述
  1. 在计算节点上运行,负载执行具体的与实例生命周期/管理实例相关的工作
  2. 报告节点状态(用于写入数据库,保证scheduler读取数据库,数据库信息的实时性、ceilmetor ,监控和管理openstack实例资源并汇报给用户/openstack本身/运维人员
  3. 通过Driver(驱动)架构支持多种hypervisor虚拟机管理器为hypervispor定义统一的接口,只需要实现这些接口,可driver(驱动)形式即插即用到openstack系统中
4.2 功能
  1. 定期向openstack报告计算节点的状态计算节点的资源使用情况(scheduler)
  2. 实现虚拟机实例生命周期的管理openstcak对虚拟机实列最主要的操作都是通过nova-compute实现
  • 为实例创建为例来说明nova-compute实现过程
    • 为实例准备资源
    • 创建实例的镜像文件
    • 创建实例的xml定义文件

五 conductor

  1. 由nova-conductor:模块实现
  2. compute服务与数据库之间交互的中间,避免了直接访问由nova-compute创建对数据库,有助于提高数据库的访问性能,可创建多个线程使用远程调用,可增加nova-conductor数量来应付日益增长的计算节点对数据库的访问量

六 placementAPI

6.1 概述
 placementAPI:将所有计算节点资源情况累加起来,系统中还存在外部资源
  1. 由外部系统提供(统计外部资源),管理元需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是placementAPI
  2. 被消费的资源类型是按类进行跟踪的,如计算节点类、贡献存储池类、IP地址类等

六 虚拟机实例化流程

  1. 用户可通过多种方式访问虚拟机的控制台nova-novnproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理支持浏览器novnc客户端
  2. nova-consoleauth守护进程:负载对访问虚拟机控制台提供用户令牌认证这个服务必须与控制台代理程序共同使用
6.1 控制台接口
  1. 首先用户执行nova client提供用于创建虚拟机命令

  2. nova-api服务监听来自nova client的http请求,将请求转换为AMQP消息之后加入消息队列

  3. 通过队列调用nova-conductor服务

  4. nova-conductor服务从消息队列中接受到虚拟机实列化消息,准备nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,nova-scheduler会读取数据库内容

  5. nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息,通过消息队列来通知nova-compute服务实现虚拟机的创建

七.nova部署架构

  1. 经典模式:单节点(单中心节点),中心化集群/架构
  2. nova负载均衡部署模式:多节点(多个中心节点)
7.1 cell架构
  1. openstack nova集群的规模变大,数据库和消息服务就会出现瓶颈
  2. nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库的消息中间的复杂度,引入cell概念
  3. 可看成单元,为支持更大规模的部署
  4. openstacak较大的nova集群分成小的单元
  5. 每个单元都又自己的数据库
7.2 单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数据库)

7.3 多cell架构
是为了给rabbitmq和mariadb进行分压, 加入condutor-cell组件
  1. mariadb---->全部数据变成只保存的全局信息
  2. rabbitmq---->全部交互传递,一些具体执行的任务,直接交给rabbitmq-cell
  3. condutor---->全部任务的协调分配工作---->把具体任务分配给cell(rabbitmq–cell)

八 OpenStack-NOVA组件部署

配置接:placement部署
Nova 计算服务为 OpenStack 云环境提供了计算能力,相关环境需要在控制节点和计算节点分别进行部署。

控制节点ct:VM:192.168.10.154 NAT:192.168.10.155
​nova-api(nova主服务)
​nova-scheduler(nova调度服务)
​nova-conductor(nova数据库服务,提供数据库访问)
​nova-novncproxy(nova的vnc服务,提供实例的控制台)
8.1 在CT控制节点上配置 Nova 服务

CT VM:192.168.10.154 NAT:192.168.10.155

8.1.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

在这里插入图片描述

8.1.2 创建用户、修改配置文件
#创建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

在这里插入图片描述

8.1.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

在这里插入图片描述

8.1.4 安装软件包
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

在这里插入图片描述

8.1.5 修改配置文件
cd  /etc/nova/
cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
cat nova.conf

在这里插入图片描述

8.1.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.10.155
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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.1.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.1.8 验证 nova cell0 和 cell1 是否正确注册
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

在这里插入图片描述

8.1.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

在这里插入图片描述

8.1.10 检查nova服务是否启动
netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

在这里插入图片描述

8.2 在C1、C2计算节点上配置 Nova 服务
c1,VM:192.168.10.136 NAT:192.168.10.157
c2,VM:192.168.10.133 NAT:192.168.10.56
  • 两个节点相同操作
8.2.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.10.136 C2:192.168.10.133)

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.10.133
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
8.2.2 查看传参后的配置文件:
cat /etc/nova/nova.conf 

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.2.3 判断计算机是否支持虚拟机硬件加速
  1. 再次检查一下,以防配置失败
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
8.2.4 开启 Nova 计算服务并配置开机启动
systemctl start libvirtd.service openstack-nova-compute.service
systemctl enable libvirtd.service openstack-nova-compute.service
8.3. CT控制节点后续操作
CT VM:192.168.10.154 NAT:192.168.10.155
8.3.1 添加计算节点到 cell 数据库
openstack compute service list --service nova-compute

在这里插入图片描述

8.3.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 以注册这些新的计算节点。

8.3.3 设置适当的发现时间间隔(可选操作)
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300

systemctl restart openstack-nova-api.service

在这里插入图片描述

在这里插入图片描述

8.3.4 验证计算服务
openstack compute service list

在这里插入图片描述

  • 列出身份服务中的API端点以验证与身份服务的连接
 openstack catalog list

在这里插入图片描述

  • 列出图像服务中的图像以验证与图像服务的连接性:
openstack image list

在这里插入图片描述

8.3.5 检查Cells和placement API是否正常运行
nova-status upgrade check

在这里插入图片描述

8.4 总结
nova:负责维护和管理云环境的计算资源
1.nova可以为op内部提供标准化服务
2.同时也会为op外部相关的一些组件提供标准化服务
3.只要和虚拟机生命周期相关的操作,nova-api都可以响应
  1. nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层

  2. Nova分为控制节点、计算节点
    Nova组件核心功能是调度资源,在配置文件中需要体现的部分:指向认证节点位置(URL、ENDPOINT)、调用服务、注册、提供支持等,配置文件中的所有配置参数基本都是围绕此范围(对实例生命周期管理)进行设置

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐