(四)浅谈OpenStack T版服务组件

您所在的位置:网站首页 openstack的服务类型及各服务之间的关系 (四)浅谈OpenStack T版服务组件

(四)浅谈OpenStack T版服务组件

2023-07-17 10:57| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 一、Nova简介1、Nova的概念2、Nova系统架构 二、Nova组件详解1、Nova--API2、Nova--Scheduler调度器1、概念2、调度器的类型3、过滤器调度器调度过程3.1、过滤器3.2、过渡器类型 3、Nova--Compute4、Nova--Conductor5、Nova-PlacementAPl6、控制台接口 三、Nova部署架构1、经典部署架构2、Cell架构3、需要扩展的对象4、Nova结合Cell架构5、Nova的Cell架构目的 四、部署Nova计算服务1、Placement组件部署2、计算节点Nova服务配置3、计算节点配置Nova服务 五、总结

一、Nova简介 1、Nova的概念 算服务是openstack最核心的服务之一, 负责维护和管理云环境的计算资源(实例生命周期),它在openstack项目中代号是novava自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor (虚拟机管理器)进行交互。所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)Nova需要keystone、glance、 neutron、 cinder和swift等其他服务的支持, 能与这些服务集成,实现如加密磁盘、裸金属计算实例等(也是nova的一大特性) 2、Nova系统架构 架构组成特性DB用于数据存储的sql数据库API用于接收HTTP请求、转换命令、通过消息队列(相对于nova组件本身对内)或HTTP(对外)与其他组件通信的nova组件。Scheduler用于决定哪台计算节点承载计算实例的nova调度器Network管理IP转发、网桥或虚拟局域网的nova网络组件Compute管理虚拟机管理器与虚拟机之间通信的nova计算组件Conductor处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换 二、Nova组件详解 1、Nova–API

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、Nova–Scheduler调度器

scheduler的目的:选择最适合启动实例的计算节点

1、概念

控制台(horizon)创建虚拟机,API通过conductor协调分发,任务交给scheduler,scheduler需要先确定虚拟机如何创建

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

创建虚拟机实例时,用户会提出资源需求,如cpu,内存、磁盘各需要多少。Openstack将这些需求定义在实例类型中,用户只需指定使用哪个实例类型就可以了

在这里插入图片描述

举例说明: 需求:1、磁盘>= 40G 上图所示,首先过滤预选,排除掉node_03,再结合cpu的使用率,得出node_01是最优选择 scheduler的工作流程 首先跟DB数据库对接: 数据库中维护了后端计算节点的资源清单/信息 其次scheduler 预选:过滤 先把不符合的计算节点(此处是不合法磁盘>= 40G)剔除在外 最后scheduler 优选:打分 在预选之后,再对剩余的计算节点资源进行函数+权重值的运算得出一个分数,分数越高,越适合创建实例

2、调度器的类型

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

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

为了让让scheduler调度时参照的节点数据是接近实时的,主要由以下三点: 1、由compute会把节点信息汇报到数据库内,但是不是完全的实时汇报,有间隔时间 2、libvirt接近实时,通过libvirt收集宿主机资源 3、缓存在scheduler所在的服务器上,还会周期性同步信息给DB

3、过滤器调度器调度过程

在这里插入图片描述

主要分二个阶段

通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例 3.1、过滤器 当过滤调度器需要执行调度操作时, 会让过滤器对计算节点进行判断,返回True或False。 /etc/nova/nova.conf配置文件中scheduler available filters选项用于配置包用过滤器默认是所有nova自带的过滤器都可以用于过滤作用 Scheduler_available_filters = nova.scheduler.filters.all_filters另外还有一个选项scheduler_default_filters用于指定nova-scheduler服务真正使用的过滤器,默认值如下 Scheduler_ default_ filters = RetryFilters, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter 3.2、过渡器类型

