文章目录

  • 一、Nova概述
  • 二、系统架构
    • 内部组件介绍
      • nova-api
      • Scheduler
      • Nova-compute
      • Rabbitmq
      • Nova-conductor
  • 三、架构
  • 四、组件介绍
    • 4.1、API–通信接口
    • 4.2、Scheduler–调度器
      • 4.2.1、过滤器(filter)
      • 4.2.2、计算权值(weight)
    • 4.3、Compute–计算器
      • 4.3.1、支持方式
      • 4.3.2、功能
    • 4.4、Conductor–管理器
    • 4.5、PlacementAPI–安置接口
  • 五、Nova 的 Cell 架构
    • 5.1、产生原因
    • 5.2、架构图
  • 六、Nova项目搭建
    • 6.1、创建数据库实例和数据库用户
    • 6.2、创建Placement服务用户和API的endpoint
    • Nova组件部署
    • 计算节点Nova服务配置

一、Nova概述

Nova是负责提供计算资源的模块,也是OpenStack中的核心模块。OpenStack使用计算服务来托管和管理云计算系统
主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。

Nova 在整个 OpenStack 架构中的位置如下图:
在上图中可以看到,OpenStack 很多组件都为 Nova 提供支持:
Glance 为 VM 提供镜像;
Cinder 和 Swift 分别为 VM 提供块存储和对象存储;
Neutron 为 VM 提供网络连接

二、系统架构

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

内部组件介绍

nova-api

AsPI是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接受和响应来自最终用户计算api的请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点。

所有对nova的请求都首先由nova-api处理。API提供REST 标准调用服务,便于与第三方系统集成。

最终用户不会直接该送RESTful API请求而是通过openstack命令行、dashbord和其他需要跟nova的组件使用这些API。

NOva-api对接受到的HTTP API请求做以下处理:
(1)检查客户端传入的参数是否合法有效
(2)调用nova其他服务来处理客户端HTTP请求
(3)格式化nova其他子服务返回结果并返回给客户端

nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。

Scheduler

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

Nova-compute

Nova-compute处理管理实例生命周期。他们通过Message Queue接收实例生命周期管理的请求,并承担操作工作。在一个典型生产环境的云部署中有一些compute workers。一个实例部署在哪个可用的compute worker上取决于调度算法。

Rabbitmq

OpenStack 节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完成通信。Nova 通过异步调用请求响应,使用回调函数在收到响应时触发。因为使用了异步通信,不会有用户长时间卡在等待状态。这是有效的,因为许多API调用预期的行为都非常耗时,例如加载一个实例,或者上传一个镜像。

Nova-conductor

nova-conductor是nova-compute与数据库的中间件,nova-compute对数据库的CRUD操作都借由nova-conductor完成,nova-conductor通过rpc对外提供API服务。nova-conductor默认采用多进程运行,在不配置[conductor]worker的情况下,进程数会与服务器的逻辑CPU数一致。

三、架构

Nova 逻辑架构如下图所示(红色方框内为 Nova 组件,方框外为 Nova 和 OpenStack 其他服务之间的调用关系)

  • nova组件内部沟通

    client通过http去认证,认证成功之后去访问OpenStack进行API调度,进行调度网络、卷、计算等等,然后通过消息队列进行去往各个组件,然后各个组件进行工作,Seceduler开始分配网络、分配卷,在某一台主机分配虚拟机,同时还要进行持续的监控,判断主机是否正常工作,并且要统计物理机消耗的资源情况,方便下一次Scheduler平台的调度
    
  • nova与其他组件沟通

    这里的nova会分为控制节点(Cloud Controller)与实例节点(Compute)控制节点就是负责分配,分配到实例节点去运行,控制节点在同一时间内只有一个,而实例节点则在同一时间内有多个,通过客户端或web去创建一个虚拟机,首先要访问keystone的endpoint,然后可以访问到nova-api,然后nova通知消息队列,然后scheduler开始进行调度,调度成功之后compute节点接收到调度数据开始通过hypervisor(虚拟机监视器)来创建虚拟机,glance与swift组件是在创建虚拟机的同时提供镜像以及存储服务,组件之间的沟通方式与创建虚拟机的方式一样。
    

虚拟机的启动流程
首先执行创建虚拟机动作,会被nova-api转移到scheduler调度,scheduler会分两种情况,如果指定在哪台机器创建虚拟机,那么优先级是最大的,直接发送到对应的compute节点创建即可。如果没有指定虚拟机在哪台机器创建,首先要进行权重的计算(为了调度到最合适的计算节点,这个节点相对其他节点资源利用率较低,更平稳),然后根据权重结果来调度一台最合适的宿主机进行虚拟机的创建。

