找回密码
 注册
查看: 748|回复: 0

openstack nova scheduler_default_filters 详解

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-6-10 22:00:14 | 显示全部楼层 |阅读模式
Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步:

6 Q: v# ]. Q' D: m+ L3 V
通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。

* S7 u1 }" l; \: l, A
Nova 允许使用第三方 scheduler,配置 scheduler_driver 即可。

$ h. Z0 K2 t+ y/ `. e, d5 }4 l! V/ @
Scheduler 可以使用多个 filter 依次进行过滤,过滤之后的节点再通过计算权重选出最适合的节点。
. j" r* X' @0 m( k3 u8 v

$ x7 C+ k2 w5 Q* y4 J3 C) d

目前,openstack默认支持几种过滤策略,开发者也可以根据需要实现自己的过滤策略。在nova.scheduler.filters包中的过滤器有以下几种:

l  AllHostsFilter – 不做任何过滤,直接返回所有可用的主机列表。

l  AvailabilityZoneFilter – 返回创建虚拟机参数指定的集群内的主机。

l  ComputeFilter – 根据创建虚拟机规格属性选择主机。

l  CoreFilter – 根据CPU数过滤主机。

l  IsolatedHostsFilter – 根据 “image_isolated” 和 “host_isolated” 标志选择主机。

l  JsonFilter – 根据简单的JSON字符串指定的规则选择主机。

l  RamFilter – 根据指定的RAM值选择资源足够的主机。

l  SimpleCIDRAffinityFilter – 选择在同一IP段内的主机。

l  DifferentHostFilter – 选择与一组虚拟机不同位置的主机。

l  SameHostFilter – 选择与一组虚拟机相同位置的主机。

, X' Y8 K9 T% J/ @
3 a& g  D7 W& j3 c2 _- c1 I
【RetryFilter】
+ b) D% n5 v" o% R
RetryFilter 的作用是刷掉之前已经调度过的节点。
/ U: V2 g6 G9 u4 P" k
举个例子方便大家理解: 假设 A,B,C 三个节点都通过了过滤,最终 A 因为权重值最大被选中执行操作。 但由于某个原因,操作在 A 上失败了。 默认情况下,nova-scheduler 会重新执行过滤操作(重复次数由 scheduler_max_attempts 选项指定,默认是 3)。 那么这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。
RetryFilter 通常作为第一个 filter。
- n/ m) u, n2 k4 E4 L; E, f2 b5 l
【AvailabilityZoneFilter】

. L( g9 C, H. T$ l
为提高容灾性提供隔离服务,可以将计算节点划分到不同的Availability Zone中。
7 \& ]' H+ `% R% T" r6 z
例如把一个机架上的机器划分在一个 Availability Zone 中。 OpenStack 默认有一个命名为 "Nova" 的 Availability Zone,所有的计算节点初始都是放在 "Nova" 中。 用户可以根据需要创建自己的 Availability Zone
% s( d8 S2 }$ U% v% c6 F5 h
【RamFilter】
( B* h! a$ a/ Q* k% i5 f& {6 ^
RamFilter 将不能满足 flavor 内存需求的计算节点过滤掉。
   内存超分:
对于内存有一点需要注意: 为了提高系统的资源使用率,OpenStack 在计算节点可用内存时允许 overcommit(超售),也就是可以超过实际内存大小。 超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5
ram_allocation_ratio = 1.5
6 F, R8 g- W4 E" V' X
( Y" e* S2 n4 y/ c$ r) J
其含义是:如果计算节点的内存有 10GB,OpenStack 则会认为它有 15GB(10*1.5)的内存。
. P( F7 M; P" E+ k. i# u4 Q
【DiskFilter】

; x8 c6 A: P% O
DiskFilter 将不能满足 flavor 磁盘需求的计算节点过滤掉。
   磁盘超分:
Disk 同样允许 overcommit,通过 nova.conf 中 disk_allocation_ratio 控制,默认值为 1

8 f/ C; ?/ r3 f
disk_allocation_ratio = 1.0
: D# J5 z2 P" O  H: R3 S
. N' F! W& B9 E8 T$ A- [  L
【CoreFilter】

$ g/ x! `- h0 c& ~! V6 X7 H7 y
CoreFilter 将不能满足 flavor vCPU 需求的计算节点过滤掉。
   cpu超分:
vCPU 同样允许 overcommit,通过 nova.conf 中 cpu_allocation_ratio 控制,默认值为 16
* N! S( O( z  u# O) I4 B. v
cpu_allocation_ratio = 16.0
- }6 \, {& _9 I# R1 m1 c- o3 J5 ^

* y; Z$ t5 T5 A4 x
这意味着一个 8 vCPU 的计算节点,nova-scheduler 在调度时认为它有 128 个 vCPU。 需要提醒的是: nova-scheduler 默认使用的 filter 并没有包含 CoreFilter。 如果要用,可以将 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置选项中。
( ]2 e0 W+ w, S; s

! R8 O& T3 q9 B9 l0 }# P: ~
# w$ d! z8 B1 c7 P% S& V7 D
【ComputeFilter】

# o) \: }5 n2 T4 d8 o- C6 F2 E: K
ComputeFilter 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。
ComputeFilter 显然是必选的 filter。

+ D7 c. v: Z' H/ j$ \
【ComputeCapabilitiesFilter】
3 A, \* }3 W$ m4 r  ~8 l
ComputeCapabilitiesFilter 根据计算节点的特性来筛选。
6 x- z, }( e9 F) H
这个比较高级,我们举例说明。
例如我们的节点有 x86_64 和 ARM 架构的,如果想将 Instance 指定部署到 x86_64 架构的节点上,就可以利用到 ComputeCapabilitiesFilter。
$ w6 J6 W, n1 [! P2 ], H
还记得 flavor 中有个 Metadata 吗,Compute 的 Capabilitie s就在 Metadata中 指定。
/ b$ r8 W8 P# e( t: u6 a
【ImagePropertiesFilter】
8 [9 G0 r0 s- J( R7 H" {
ImagePropertiesFilter 根据所选 image 的属性来筛选匹配的计算节点。
跟 flavor 类似,image 也有 metadata,用于指定其属性。
8 K+ ~" o: D' C# l/ P; V9 P
【ServerGroupAntiAffinityFilter】
3 T  p% ^7 A1 c+ }' c
ServerGroupAntiAffinityFilter 可以尽量将 Instance 分散部署到不同的节点上。
3 Y; X! W+ h0 {7 I
【ServerGroupAffinityFilter】
* K' j9 z% Q8 Q3 b
与 ServerGroupAntiAffinityFilter 的作用相反,ServerGroupAffinityFilter 会尽量将 instance 部署到同一个计算节点上。
* t# O7 j5 ?- n7 s; o
【Weight】
2 Q1 L1 h# u7 b1 T4 J  O
经过前面一堆 filter 的过滤,nova-scheduler 选出了能够部署 instance 的计算节点。
如果有多个计算节点通过了过滤,那么最终选择哪个节点呢?
: l7 e" ~3 ]8 u3 @9 x! p
Scheduler 会对每个计算节点打分,得分最高的获胜
打分的过程就是 weight,翻译过来就是计算权重值,那么 scheduler 是根据什么来计算权重值呢?

2 i" O7 p8 l9 Z
目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值:
空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:03 , Processed in 0.018180 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表