过滤调度器将按照列表中的顺序依次过滤

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 /etc/nova/nova.conf Ram_allocation_ratio=1.5 DiskFilter (硬盘调度器) 根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。磁盘同样允许超量,超星值可修改nova. conf中disk_allocation_ratio参数控制,默认值是1.0 Vi /etc/nova/nova.conf disk_allocation_ratio=1.0 CoreFilter(核心过滤器) 根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.con中cpu_allocatin_ratio参数控制,默认值是16。 Vi /etc/nova/nova.conf cpu_allocation_ratio=16.0 ComputeFilter(计算过滤器) 保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。 ComputeCapablilitiesFilter (计算能力过滤器) 根据计算节点的特性来过滤,如x86_ 64和ARM架构的不同节点,要将实例根据不同的节点类型进行分配 ImagePropertiesFilter(镜像属性过滤器) 根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hyperisor上,可以通过Hypervisor Type属性来指定亲和和反亲和 ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器) 要求尽量将实例分散部署到不同的节点上。例如有3个实例s1. s2、s3, 3个计算节点A. B、C。具体操作如下: ①:创建一个anti-affinit策略的服务器组 openstack server group create -policy anti-affinity 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(服务器组亲和性过滤器) 与反亲和性过滤器相反,此过滤器尽量将实例部署到同一个计算节点上 3、Nova–Compute 定期向OpenStack报告计算节点的状态 每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute 服务状态。nova-compute是通过Hypervisor的驱动获取这些信息的。 实现虚拟机实例生命周期的管理 OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。 创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照以实例创建为例来说明nova-compute的实现过程(compute执行的顺序) 为实例准备资源。创建实例的镜像文件。创建实例的XML定义文件。创建虚拟网络并启动虚拟机。 4、Nova–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的数量来应付日益增长的计算节点对数据库的访问量

5、Nova-PlacementAPl 以前对资源的管理全部由计算节点承担,在统计资源使用情况时,只是简单的将所有计算节点的资源情况累加起来,但是系统中还存在外部资源,这些资源由外部系统提供。如ceph, nfs等提供的存储资源等。面对多种多样的资源提供者,管理员需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是PlacementAPlPlacementAPI由nova-placement-api服务来实现,旨在追踪记录资源提供者的目录和资源使用情况被消费的资源类型是按类进行跟踪的。如计算节点类、共享存储池类、IP地址类等 6、控制台接口 首先用户(可以是OpenStack最终用户,也可以是其他程序)执行Nova Client提供的用于创建虚拟机的命令。nova-api服务监听到来自于Nova Client的HTTP请求,并将这些请求转换为AMQP消息之后加入消息队列。通过消息队列调用nova-conductor服务。nova-conductor服务从消息队列中接收到虚拟机实例化请求消息后,进行一些准备工作。nova-conductor服务通过消息队列告诉nova-scheduler服务去选择-个合适的计算节点来创建虚拟机,此时nova-scheduler会读取数据库的内容。nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息后,在通过消息队列来通知nova-com ute服务实现虚拟机的创建。 三、Nova部署架构 1、经典部署架构

Nova经典部署模式:一个控制节点 在这里插入图片描述

Nova负载均衡部署模式:多个控制节点 在这里插入图片描述

2、Cell架构 架构背景 当openstack nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了CelI概念cell的概念 Cell可译为单元。为支持更大规模的部署,openstack较大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中,Keystone、Neutron、 Cinder、Glance等资源是共享的 3、需要扩展的对象 DB数据库:接收全部的读和写,compute汇报节点的压力conductor:承受来源于compute的压力,compute是多线程的rabbitmq:通过负载均衡部署架构图来看,三个控制节点+三个计算节点均通过rabbitmq传递

举例说明: 创建虚拟机请求id=1—>DB数据库中记录创建实例A的请求,id=1—>nova的conductor向compute发送指令,让compute具体去创建实例–>compute找scheduler适合创建实例的节点,比如说Schuster告知node1适合创建实例—>node1在cell_01内,conductor把创建虚拟机的请求交给cell_01处理—>cell_01管理node1上的compute之后,会把具体的信息写入自己的数据库中----》再把结果返回给conductor—>conductor返回请求结果更新之后的数据到DB数据库中 在这里插入图片描述

4、Nova结合Cell架构 结合单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接收之后会做一个简单的格式化管理并返回给客户端

结合多cell架构 与单cell架构是类似的,无法就是多了几个cell架构部分的内容,有更多的计算节点和compute节点 5、Nova的Cell架构目的

nova的cell架构目的是什么(扩展)???

NOVA架构的分层结构: DB -> API数据库conductor --> super conductorrabbitmq --> api-rabbitmq 扩展后,加入了cell单元,单元是一个个独立存在的结构,形成cell_n的结构: cell的数据库是cell_n数据库cell的控制器: nova-conductorcell的消息队列: cell-rabbitmq 四、部署Nova计算服务

配置操作系统+OpenStack运行环境

主机名内存硬盘网卡系统ct8300+300VM:192.168.10.100CentOS7.6NAT:192.168.35.140CentOS7.6c18300+300VM:192.168.10.101CentOS7.6NAT:192.168.35.141CentOS7.6C28300+300VM:192.168.10.102CentOS7.6NAT:192.168.35.142CentOS7.6