权重的计算:可以通过libvirt(虚拟机监视层)收集宿主机的资源,宿主机的资源会定时更新到数据库中,scheduler通过数据库中获取到每台宿主机当前的资源。

如果在轮询时间没有到的时候去申请虚拟机,假如此时经过权重计算得出的宿主机不为最合适的宿主机时怎么办?

解决方案

无论轮询时间是多少,如果宿主机被写入新的内容,当前宿主机会马上同步此时的状态到数据库。这样就解决了上述的问题。

四、组件介绍

4.1、API–通信接口

实现了RESTful API功能,是外部访问Nova的唯一途径,同时也是客户端与Nova之间的中间层,可以与第三方系统集成
接收外部的请求并通过Message Queue将请求发送给其他的服务组件,同时也兼容EC2 API,所以也可以用EC2的管理工具对nova进行日常管理。
作为核心组件,可集中查询所有组件的API端点
API可以处理与虚拟机生命周期相关的操作
Nova-api对接收到的HTTP API做以下处理
鉴权,即检查参数是否合法有效
作为计算节点的核心,调用其他项目去服务通过HTTP发送的请求
清空Nova子服务中的相关运算,只返回结果给客户端

4.2、Scheduler–调度器

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

4.2.1、过滤器(filter)

过滤出可以创建虚拟机的主机。
scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用

Scheduler_available_filters = nova.scheduler.filtersall filters

另外还有一一个选项schedyler_default_filters用于指定nova-scheduler服务真正使用的过滤器,默认值如下

Scheduler_ delault filters ■RetryFilters, Avalla biltyZoneFilter, RamFilter,
ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter,
ServerGroupAntiffinityFilter, ServerGroupAffinityFilter

过滤器将从以下几个方面进行过滤

  • RetryFilter(再审过滤器)

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

  • AvailabilityZoneFilter (可用区域过滤器)

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

  • RamFilter (内存过滤器)

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

vi /etc/nova/nova.conf
ram_allocation_ratio=1.5
  • DiskFilter (硬盘调度器)

根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。磁盘同样允许超量,超量值可修改nova .con中disk. alocation. _ratio参数控制,默认值是1.0

vi /etc/nova/nova.conf
disk_allocation_ratio=1.0
  • CoreFilter(核心过滤器)

根据可用CPU核心米响度应拟忆创廷,将个能满正头例夫型VCPU需冰的计算节点过宽掉。vCPU也允许超量,超量值是通过修改nova. conf中cpu_ llocation. 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( 服务器组反亲和性过滤器)

要求尽量将实例分散部署到不同的节点上。即考虑到实例之间的服务会相互冲突,将实例泡在不同的服务器上

  • ServerGroupffinityilter(服务器组亲和性过滤器)

与反亲和性过滤器相反,此过滤器尽量将实例部署到同一个计算节点上


用户创建虚拟机,nova-api接收到请求,像keystone验证,转移到scheduler调度,有两种情况,如果指定,那台优先级最大,直接发送到对应的compute节点创建,若没指定,进行过滤和权重计算,。libvirt(虚拟机监视层)收集宿主机的资源,更新到数据库中,scheduler通过数据库中获取到每台宿主机当前的资源,选择最合适的创建虚拟机

  • 计算节点的资源会通过计划任务的方式会分两次实时更新到数据库。
  • 创建虚拟机的时候, Scheduler 会根据 DB 库中收集的计算节点的资源。
  • 在 Scheduler 创建计算节点后,会返回一个值给 DB 库,从而在下一次创建虚拟机的时候,不会因为 DB
    库中更新不及时的原因造成创建虚拟机失败

4.2.2、计算权值(weight)

根据权重大小进行分配,默认根据资源可用空间进行权重排序。

注意:
所有权重位于nova/scheduler/weights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

OpenStack源码位置

/usr/lib/python2.7/site-packages

权重源码位置

/usr/lib/python2.7site-packages/nova/scheduler/weights

4.3、Compute–计算器

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

4.3.1、支持方式

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

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

4.3.2、功能

定期向OpenStack报告计算节点的状态

  • 每隔一-段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compu服务状态。
  • nova-compute是通过Hypervisor的驱动获取这些信息的。

实现虚拟机实例生命周期的管理

  • OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。
    创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照
  • 以实例创建为例来说明nova- compute的实现过程。
    为实例准备资源。
    创建实例的镜像文件。
    创建实例的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的数量来应付日益增长的计算节点对数据库的访问量。

