OpenStack Nova Release(Rocky to Train)
目录
文章目录
- 目录
- 前言
- 演进方向
- Cellv2 更新
- Nova Scheduling 更新
- Rocky
- Complex Anti-Affinity Policies
- Report CPU features to the placement service
- Support traits in Glance
- Stein
- Network Bandwidth resource provider
- Per aggregate scheduling weight
- Expose compute capabilities as traits
- Train
- Telco/NFV 更新
- Rocky
- Stein
- Support High Precision Event Timer (HPET) on x86 guests
- Generic os-vif datapath offloads
- vRouter Hardware Offload Enablement
- Train
- 可用性(Usability)更新
- API 更新
- Others
- Rocky
- Enhanced KVM Storage QoS
- Libvirt file backed memory
- Support for virtio-net rx/tx queue sizes
- Per-instance serial number
- zVM supports
- Stein
- U release 展望
前言
在今年(2019)的 9 月 22 号,笔者去参加了 OpenStack Q3 的 Meetup。这次 Meetup 的主题是技术,地点在北京,自然是没有错过的可能。本文主要是对大名鼎鼎的徐 Core 所做的演讲(OpenStack Nova Project Update (Rocky to Train))的一次学习总结与整理。
演进方向
早前,我在《OpenStack 2018 年终盘点》一文中提到过:OPQ 这三个版本的工作重心是稳定性、易用性和运维能力的提升。那么 RST 就是此之上围绕着 Placement 参与到 Nova Scheduling 以及 Cellv2 的操作优化来展开。前者是从 Nova 孵化出来的一个全局的(集中式)资源登记与追踪 API(This is a REST API stack and data model used to track resource provider inventories and usages, along with different classes of resources.),自 Newton 引入,自 Stein 独立,详细可见 《OpenStack Placement Project》一文。
下文中归纳为 Cellv2、Nova Scheduling、NFV、可用性、API 以及 U release 展望等 6 个方面的功能更新。
Cellv2 更新
Rocky
Support disabling a cell
支持执行 Cell 级别(以往只支持 Host 级别)的 Disable,新的请求不会发送到 Disabled Cell。
应用场景:运维人员可以 Disable 掉指定的 Cell,并对其进行管理和运维的工作。
nova-manage cell_v2 --update_cell --cell_uuid <cell_uuid> [--disable]
kill –s SIGHUP <nova-scheduler pid>
NOTE:在 Disabled Cell 之后要对 nova-scheduler service 发一个挂起的信号,让 nova-scheduler service 刷新并 Cache 可用的 Cells。
Stein
Handling a down cell
显示已经 Down 掉的 Cell 中最起码的 Instances 信息(Show minimal info than ignore the instance in the down cell.),例如:UUID、Flavor 等。以此提升用户的操作体验。
Train
Count quota usage from placement
以往 User/Project 的 Quota 信息是持久化到 Cell DB 中的,这就导致了 Disabled Cell 之后会丢失一部分的 Quota 信息。所以将这个 Quota 信息持久化到全局的 Placement API 中,可以解决这个问题。
NOTE:该功能可以通过配置选项 CONF.quota.count_usage_from_placement
来主动开启,默认为 False。在 multiple deployments share same placement(边界)场景中建议关闭,因为 Placement 现在不支持分区域,所以会导致 Quota 计算重复累加;在 Placement 滚动升级场景中建议关闭,因为如果开启的话,那么 Nova API 会先检查一下 Placement 的 Data Migration 是否完成并支持 Count quota usage,如果不支持则 fallback(回退)到查 Cell DB 的方式。这个过程中存在性能损耗,建议都升级完成后开启。
Nova Scheduling 更新
Rocky
Complex Anti-Affinity Policies
以往 Anti-Affinity Server Group 中的每台计算节点上都分别只能启动一个 Instance,现在通过 max_server_per_host
参数,可以设置 Server Group 中每台计算节点上最大的允许启动的 Instances 数量。
Report CPU features to the placement service
支持将计算节点的 CPU features 上报到 Placement,结合 Placement Traits 功能可以实现更加细致的(根据特征的)调度策略。
应用场景:某些虚拟机上运行的应用程序需要指定的 CPU features,那么就应该在 Flavor 上指定 Placement Traits 属性(e.g. HW_CPU_X86_AVX512VNNI)。
NOTE:暂时只支持 Libvirt Driver。
Support traits in Glance
以往只能在 Flavor 上支持自定义 Placement Traits 属性,现在在 Glance Image metadata 上也支持了。
应用场景:同理,如果某些镜像中已有的应用程序对运行环境有特殊要求,就可以为其设定 Placement Traits 属性(e.g. trait:HW_CPU_X86_AVX512VNNI=required)。当然了,前提是 Placement 已经登记了这个 Traits。
Stein
Network Bandwidth resource provider
支持创建具有最小 OvS/SR-IOV 带宽的虚拟机,借助于 Placement,将网络带宽作为一种 Resource Provider 进行登记和追踪。现在支持的功能以及使用条件都有很多限制(e.g. 不支持热迁移),但无碍为一个值得关注的功能。
应用场景:在 NFV、边缘计算等对最小带宽有要求的环境中使用。
文档:https://specs.openstack.org/openstack/nova-specs/specs/rocky/approved/bandwidth-resource-provider.html
Per aggregate scheduling weight
以往 Scheduler weight 的设置 CONF.scheduler.*_weight_multiplier
是全局的,但现在支持 Host Aggregate 级别的更细粒度的 weight 设置,通过 aggregate metadata 来实现。
Expose compute capabilities as traits
支持将 Compute Capabilities(计算能力)上报为 Placement traits 属性。
应用场景:在 Multi-Hypervisor 类型场景中会很有用,例如:在 KVM & VMware 异构资源池的环境中,两种 Hypervisor 类型的计算能力是不一样的。现在同样支持通过为 Flavor 或 Image metadata 设定 Placement traits 属性来选择目标 Hypervisor。
Train
Request Filter for Image Types
添加了 Image Type Scheduler Filter,针对特定的 image type 来调度 Instance 到匹配的 Hypervisor 资源池。依赖于 Expose compute capabilities as traits 功能,Hypervisor 会上报自己支持的 Image Types 并自动生成相应的 Placement traits 属性(e.g. COMPUTE_IMAGE_TYPE_QCOW2)。
应用场景:在 Multi-Hypervisor 场景中无需再将 Image 都统一为 ROW 格式,得以保持 Image 的特色功能。
Standard CPU resources tracking
支持更加可自定义的 CPU Resource Tracker,或者说更加可自定义的 CPU 绑定策略,即:指定计算节点中能够被 share 的 pCPUs,指定计算节点中能够被 dedicate 的 pCPUs。后续社区还会考虑支持创建同时存在两种 CPU 策略的虚拟机。
CONF.compute.shared_cpu_set
CONF.compute.dedicated_cpu_set
应用场景:以往针对这个问题,会建议划分不同的计算节点资源池,例如:CPU 共享的计算节点资源池、CPU 绑定的计算节点资源池。以此来避免 pCPU 资源的使用超脱预期。有了 Standard CPU resources tracking 之后,就多了一种在计算节点层面进行 CPU 资源池类型划分的方式。
NOTE:在 Nova 滚动升级场景中同样会存在 Data Migration 的问题,建议在升级过程开启 CONF.workaround.disable_fallback_pcpu_query
,设置为 False,这样的话 Nova 就是先查 pCPU,若没有则自动 fallback 到查 vCPU,不至于一直创建 dedicate 的虚拟机失败。直到全部节点的 Data Migration 完成后再配置为 True。
Telco/NFV 更新
Rocky
Trusted Virtual Functions
以往是不支持在 GuestOS 层面修改 VF 的 MAC 地址的,直到 Linux Kernel 支持 Trusted Virtual Functions 特性。用户操作层面,只需要在 PF 的白名单中,标记 Trusted 的 VFs,然后在创建 Port 的时候在 binding:profile 中标记使用 Trusted VFs 即可。从 Port 创建该虚拟机的时候会调度到具有 Trusted PF/VFs 的计算节点上。
应用场景:为一个 Instance 透传两个 VFs,并且将它们做成一个 Binding。
Stein
Support High Precision Event Timer (HPET) on x86 guests
支持 Guest 层面的高精度的计时器。在 Image metadata 设置 hw_time_hpet=True
即可。
应用场景:面向边缘计算中对实时性要求高的虚拟机。
Generic os-vif datapath offloads
vRouter Hardware Offload Enablement
Train
Virtual Persistent Memory
现在支持将持久化内存 PCI-e 透传给虚拟机。即:支持虚拟化持久化内存。持久化内存,即:ROM,掉电不丢失,容量大,但速度较 RAM 慢。实现方式是配置持久化内存的 namespace(理解为分区)配置为 nova,然后 Nova 就可以发现并将其作为一个 Resource Provider 以及 Traits 上报给 Placement。e.g.
hw:pmem = $LABEL[,$LABEL]
CONF.libvirt.pmem_namespaces = "$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]”
应用场景:用作 Redis 等 DB 的 Cache。
NOTE:暂不支持热迁移,不支持 NUMA 亲和。
NUMA Live migration
支持对 NUMA Instance 进行热迁移。以往对 NUMA Instance 进行热迁移的时候,没有重新计算 InstanceNUMATopology,现在改进了这一缺陷。如果用户希望在 Rocky 版本中使用该功能,可以通过配置 CONF.workaround.enable_numa_live_migration
开启,否则直接返回错误。
文档:https://specs.openstack.org/openstack/nova-specs/specs/rocky/approved/numa-aware-live-migration.html
Add Support for live migration with neutron sriov vnic types
支持对 SR-IOV Instance 进行热迁移。
Indirect mode(间接模式):通过 macvtap 来进行转接(具有虚拟 MAC 地址),支持 Hypervisor(Libvirt)层面的热迁移,但性能肯定有损失(20%-30%)。实现方式是:Nova 会先到目的节点上获取 VF 的 MAC 地址等信息,然后重新生成 XML 并在目的节点上启动。
direct mode(直接模式):即透传,不支持 Hypervisor(Libvirt)层面的热迁移。因为此类虚拟机的迁移需要从源节点卸载 SR-IOV vNIC、再到目的节点挂载(只有物理 MAC 地址),显然就导致了网络的中断。workaround 的方式是:在热迁移前,先挂在一个 vSwitch vNIC,然后再进行热迁移,由这个 vSwitch vNIC 来承接 SR-IOV vNIC 断掉的流量。
Tenant control of qemu performance monitoring unit
可用性(Usability)更新
Rocky
Use Neutron’s new port binding API
Nova 使用了新的 Neutron Port Binding API。以往虚拟机热迁移是虚拟机数据迁移完之后再进行 Port Binding,现在支持在迁移虚拟机数据之前进行 Port Binding,这样做有效的优化了:
- Knowing the port binding failed early:无需再等待到虚拟机数据迁移完才只知道 Port Binding 失败。
- minimal network downtime:更小的网络中断时长。
- migrate between different ml2 backends:支持在不同的 ML2 backends(openvswitch、linuxbridge)中进行迁移。
Stein
Default allocation ratio configuration
支持默认的 CPU、RAM、Disk 分配超分比。当前支持 nova.conf 和 Placement API 两种方式来修改 allocation ratio,但是后者的数值会被前者覆盖。所以由添加了 3 个新的 Default allocation ratio configuration,代表初始的数值,以此来代替了原来 nova.conf 的 3 个配置选项的作用。这样做之后,对 nova.conf 的修改和 Placement API 的修改就不会互相影响了,当以下三个选项配置为 None 之后,Nova 就只关心 Placement 的数值了。
initial_cpu_allocation_ratio
initial_ram_allocation_ratio
initial_disk_allocation_ratio
Live-Migration force after timeout
虚拟机热迁移支持 force_complete,所谓 force_complete 有两种情况:
- Disable Port-Copy Live-Migration:超时,则立即强制暂定 Instance,然后快速热迁移。
- Enable Post-Copy Live-Migration:将 Live-Migration 从 Pre-Copy 转换为 Post-Copy 模式。
相关配置:
CONF. libvirt.live_migration_timeout_action = abort/force_complete
CONF.libvirt.live_migration_completion_timeout
应用场景:针对处理那些数据安全性要求不高,但是内存数据刷新量大导致无法完成热迁移的虚拟机。
Train
Select cpu model from a list of cpu models
支持配置启动 Instance 的 CPU model 的列表,即 cpu_models:
- Replace CONF.libvirt.cpu_model to CONF.libvirt.cpu_models
- default choice the first cpu model in the list of CONF.libvirt.cpu_models.
- With required CPU traits, will choice the first cpu model support that CPU traits.
应用场景:针对 Live-Migration 要求的 Instance CPU model 向下兼容的问题。以往为了降低向下兼容的失败率,所以用户会刻意的将计算节点的 CPU model 配置为最低级别,这就导致一些具有高级 CPU 功能的计算节点发挥不出应有的功效。现在支持 CPU model 列表后,就可以按照 CPU 功能的复杂度依次递增,顺序填写。在对 CPU model 没有要求的情况下,Nova 默认会使用最低级别的 CPU model 来启动 Instance,以此来保证 Instance Live-Migration 的成功率最高。而当希望创建具有高级别的 CPU model 的 Instance 时,则可以通过 Placement Traits 来设定,并进行调度。虚拟机的创建更加灵活了。
API 更新
Rocky
- Boot instance specific storage backend:支持指定 cinder volume type 来创建虚拟机。
- Expose virtual device tags in REST API
Stein
- Remove force flag from live-migrate and evacuate
- show which server group a server is in “nova show”
- Support to query nova resources filter by changes-before
- Support adding description while locking an instance
Train
- Support for specifying AZ when restore a shelved server
- Show server numa_topology:支持查看计算节点的 HostNUMATopology。
- Support config delete_on_termination in server attach volume:支持指定是否要一并删除在线 Attached 的 Volumes。以往在线 Attached Volumes 是不可以被一并删除的。
Others
Rocky
Enhanced KVM Storage QoS
支持 cinder frontend QoS。
Libvirt file backed memory
支持文件类型的持久化内存。配置方式:[libvirt]/file_backed_memory specifies the available capacity in MiB for file backed memory, at the directory configured for memory_backing_dir in libvirt’s qemu.conf.
应用场景:针对追求内存容量而不追求内存速度的场景,是 HPC 用户的需求。
NOTE:
- only can migrate to the host with file backed memory also.
- can’t overcommit memory
Support for virtio-net rx/tx queue sizes
支持设置 virtio-net 收发队列的大小。配置方式:CONF.libvirt.rx_queue_size/CONF.libvirt.tx_queue_size for vhost/vhostuser。
Per-instance serial number
支持虚拟机使用计算节点的 serial number 来作为 instance UUID,配置方式:flavor extra spec hw_unique_serial = True。
NOTE:显然,同一计算节点上的 Instances 的 UUID 都是一致的。
应用场景:针对在虚拟机上运行授权软件的场景。
zVM supports
支持 zVM Hypervisor 类型。
Stein
live migraiton support for VMware
支持 VMware VM 的热迁移。
U release 展望
- Nova NUMA in Placement:通过 Placement 来完成 NUMA 调度,为了支持 vGPU、vPMEM 的 NUMA 亲和性。
- Nova-Cyborg integration:完成 Nova 和 Cyborg 的集成。
- Virtual Persistent memory Live migration:虚拟化持久化内存支持热迁移。
- Mixed dedicated and shared CPU into single instance:支持创建 dedicated/shared CPU 策略共存的虚拟机。
- Move vGPU into new resource claim framework:将 vGPU 资源加入到新的 Instance Claim 框架,解决并发请求冲突的问题。
- PCI/SRIOV device management into new resource claim framework, but may not in U.
OpenStack Nova Release(Rocky to Train)的更多相关文章
- OpenStack入门篇(二十二)之实现阿里云VPC的SDN网络
1.修改/etc/neutron/neutron.conf配置 [root@linux-node1 ~]# vim /etc/neutron/neutron.conf [defalut] ... co ...
- 安装OpenStack计算服务(nova)
1. 配置数据库 数据库安装在控制节(controller)点上 $ mysql -u root -p 2.创建 glance 数据库 CREATE DATABASE nova; GRANT ALL ...
- openstack——nova计算服务
一.nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是 ...
- Objective-c——UI进阶开发第一天(UIPickerView和UIDatePicker)
一.知识点 1.介绍数据选择控件UIPickerView和日期选择控件UIDatePicker控件 * UIPickerView的案例 * 点餐系统 * 城市选择 * 国旗选择 * UIDatePic ...
- CentOS7安装OpenStack(Rocky版)-07.安装horizon服务组件(控制节点dashboard)
在上一篇文章分享了neutron网络服务的安装配置,本文分享openstack的horizon(dashboard)web界面管理服务,方便在浏览器操作 ---------------------- ...
- OpenStack入门篇(九)之nova服务(控制节点)的部署与测试
1.Nova介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点 ...
- openstack nova 基础知识——Quota(配额管理)
一.什么是配额(quota)管理 简单的讲就是控制用户资源的数量.在openstack里,管理员为每一个工程(project)分配的资源都是有一定限制的,这些资源包括实例(instance).cpu. ...
- 理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- CentOS7.2非HA分布式部署Openstack Pike版 (实验)
部署环境 一.组网拓扑 二.设备配置 笔记本:联想L440处理器:i3-4000M 2.40GHz内存:12G虚拟机软件:VMware® Workstation 12 Pro(12.5.2 build ...
随机推荐
- Nginx 的关键组件的介绍
本文章主要介绍Nginx本身功能,不依赖第三方的任何模块.介绍常用的组件功能:反向代理.负载均衡.Http服务器.正向代理 反向代理(Reverse Proxy): 什么是反向代理呢?本人最直接的理解 ...
- Python爬微信好友头像,性别,所在地区
本文适合新手(有一定基础的小白) 今天没事,用的网页版微信,于是看源码心理作怪,F12打开,研究了一下,结果发现 /斜眼笑/斜眼笑/斜眼笑 再加上,没事干,(大家有好工作求介绍,本人待就业),Pyth ...
- PAT Advanced 1073 Scientific Notation (20 分)
Scientific notation is the way that scientists easily handle very large numbers or very small number ...
- NLP学习(1)---Glove模型---词向量模型
一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...
- 大数据之路week06--day01(VMware的下载与安装、安装CentOS)
好了,从今天开始就开始正式的进入大数据道路的轨道上了,当然了,Java 也是需要不断地在日后进行反复地学习,熟练掌握.(这里我要说一下,Java种还有一些I/O流.Lambda表达式和一些常用工具类有 ...
- idea 设置 maven 默认位置
在 idea 中创建 maven 项目 每次都要修改掉 默认的maven位置,觉得很烦.... 所以这边篇博客就是专门解决掉这个麻烦精的......(233333) 首先 File --> ...
- 关于webpack require.context() 的那点事
先说 webpack里面有这么一招:使用require.context()方法来自动导入模块 官方文档有点深奥,老衲百度下拿了一段来直接使用,但是想看下它是如何运行的 本篇这里不会有太深入的研究,只是 ...
- vs调试 iis发布之后的项目
方法一 启动vs 访问iis地址 即可调试 方法二 点击调试, 选择附加到进程 选择所有用户进程, 选择w3wp.exe ,附加 , 即可调试
- EF非常见错误:EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配
EF非常见错误:EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 问题原因: 两个表A\B之间存在外键关系,当插入表A的时候,A的外键B在B表中不存在可以引起这个问题: ...
- Appium自动化测试教程-自学网-app基础知识
Instrumentation的缺点是不支持跨应用,比如我想要先调起通讯录,在操作其他的app,则不支持. 第一步,应该确定系统哪些模块适合自动化.哪些不适合做自动化,明确做自动化给我们带来的好处是什 ...