nova组件部署位置

控制节点服务ct​nova-api(nova主服务)ct​nova-scheduler(nova调度服务)ct​nova-conductor(nova数据库服务,提供数据库访问)ct​nova-novncproxy(nova的vnc服务,提供实例的控制台)c1、c2nova-compute(nova计算服务) 1、Placement组件部署 创建数据库实例和数据库用户 [root@ct ~]# mysql -uroot -p MariaDB [(none)]> CREATE DATABASE placement; MariaDB [(none)]> grant all privileges on placement.* to 'placement'@'localhost' identified by 'PLACEMENT_DBPASS'; MariaDB [(none)]> grant all privileges on placement.* to 'placement'@'%' identiffied by 'PLACEMENT_DBPASS'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit; 创建Placement服务用户和API的endpoint 创建placement用户 [root@ct ~]# openstack user create --domain default --password PLACEMENT_PASS placement +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | e2fd74e3578f4d47a1f1ab30fff76d80 | | name | placement | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ 给与placement用户对service项目拥有admin权限 [root@ct ~]# openstack role add --project service --user placement admin 创建一个placement服务,服务类型为placement [root@ct ~]# openstack service create --name placement --description "Placement API" placement +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Placement API | | enabled | True | | id | 6332d10b09144e509971822c6749a267 | | name | placement | | type | placement | +-------------+----------------------------------+ 注册API端口到placement的service中;注册的信息会写入到mysql中 [root@ct ~]# openstack endpoint create --region RegionOne placement public http://ct:8778 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 296458b3da894b318f7ee10018480da3 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 6332d10b09144e509971822c6749a267 | | service_name | placement | | service_type | placement | | url | http://ct:8778 | +--------------+----------------------------------+ [root@ct ~]# openstack endpoint create --region RegionOne placement internal http://ct:8778 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 569d80ebf9cc4587b03e203c1037cf73 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 6332d10b09144e509971822c6749a267 | | service_name | placement | | service_type | placement | | url | http://ct:8778 | +--------------+----------------------------------+ [root@ct~]# openstack endpoint create --region RegionOne placement admin http://ct:8778 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 565c7960765f4431859639949cb7b5d2 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 6332d10b09144e509971822c6749a267 | | service_name | placement | | service_type | placement | | url | http://ct:8778 | +--------------+----------------------------------+

在这里插入图片描述

安装placement服务 [root@ct ~]# yum -y install openstack-placement-api [root@ct ~]# cp /etc/placement/placement.conf{,.bak} placement.conf 修改placement配置文件 [root@ct ~]# grep -Ev '^$|#' /etc/placement/placement.conf.bak > /etc/placement/placement.conf [root@ct ~]# openstack-config --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement [root@ct ~]# openstack-config --set /etc/placement/placement.conf api auth_strategy keystone [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_url http://ct:5000/v3 [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken memcached_servers ct:11211 [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_type password [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken project_name service [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken username placement [root@ct ~]# openstack-config --set /etc/placement/placement.conf keystone_authtoken password PLACEMENT_PASS [root@ct placement]# cat placement.conf ##查看placement配置文件 [DEFAULT] [api] auth_strategy = keystone [cors] [keystone_authtoken] auth_url = http://ct:5000/v3 ##指定keystone地址 memcached_servers = ct:11211 ##session信息是缓存放到了memcached中 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = placement password = PLACEMENT_PASS [oslo_policy] [placement] [placement_database] connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement [profiler] 导入数据库 su -s /bin/sh -c "placement-manage db sync" placement

在这里插入图片描述