4.5、PlacementAPI–安置接口

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

五、Nova 的 Cell 架构

5.1、产生原因

  • 当openstack
    nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。
  • Cell可译为单元。为支持更大规模的部署,openstack将大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中,Keystone.Neutron.Cinder.Glance等资源是共享的。

5.2、架构图


从架构图上,可以看到:
api 和 cell 有了明显的边界。 api 层面只需要数据库,不需要 Message Queue。
nova-api 现在依赖 nova_api 和 nova_cell0 两个数据库。
nova-scheduler 服务只需要在 api 层面上安装,cell 不需要参数调度。这样实现了一次调度就可以确定到具体在哪个 cell 的哪台机器上启动
这里其实依赖 placement 服务, 以后的文章会提到
cell 里面只需要安装 nova-compute 和 nova-conductor 服务,和其依赖的 DB 和 MQ
所有的 cell 变成一个扁平架构。比之前的多层父子架构要简化很多。
api上面服务会直接连接 cell 的 MQ 和 DB, 所以不需要类似 nova-cell 这样子的额外服务存在。性能上也会有及大的提升
新建机器时:

nova-api 接到用户的请求信息,先转发到 nova-scheduler 进行调度, nova-scheduler 通过 placement service, 直接确定分配到哪台机器上
nova-api 把 instance 的信息存入instance_mappings 表
nova-api 把机器信息存到目标 cell 的 database
nova-api 给 cell 的 message queue 的相关队列发消息,启动机器

六、Nova项目搭建

6.1、创建数据库实例和数据库用户

[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'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

6.2、创建Placement服务用户和API的endpoint

  • 创建placement用户
[root@ct ~]# openstack user create --domain default --password PLACEMENT_PASS placement
  • 给与placement用户对service项目拥有admin权限
[root@ct ~]# openstack role add --project service --user
  • 创建一个placement服务,服务类型为placement
[root@ct ~]# openstack service create --name placement --description "Placement API" placement
  • 注册API端口到placement的service中;注册的信息会写入到mysql中
[root@ct ~]# openstack endpoint create --region RegionOne placement public http://ct:8778
[root@ct ~]# openstack endpoint create --region RegionOne placement internal http://ct:8778
[root@ct~]# openstack endpoint create --region RegionOne placement admin http://ct:8778
  • 安装placement服务
[root@controller ~]# yum -y install openstack-placement-api
  • 修改placement配置文件
openstack-config --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
openstack-config --set /etc/placement/placement.conf api auth_strategy keystone
openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_url  http://ct:5000/v3
openstack-config --set /etc/placement/placement.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_type password
openstack-config --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/placement/placement.conf keystone_authtoken project_name service
openstack-config --set /etc/placement/placement.conf keystone_authtoken username placement
openstack-config --set /etc/placement/placement.conf keystone_authtoken password PLACEMENT_PASS
查看placement配置文件
[root@ct placement]# cat placement.conf
[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 conf.d]# cat 00-placement-api.conf #安装完placement会自动创建此文件
Listen 8778<VirtualHost *:8778>WSGIProcessGroup placement-apiWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization OnWSGIDaemonProcess placement-api processes=3 threads=1 user=placement group=placementWSGIScriptAlias / /usr/bin/placement-api<IfVersion >= 2.4>ErrorLogFormat "%M"</IfVersion>ErrorLog /var/log/placement/placement-api.log#SSLEngine On#SSLCertificateFile ...#SSLCertificateKeyFile ...
</VirtualHost>Alias /placement-api /usr/bin/placement-api
<Location /placement-api>SetHandler wsgi-scriptOptions +ExecCGIWSGIProcessGroup placement-apiWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization On
</Location>
<Directory /usr/bin>          #此处是bug,必须添加下面的配置来启用对placement api的访问,否则在访问apache的
<IfVersion >= 2.4>                #api时会报403;添加在文件的最后即可Require all granted
</IfVersion>
<IfVersion < 2.4>              #apache版本;允许apache访问/usr/bin目录;否则/usr/bin/placement-api将不允许被访问Order allow,deny                Allow from all          #允许apache访问
</IfVersion>
</Directory>
  • 重新启动apache
[root@ct placement]# systemctl restart httpd
  • 测试
    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 conf.d]# netstat -natp | grep 8778
tcp6       0      0 :::8778                 :::*                    LISTEN      101615/httpd
  • 检查placement状态
[root@ct conf.d]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results            |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success                  |
| Details: None                    |
+----------------------------------+
| Check: Incomplete Consumers      |
| Result: Success                  |
| Details: None                    |
+----------------------------------+

