OpenStack的部署T版——Nova组件

Posted IHBOS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenStack的部署T版——Nova组件相关的知识,希望对你有一定的参考价值。

一、Nova计算服务概念

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

Nova系统架构

在这里插入图片描述

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

二、Nova组件介绍

1、API

  • API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口, nova-api提供了一个集中的可以查询所有api的端点。
  • 所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。
  • 最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API。
  • 只要跟虚拟机生命周期相关的操作,nova-api都可以响应。

nova-api对接收到的HTTP API请求做以下处理:
1)检查客户端传入的参数是否合法有效
2)调用nova其他服务来处理客户端HTTP请求
3)格式化nova其他子服务返回结果并返回给客户端
nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层

2、Scheduler调度器

  • Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu构架( intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。
  • 创建虚拟机实例时,用户会提出资源需求,如cpu、内存、磁盘各需要多少,openstack讲这些需求定义在实例类型中,用户只需指定使用哪个实例类型就可以了

Nova调度器的类型

  • 随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。
  • 过滤器调度器(filter scheduler):根据指定的过滤条件以及权重选择最佳的计算节点,Filter又称为筛选器
    • 调度器调度过程:主要分两个阶段
    • 通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤。
    • 对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例。
  • 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。

过滤器

  • 当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回True或False。
    在配置文件/etc/nova/nova.conf中
  • scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用
  • 另外还有一个选项scheduler_ default_ filters用于指定,nova-scheduler服务真正使用的过滤器

过滤调度器将按照下列顺序依次过滤

RetryFilter(再审过滤器)
主要作用是过滤掉之前已经调度过的节点。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter将重新执行过滤操作,那么此时A就被会RetryFilter直接排除,以免再次失败

AvailabilityZoneFilter(可用区域过滤器)
为提高容灾性并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有的计算节点初始是放在nova区域中的。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在哪个可用区域中。Nova-scheduler执行过滤操作时,会使用AvailabilityZoneFilter不属于指定可用区域计算节点过滤掉

RamFilter(内存过滤器)
根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤掉,但为了提高系统资源利用率,Openstack在计算节点的可用内存时允许超过实际内存大小超过的程度是通过nova.conf配置文件中
ram_allocation_ratio参数来控制的,默认值是1.5。
Vi letc/nova/nova.conf
Ram_allocation_ratio=1.5

DiskFilter(硬盘调度器)
根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。破盘同样允许超量超量值可修改nova.conf中disk_allocation_ratio参数控制,默认值是1.0
Vi letc/nova/nova.conf
disk_allocation_ratio=1.0

CoreFilter(核心过滤器)
根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.conf中
cpu_allocation_ratio参数控制,默认值是16。
Vi letc/nova/nova.conf
cpu_allocation_ratio=16.0

ComputeFilter(计算过滤器)
保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

ComputeCapablilitiesFilter (计算能力过滤器)
根据计算节点的特性来过滤,如x86_ 64和ARM架构的不同节点,将实例分别进行过滤

ImagePropertiesFilter(镜像属性过滤器)
根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器)
要求尽量将实例分散部署到不同的节点上。例如有3个实例s1、s2、s3, 3个计算节点A、B、C。具体操作如下:
创建一个anti-affinit策略的服务器组
openstack server group create -policy antiaffinity group-1
创建三个实例,将它们放入group-1服务器组
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s1
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s2
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s3
ServerGroupAffinityFilter(服务器组亲和性过滤器)
与反亲和性过滤器相反,此过滤器尽量将实例部署到同-个计算节点上

权重(weight)

  • nova-scheduler服务可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出能够部署实例的节点。
  • 注意:
    • 所有权重位于novalschedulerlweights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

3、Compute组件

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

通过Driver (驱动)架构支持多种Hypervisor虚拟机管理器

  • 面对多种Hypervisor(虚拟层),nova-compute为这些Hypervisor定义统一的接口。
  • Hypervisor只需要实现这些接口,就可以Driver的形式即插即用到OpenStack系统中

Compute组件功能

  • 定期向OpenStack 报告计算节点的状态
    • 每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态。
    • nova-compute是通过Hypervisor的驱动获取这些信息的。
  • 实现虚拟机实例生命周期的管理
    • OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。
      创建、关闭、重启、挂起、恢复、中止、调整大小迁移、快照
    • 以实例创建为例来说明nova-compute的实现过程。
      (1)为实例准备资源。
      (2)创建实例的镜像文件。
      (3)创建实例的XML定义文件。
      (4)创建虚拟网络并启动虚拟机。

4、Conductor组件

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

三、OpenStack-NOVA组件部署

配置接:OpenStack的部署T版(四)——Placement组件
Nova 计算服务为 OpenStack 云环境提供了计算能力,相关环境需要在控制节点和计算节点分别进行部署。

CT VM:192.168.100.10 NAT:192.168.172.70
​nova-api(nova主服务)
​nova-scheduler(nova调度服务)
​nova-condutor(nova数据库服务,提供数据库访问)
​nova-novncproxy(nova的vnc服务,提供实例的控制台)

C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90

nova-compute(nova计算服务)

1、在CT控制节点上配置 Nova 服务

CT VM:192.168.100.10 NAT:192.168.172.70

创建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

在这里插入图片描述

创建用户、修改配置文件

创建nova用户
openstack user create --domain default --password NOVA_PASS nova

把nova用户添加到service项目,拥有admin权限
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

在这里插入图片描述

添加/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

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

初始化数据库

初始化nova_api数据库
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 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

在这里插入图片描述

检查nova服务是否启动

netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

在这里插入图片描述

2、在C1、C2计算节点上配置 Nova 服务

C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90

安装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

在这里插入图片描述

注意:下列命令中第三行需要修改当前节点的IP地址(C1:192.168.100.20 C2:192.168.100.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.100.30 
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

开启 Nova 计算服务并配置开机启动

systemcontrollerl start libvirtd.service openstack-nova-compute.service
systemcontrollerl enable libvirtd.service openstack-nova-compute.service

在这里插入图片描述

3、CT节点后续操作

CT VM:192.168.100.10 NAT:192.168.172.70

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

openstack compute service list --service nova-compute

在这里插入图片描述

发现计算节点

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

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

验证计算节点服务

检查 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功
openstack compute service list

在这里插入图片描述

查看各个组件的 api 是否正常
openstack catalog list

在这里插入图片描述

查看是否能够拿到镜像
openstack image list

在这里插入图片描述

查看cell的api和placement的api是否正常,只要其中一个有误,后期无法创建虚拟机
nova-status upgrade check

在这里插入图片描述

以上是关于OpenStack的部署T版——Nova组件的主要内容,如果未能解决你的问题,请参考以下文章

OpenStack 运维 - 部署Nova组件 [T版]

传统公司部署OpenStack(t版)简易介绍——nova模块部署

传统公司部署OpenStack(t版)简易介绍——nova模块部署

OpenStack--T版部署(内容较多,需要细品(❁´◡`❁))!

OpenStack--T版部署(内容较多,需要细品(❁´◡`❁))!

浅谈OpenStack T版服务组件--Nova计算服务(#^.^#)