修改Apache配置文件: 00-placemenct-api.conf 安装完placement服务后会自动创建该文件-虚拟主机配置 [root@ct ~]# cd /etc/httpd/conf.d/ [root@ct conf.d]# vim 00-placement-api.conf ##安装完placement会自动创建此文件 ##配置文件最后插入以下内容 #此处是bug,必须添加下面的配置来启用对placement api的访问,否则在访问apache的 = 2.4> #api时会报403;添加在文件的最后即可 Require all granted #apache版本;允许apache访问/usr/bin目录;否则/usr/bin/placement-api将不允许被访问 Order allow,deny Allow from all #允许apache访问 重新启动apache [root@ct placement]# systemctl restart httpd ##重启Apache为了识别虚拟主机中修改的部分 测试 ① curl 测试访问 [root@ct placement]# curl ct:8778 {"versions": [{"status": "CURRENT", "min_version": "1.0", "max_version": "1.36", "id": "v1.0", "links": [{"href": "", "rel": "self"}]}]} ② 查看端口占用(netstat、lsof) [root@ct placement]# netstat -natp | grep 8778 tcp6 0 0 :::8778 :::* LISTEN 72994/httpd ③ 检查placement状态 [root@ct placement]# placement-status upgrade check +----------------------------------+ | Upgrade Check Results | +----------------------------------+ | Check: Missing Root Provider IDs | | Result: Success | | Details: None | +----------------------------------+ | Check: Incomplete Consumers | | Result: Success | | Details: None | +----------------------------------+ 2、计算节点Nova服务配置 创建nova数据库,并执行授权操作 [root@ct ~]# mysql -uroot -p MariaDB [(none)]> CREATE DATABASE nova_api; MariaDB [(none)]> CREATE DATABASE nova; MariaDB [(none)]> CREATE DATABASE nova_cell0; MariaDB [(none)]> grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS'; MariaDB [(none)]> grant all privileges on nova_api.* to 'nova'@'%' identified byy 'NOVA_DBPASS'; MariaDB [(none)]> grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS'; MariaDB [(none)]> grant all privileges on nova.* to 'nova'@'%' identified by 'NOOVA_DBPASS'; MariaDB [(none)]> grant all privileges on nova_cell0.* to 'nova'@'localhost' ideentified by 'NOVA_DBPASS'; MariaDB [(none)]> grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'NOVA_DBPASS'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit 管理Nova用户及服务 [root@ct ~]# openstack user create --domain default --password NOVA_PASS nova ##创建nova用户 +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | dcf3b5df290c42638de1f41a834d4284 | | name | nova | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ [root@ct ~]# openstack role add --project service --user nova admin ##把nova用户添加到service项目,拥有admin权限 创建nova服务 [root@ct ~]# openstack service create --name nova --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | d1f76108c8484212a8f296467508aa49 | | name | nova | | type | compute | +-------------+----------------------------------+ 给Nova服务关联endpoint(端点) [root@ct ~]# openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 4bdb48b8c8c549609c157fcbab532bd7 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | d1f76108c8484212a8f296467508aa49 | | service_name | nova | | service_type | compute | | url | http://ct:8774/v2.1 | +--------------+----------------------------------+ [root@ct ~]# openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 4509b03c2767491580ac064df598d9e7 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | d1f76108c8484212a8f296467508aa49 | | service_name | nova | | service_type | compute | | url | http://ct:8774/v2.1 | +--------------+----------------------------------+ [root@ct ~]# openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | e6c30360730f448ca21b20666f18a7a4 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | d1f76108c8484212a8f296467508aa49 | | service_name | nova | | service_type | compute | | url | http://ct:8774/v2.1 | +--------------+----------------------------------+ 安装nova组件、修改nova配置文件(nova.conf) nova-api、nova-conductor:控制器、nova-novncproxynovn的代理、nova-scheduler:调度器 [root@ct ~]# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler [root@ct ~]# cd /etc/nova/ [root@ct nova]# cp -a /etc/nova/nova.conf{,.bak} [root@ct nova]# 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 my_ip 192.168.10.100 ##修改为ct的IP(内部IP) 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 [root@ct nova]# cat nova.conf ##查看配置文件 [DEFAULT] enabled_apis = osapi_compute,metadata ##指定支持的api类型 my_ip = 192.168.10.100 ##定义本地IP use_neutron = true ##通过neutron获取IP地址 firewall_driver = nova.virt.firewall.NoopFirewallDriver ##防火墙的引擎 transport_url = rabbit://openstack:RABBIT_PASS@ct ##指定连接的rabbitmq [api] auth_strategy = keystone ##指定使用keystone认证 [api_database] connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api ##api连入数据库 [barbican] [cache] [cinder] [compute] [conductor] [console] [consoleauth] [cors] [database] connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova [devices] [ephemeral_storage_encryption] [filter_scheduler] [glance] api_servers = http://ct:9292 [guestfs] [healthcheck] [hyperv] [ironic] [key_manager] [keystone] [keystone_authtoken] ##配置keystone的认证信息 auth_url = http://ct:5000/v3 ##到此url去认证 memcached_servers = ct:11211 ##memcache数据库地址:端口 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [libvirt] [metrics] [mks] [neutron] [notifications] [osapi_v21] [oslo_concurrency] ##指定锁路径 lock_path = /var/lib/nova/tmp ##锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行 [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [pci] [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://ct:5000/v3 username = placement password = PLACEMENT_PASS [powervm] [privsep] [profiler] [quota] [rdp] [remote_debug] [scheduler] [serial_console] [service_user] [spice] [upgrade_levels] [vault] [vendordata_dynamic_auth] [vmware] [vnc] ##此处如果配置不正确,则连接不上虚拟机的控制台 enabled = true server_listen = $my_ip ##指定vnc的监听地址 server_proxyclient_address = $my_ip ##server的客户端地址为本机地址;此地址是管理网的地址 [workarounds] [wsgi] [xenserver] [xvp] [zvm] [placement_database] 初始化数据库 ①:初始化nova_api数据库 [root@ct ~]# su -s /bin/sh -c "nova-manage api_db sync" nova ②:注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组 [root@ct ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova ③:创建cell1单元格; [root@ct ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova 269a515f-5d1a-4acc-be6b-26f3146b0ec6 ##cell1的id ④:初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功 [root@ct ~]# su -s /bin/sh -c "nova-manage db sync" nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release') result = self._query(query) /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release') result = self._query(query) ⑤:可使用以下命令验证cell0和cell1是否注册成功 su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova #验证cell0和cell1组件是否注册成功 +-------+--------------------------------------+----------------------------+-----------------------------------------+----------+ | 名称 | UUID | Transport URL | 数据库连接 | Disabled | +-------+--------------------------------------+----------------------------+-----------------------------------------+----------+ | cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@ct/nova_cell0 | False | | cell1 | 269a515f-5d1a-4acc-be6b-26f3146b0ec6 | rabbit://openstack:****@ct | mysql+pymysql://nova:****@ct/nova | False | +-------+--------------------------------------+----------------------------+-----------------------------------------+----------+ 启动Nova服务 [root@ct ~]# systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service [root@ct ~]# systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service ①:检查nova服务端口 [root@ct ~]# netstat -tnlup|egrep '8774|8775' tcp 0 0 0.0.0.0:8775 0.0.0.0:* LISTEN 48566/python2 tcp 0 0 0.0.0.0:8774 0.0.0.0:* LISTEN 48566/python2 [root@ct ~]# curl http://ct:8774