Nova组件部署

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

计算节点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 BY '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 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
  • 管理Nova用户及服务
  • 创建nova用户
[root@ct ~]# openstack user create --domain default --password NOVA_PASS nova
#把nova用户添加到service项目,拥有admin权限
[root@ct ~]# openstack role add --project service --user nova admin
  • 创建nova服务
[root@ct ~]# openstack service create --name nova --description "OpenStack Compute" compute
  • 给Nova服务关联endpoint(端点)
[root@ct ~]# openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1
[root@ct ~]# openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1
[root@ct ~]# openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1
  • 安装nova组件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)
[root@ct ~]# 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}
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.120                #修改为对应节点的内部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 trueopenstack-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.11: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@ct nova]# cat nova.conf[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@ct
my_ip = 192.168.100.110
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.100.110:6080/vnc_auto.html            #比较特殊的地方,需要手动添加IP地址,否则之后搭建成功后,无法通过UI控制台访问到内部虚拟机[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]
  • 初始化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
  • 初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
[root@ct ~]# su -s /bin/sh -c "nova-manage db sync" nova
  • 可使用以下命令验证cell0和cell1是否注册成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova #验证cell0和cell1组件是否注册成功
  • 启动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'
[root@ct ~]# curl http://ct:8774
  • 计算节点配置Nova服务-c1节点

安装nova-compute组件

yum -y install openstack-nova-compute

修改配置文件

cp -a /etc/nova/nova.conf{,.bak}
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.12                 #修改为对应节点的内部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 trueopenstack-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.11: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.servicesystemctl start libvirtd.service openstack-nova-compute.service

【controller节点操作】

  • 查看compute节点是否注册到controller上,通过消息队列;需要在controller节点执行
[root@ct ~]# openstack compute service list --service nova-compute
+----+--------------+------+------+---------+-------+----------------------------+
| ID | Binary       | Host | Zone | Status  | State | Updated At                 |
+----+--------------+------+------+---------+-------+----------------------------+
|  7 | nova-compute | c1   | nova | enabled | up    | 2020-12-21T08:31:36.000000 |
|  8 | nova-compute | c2   | nova | enabled | up    | 2020-12-21T08:31:33.000000 |
+----+--------------+------+------+---------+-------+----------------------------+
  • 扫描当前openstack中有哪些计算节点可用,发现后会把计算节点创建到cell中,后面就可以在cell中创建虚拟机;相当于openstack内部对计算节点进行分组,把计算节点分配到不同的cell中
