调度器提示与规格扩展¶
部署和使用 Nova 的用户经常会遇到关于规格扩展(flavor extra specs)和调度器提示(scheduler hints)的问题,它们在调度决策中扮演什么角色,以及哪种是向云用户公开能力的更好选择。有几点需要考虑,而且情况会变得复杂。本文档旨在从高层次解释一下规格扩展和调度器提示的一些主要区别和缺点。
额外规格¶
通常来说,规格扩展是特定于云及其能力组织的,应该对最终用户进行抽象。规格扩展与 主机聚合(host aggregates) 相关联,其中许多还定义了如何在虚拟机监控程序(hypervisor)中创建虚拟机,例如虚拟机的看门狗操作(watchdog action)是什么。就虚拟机行为而言,规格扩展通常也与 镜像属性(image properties) 可互换,例如看门狗示例。如何将这些呈现给用户是通过规格的名称,或特定于该部署的文档,例如指导用户如何设置裸机实例的说明。
调度器提示¶
调度器提示,也简单地称为“提示”(hints),可以在服务器创建时指定,以根据启用的调度器过滤器来影响调度器对服务器的放置。提示映射到特定的过滤器。例如,ServerGroupAntiAffinityFilter 调度器过滤器与 group 调度器提示一起使用,以指示正在创建的服务器应该是指定反亲和组(anti-affinity group)的成员,并且过滤器应将该服务器放置在不同于该组所有其他当前成员的计算主机上。
提示并不比规格扩展更“动态”。最终用户在创建服务器时可以选择一个规格(flavor)和可选的提示,但最终他们可以指定的内容是静态的,并且由部署决定。
相似之处¶
调度器提示和规格扩展都可以被 调度器过滤器(scheduler filters) 使用。
两者都是完全可定制的,这意味着 Nova 中没有可接受的提示或规格扩展的白名单,不像镜像属性 [1]。
最终用户在没有部署者同意的情况下无法实现新的行为,即即使最终用户指定了
group提示,如果部署者没有配置ServerGroupAntiAffinityFilter,最终用户也无法获得anti-affinity(反亲和)行为。
区别¶
服务器的主机位置和/或行为可能会在调整大小时发生变化,如果使用的是具有与创建服务器时使用的规格扩展不同的规格扩展的规格。调度器提示只能在服务器创建时指定,不能在调整大小或任何其他“移动”操作时指定,但原始提示在移动操作期间仍然适用。
用于创建(或调整大小)服务器的规格扩展可以从计算 API 使用 2.47 微版本 检索。截至 19.0.0 Stein 发布版本,目前无法通过计算 API 检索用于创建服务器的调度器提示。
注意
已经有人提出了公开用于创建服务器的提示 [2]。在此之前,可以通过将调度器提示包含在服务器元数据中等方式来规避此限制,以便稍后通过服务器元数据进行检索。
在提示的情况下,最终用户可以选择不包含提示。另一方面,最终用户(默认策略下)无法创建新规格来避免传递带有规格扩展的规格 — 部署者控制规格。
可发现性¶
在可发现性方面,根据默认的 os_compute_api:os-flavor-extra-specs:index 策略规则,规格扩展对最终用户来说更“可发现”,因为他们可以列出规格的扩展。但是,不应期望普通最终用户理解不同的规格扩展的含义,因为它们只是键/值对。有一些针对某些“标准”规格扩展的文档 [3]。然而,这不是一个详尽的列表,它也不包括不同部署为诸如将规格链接到一组 主机聚合 之类的事情定义的任何内容,例如,在创建裸机实例的规格时,或者所选的 虚拟机监控程序驱动程序 可能支持的规格扩展。
从最终用户的角度来看,调度器提示的可发现性不如规格扩展。API 请求模式 [4] 中定义了一些标准提示。然而
这些提示与调度器过滤器相关联,而调度器过滤器是每个部署都可以配置的,因此,例如,
JsonFilter可能未启用(默认不启用),因此query提示将不起作用。由于模式中的
additionalProperties: True条目,调度器提示不限于上游 Nova 代码中的模式内容。这使得部署可以在该 API 请求模式之外为他们自己的 自定义调度器过滤器 定义自己的提示,而这些提示不是上游 Nova 代码的一部分。
互操作性¶
最终用户真正使用调度器提示的唯一方法是基于特定云部署为其设置提供的文档(或 GUI/SDK)。因此,如果 **CloudA** 在其文档中定义了自定义调度器过滤器 X 和该过滤器的提示,那么最终用户应用程序只能在该云上使用该提示运行,并期望它能按文档中的方式工作。如果用户将其应用程序迁移到 **CloudB**,而 CloudB 没有该调度器过滤器或提示,他们将获得不同的行为。
因此,很明显,规格扩展和调度器提示都不是可互操作的。
如何选择?¶
当涉及到定义自定义调度器过滤器时,您可以使用提示或规格扩展。如果您在创建虚拟机时需要规格扩展来处理虚拟机监控程序中的某些行为,或者能够稍后检索用于创建虚拟机的原始规格扩展,那么您不妨直接使用规格扩展。如果您不需要这些,那么从最终用户的角度来看,调度器提示可能是公开特定调度行为的明显选择,但它必须有良好的文档记录,并且最终用户应该意识到该提示在其他云上可能不可用,而且他们也没有什么好方法来找出这一点。从长远来看,规格扩展可能比提示更标准化,因此最终建议选择规格扩展。