在这里插入图片描述

3、计算节点配置Nova服务 c1、c2安装nova-compute组件 yum -y install openstack-nova-compute 修改配置文件nova.conf cp -a /etc/nova/nova.conf{,.bak} grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf c1节点: 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.101 #修改为对应节点的内部IP 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.10.101: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 [root@c1 nova]# cat nova.conf ##查看配置文件 [DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:RABBIT_PASS@ct my_ip = 192.168.10.101#修改为对应节点的内部IP use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver [api] auth_strategy = keystone [api_database] [barbican] [cache] [cinder] [compute] [conductor] [console] [consoleauth] [cors] [database] [devices] [ephemeral_storage_encryption] [filter_scheduler] [glance] api_servers = http://ct:9292 [guestfs] [healthcheck] [hyperv] [ironic] [key_manager] [keystone] [keystone_authtoken] auth_url = http://ct:5000/v3 memcached_servers = ct:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [libvirt] virt_type = qemu [metrics] [mks] [neutron] [notifications] [osapi_v21] [oslo_concurrency] lock_path = /var/lib/nova/tmp [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [pci] [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://ct:5000/v3 username = placement password = PLACEMENT_PASS [powervm] [privsep] [profiler] [quota] [rdp] [remote_debug] [scheduler] [serial_console] [service_user] [spice] [upgrade_levels] [vault] [vendordata_dynamic_auth] [vmware] [vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://192.168.10.101:6080/vnc_auto.html [workarounds] [wsgi] [xenserver] [xvp] [zvm] 开启服务 systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service

以上操作计算节点-c2与c1相同(除IP地址不同)