[root@ct ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
  • 默认每次添加个计算节点,在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端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                 |
+----+----------------+------+----------+---------+-------+----------------------------+
|  1 | nova-conductor | ct   | internal | enabled | up    | 2020-12-21T08:32:39.000000 |
|  4 | nova-scheduler | ct   | internal | enabled | up    | 2020-12-21T08:32:40.000000 |
|  7 | nova-compute   | c1   | nova     | enabled | up    | 2020-12-21T08:32:41.000000 |
|  8 | nova-compute   | c2   | nova     | enabled | up    | 2020-12-21T08:32:38.000000 |
+----+----------------+------+----------+---------+-------+----------------------------+
  • 查看各个组件的 api 是否正常
[root@ct ~]# openstack catalog list
+-----------+-----------+---------------------------------+
| Name      | Type      | Endpoints                       |
+-----------+-----------+---------------------------------+
| nova      | compute   | RegionOne                       |
|           |           |   admin: http://ct:8774/v2.1    |
|           |           | RegionOne                       |
|           |           |   internal: http://ct:8774/v2.1 |
|           |           | RegionOne                       |
|           |           |   public: http://ct:8774/v2.1   |
|           |           |                                 |
| glance    | image     | RegionOne                       |
|           |           |   admin: http://ct:9292         |
|           |           | RegionOne                       |
|           |           |   public: http://ct:9292        |
|           |           | RegionOne                       |
|           |           |   internal: http://ct:9292      |
|           |           |                                 |
| placement | placement | RegionOne                       |
|           |           |   admin: http://ct:8778         |
|           |           | RegionOne                       |
|           |           |   public: http://ct:8778        |
|           |           | RegionOne                       |
|           |           |   internal: http://ct:8778      |
|           |           |                                 |
| keystone  | identity  | RegionOne                       |
|           |           |   public: http://ct:5000/v3/    |
|           |           | RegionOne                       |
|           |           |   admin: http://ct:5000/v3/     |
|           |           | RegionOne                       |
|           |           |   internal: http://ct:5000/v3/  |
|           |           |                                 |
+-----------+-----------+---------------------------------+
  • 查看是否能够拿到镜像
[root@ct ~]# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 238703c7-8128-4284-aed8-65c1f683a700 | 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)、调用服务、注册、提供支持等,配置文件中的所有配置参数基本都是围绕此范围进行设置

学会OpenStack之核心Nova服务一篇就够了!!!相关推荐

  1. OpenStack之核心Nova

    一 简介: Nova是OpenStack云中的计算组织控制器.支持OpenStack云中实例(instances)生命周期的所有活动都由Nova处理.这样使得Nova成为一个负责管理计算资源.网络.认 ...

  2. 彻底学会快速部署vue框架,一篇就够了

    为什么要使用Vue Vue框架诞生于2014年,其作者为中国人--尤雨溪,也是新人最容易入手的框架之一,不同于React和Angular,其中文文档也便于大家阅读和学习.Vue用于构建交互式的Web界 ...

  3. 还不懂shell脚本核心?这一篇就够了。

     前言: 现在在我们已经知道了Linux系统和命令行的基础知识,是时候开始编程了.本章讨论编写 shell脚本的基础知识.在开始编写自己的shell脚本前,你必须了解的基本概念都在这里. 一.多个sh ...

  4. 学会Redis缓存中间件,这一篇就够了

    Redis 文章涉及的资源文件都可以在文末自行获取. 文章目录 Redis 一.什么是Nosql 二.Redis入门 概述 Redis能干嘛? Linux安装 测试性能 三.基础知识 五大数据类型 * ...

  5. openstack组件之nova

    一.nova介绍 nova是openstack 最核心的服务,负责维护和管理云环境的计算资源. 管理 VM 的生命周期 二.nova架构 nova 的架构比较复杂,包含很多组件. 这些组件以子服务(后 ...

  6. openstack“T版“nova组件部署

    文章目录 NOVA组件 Nova计算服务 Nova系统架构 Nova组件介绍 API Scheduler OpenStack-nova组件部署 NOVA组件 Nova计算服务 Nova系统架构 Nov ...

  7. OpenStack T版—Nova组件部署详解

    目录 一.Nova计算服务 1.1.Nova系统架构 1.2.Nova组件介绍-API 1.3.Nova组件介绍-Scheduler 1.3.1.Nova调度器的类型 1.3.2.过滤器调度器调度过程 ...

  8. openstack核心组件-nova-计算服务

    nova介绍: Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. 用 ...

  9. 关于nova服务项目的使用方法

    1. 创建flavor类型 flavor类型为OpenStack在创建云主机时需要提供的云主机大小类型,云主机的资源大小可使用不同的flavor类型来进行定义. (1)创建flavor类型 [root ...

最新文章

  1. Openstack_单元测试工具 tox
  2. 别名的应用(New-Alias)
  3. Dandan's lunch
  4. ELK学习11_ELK Stack交流群问题汇总一
  5. 介绍一个欧神写的剪贴板多端同步神器
  6. 基于SPI协议的Flash全擦除
  7. DevIL真是好用得想哭
  8. android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定
  9. 2020美国纽约大学计算机科学排名,2020美国纽约大学排名第几
  10. 计算机排线知识,一种计算机排线梳理装置制造方法及图纸
  11. 如何成功度过试用期?
  12. 关于使用struts2上传文件时获取不到文件内容的问题的解决方案
  13. hadoop的几个常用命令
  14. throw er; // Unhandled 'error' event 和Error: listen EADDRNOTAVAIL 192.168.0.109:8081
  15. JavaWeb 学习路线
  16. 【AI视野·今日CV 计算机视觉论文速览 第245期】Wed, 20 Apr 2022
  17. 高效能人士的七个习惯--由内而外全面造就自己
  18. 为什么.TM明明不便宜,却还是备受业界大佬们青睐?
  19. 烤仔TVのCCW | 交易的生命周期
  20. 怎么把html的网页做成视频,html5网页中怎么加入视频?怎么为网页添加视频?

热门文章

  1. WebRTC IOS视频硬编码流程及其中传递的CVPixelBufferRef
  2. 物理系统碰撞相关原理及算法
  3. 字典 列表和集合习题
  4. 办公技巧:如何修改PDF文件的日期格式
  5. 什么是数据库连接池?
  6. Centos安装traceroute
  7. CAD怎么打印彩色图纸
  8. 微信小程序 点击展开收起(点谁谁展开/收起)
  9. STM32的RTC管脚作为Tamper使用(RTC-TAMPER)
  10. A. Chess Placing