controller节点操作 查看compute节点是否注册到controller上,通过消息队列;需要在controller节点执行 [root@ct ~]# openstack compute service list --service nova-compute +----+--------------+------+------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+--------------+------+------+---------+-------+----------------------------+ | 8 | nova-compute | c1 | nova | enabled | up | 2021-08-26T13:29:30.000000 | | 9 | nova-compute | c2 | nova | enabled | up | 2021-08-26T13:29:33.000000 | +----+--------------+------+------+---------+-------+----------------------------+ 扫描当前openstack中有可用的计算节点,发现后会把计算节点创建到cell中,后面就可以在cell中创建虚拟机;相当于openstack内部对计算节点进行分组,把计算节点分配到不同的cell中 [root@ct ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova Found 2 cell mappings. Skipping cell0 since it does not contain hosts. Getting computes from cell 'cell1': 269a515f-5d1a-4acc-be6b-26f3146b0ec6 Checking host mapping for compute host 'c1': 77c14ea3-41e4-4008-81b2-4b18565796ec Creating host mapping for compute host 'c1': 77c14ea3-41e4-4008-81b2-4b18565796ec Checking host mapping for compute host 'c2': 5398f1e7-ee65-471a-bb7c-357764c357a1 Creating host mapping for compute host 'c2': 5398f1e7-ee65-471a-bb7c-357764c357a1 Found 2 unmapped computes in cell: 269a515f-5d1a-4acc-be6b-26f3146b0ec6 默认每次添加个计算节点,在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端nova的主配置文件 [root@ct ~]# vim /etc/nova/nova.conf [scheduler] ##此处下面插入一行 discover_hosts_in_cells_interval = 300 ##每300秒扫描一次;自动添加计算节点 [root@ct ~]# systemctl restart openstack-nova-api.service 验证计算节点服务 #检查 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功 [root@ct ~]# openstack compute service list +----+----------------+------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+----------------+------+----------+---------+-------+----------------------------+ | 4 | nova-scheduler | ct | internal | enabled | up | 2021-08-26T13:34:17.000000 | | 7 | nova-conductor | ct | internal | enabled | up | 2021-08-26T13:34:19.000000 | | 8 | nova-compute | c1 | nova | enabled | up | 2021-08-26T13:34:20.000000 | | 9 | nova-compute | c2 | nova | enabled | up | 2021-08-26T13:34:13.000000 | +----+----------------+------+----------+---------+-------+----------------------------+ [root@ct ~]# openstack catalog list ##查看各个组件的 api 是否正常 +-----------+-----------+---------------------------------+ | Name | Type | Endpoints | +-----------+-----------+---------------------------------+ | placement | placement | RegionOne | | | | public: http://ct:8778 | | | | RegionOne | | | | admin: http://ct:8778 | | | | RegionOne | | | | internal: http://ct:8778 | | | | | | glance | image | RegionOne | | | | public: http://ct:9292 | | | | RegionOne | | | | admin: http://ct:9292 | | | | RegionOne | | | | internal: http://ct:9292 | | | | | | keystone | identity | RegionOne | | | | admin: http://ct:5000/v3/ | | | | RegionOne | | | | internal: http://ct:5000/v3/ | | | | RegionOne | | | | public: http://ct:5000/v3/ | | | | | | nova | compute | RegionOne | | | | internal: http://ct:8774/v2.1 | | | | RegionOne | | | | public: http://ct:8774/v2.1 | | | | RegionOne | | | | admin: http://ct:8774/v2.1 | | | | | +-----------+-----------+---------------------------------+ [root@ct ~]# openstack image list ##查看是否能够拿到镜像 +--------------------------------------+--------+--------+ | ID | Name | Status | +--------------------------------------+--------+--------+ | ca02269b-9b20-4a03-9b35-5c889b624db8 | cirros | active | +--------------------------------------+--------+--------+ #查看cell的api和placement的api是否正常,只要其中一个有误,后期无法创建虚拟机 [root@ct ~]# nova-status upgrade check +--------------------------------+ | Upgrade Check Results | +--------------------------------+ | Check: Cells v2 | | Result: Success | | Details: None | +--------------------------------+ | Check: Placement API | | Result: Success | | Details: None | +--------------------------------+ | Check: Ironic Flavor Migration | | Result: Success | | Details: None | +--------------------------------+ | Check: Cinder API | | Result: Success | | Details: None | +--------------------------------+ 五、总结

Placement部署 提供了placement-apiWSGI脚本,用于与Apache,nginx或其他支持WSGI的Web服务器一起运行服务(通过nginx或apache实现python入口代理)。 根据用于部署OpenStack的打包解决方案,WSGI脚本可能位于/usr/bin 或中/usr/local/bin Placement服务是从 S 版本,从nova服务中拆分出来的组件,作用是收集各个node节点的可用资源,把node节点的资源统计写入到mysql,Placement服务会被nova scheduler服务进行调用 Placement服务的监听端口是8778

需修改的配置文件: ① placement.conf 主要修改思路: Keystone认证相关(url、HOST:PORT、域、账号密码等) 对接数据库(位置) ② 00-placement-api.conf 主要修改思路(虚拟主机): Apache权限、访问控制

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3