尊重 Nova 调度器过滤器¶
https://blueprints.launchpad.net/watcher/+spec/scheduler-filters
问题描述¶
此规范延续了 nova-policies 蓝图的想法。 Watcher 的一项全局业务需求是尊重 Nova 调度器过滤器,至少在亲和性/反亲和性过滤器的上下文中。 许多企业客户为其云应用程序构建 HA 架构,他们希望尊重虚拟机策略,这些策略表示为 Nova 调度器过滤器。 在 VM 启动过程中可以使用以下典型过滤器:* 将某些 VM 保留在 不同主机上(以实现 HA 兼容性)。 * 将 VM 放置在指定的宿主 聚合或 可用区内。 * 仅将 VM 放置在启用且 核心兼容的主机上。
目前,Nova 没有公开 API 暴露给 Nova 调度器的 select_destinations 方法。 此方法仅供 Nova 内部使用,并且从 Watcher 等第三方服务访问此方法不是好的架构实践。
用例¶
作为 OpenStack 操作员,我希望在考虑 Nova 调度器过滤器的情况下执行审计。
提议的变更¶
主要提议是添加 Watcher 过滤器可插拔系统,该系统将在审计过程中使用一组 Nova 兼容的过滤器。 我们无法直接导入它们(因为 OpenStack 项目只能导入项目客户端来相互交互),因此我们需要以 Nova 相同的方式实现每个过滤器。 Nova 调度器使用内部对象 host_state 和 spec_obj,它们分别表示主机和实例属性。 我们可以用 CDM 中的相应节点替换这些对象。 CDM 通过通知总线系统消耗通知。 CDM 节点中属性的扩展将取决于特定的过滤器。 如果我们可以消耗有关可用区或主机聚合更改的通知,我们可以将它们添加到 CDM 作为主机属性。 否则,我们可以通过 API 调用获取它们。
主要逻辑应保存以保持与适当的 Nova 过滤器的兼容性。 让我们看一下 Nova 的 DifferentHost 过滤器
def host_passes(self, host_state, spec_obj):
affinity_uuids = spec_obj.get_scheduler_hint('different_host')
if affinity_uuids:
overlap = utils.instance_uuids_overlap(host_state, affinity_uuids)
return not overlap
# With no different_host key
return True
应在 decision_engine 文件夹中创建 filter 子文件夹。 它将包含 manager.py 和 filters/ 文件夹,其中包含过滤器插件。 过滤器管理器将加载启用的插件,并通过加载的插件列表将虚拟机与目标主机传递。 应将 FilterManager 类的实例添加到 BaseStrategy 类作为类属性,以便每个策略过滤 VM。 应修改策略以支持过滤器。 可以将方法 self.verify_destination(instance, host) 添加到 BaseStrategy 类以简化其在其他策略中的使用。 由于每个策略的独特工作流程,因此无法在策略中使用过滤器的通用点。
在当前情况下,这是架构设计和业务需求之间的权衡。 我建议将其视为临时解决方案,直到我们找到更好的解决方案为止。
备选方案¶
继续使用 Watcher 范围来隔离云集群的资源。
另一种解决方案是 enhance-watcher-applier-engine 蓝图。 我们不是采取确切的行动,而是采取所有可能的行动,并将决策交给 Nova 调度器。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
Watcher 配置文件应包含 filters 选项,其中包含按策略启用的过滤器字典,例如
{"basic": "AvailabilityZoneFilter, DifferentHostFilter",
"zone_migration": "AvailabilityZoneFilter"}.
默认情况下,应将 AllHostsFilter 关联到每个策略,以在不限制的情况下通过每个虚拟机。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
alexchadin
工作项¶
添加有关过滤器的文档页面
更新策略开发人员的文档
将过滤器管理器添加到 watcher/decision_engine/manager.py
添加亲和性/反亲和性、主机聚合和可用区过滤器
添加单元和功能测试
更新配置文件以支持 filters 选项。
依赖项¶
无
测试¶
应添加适当的单元和功能测试。
文档影响¶
添加有关过滤器的文档页面
更新策略开发人员的文档
参考资料¶
无
历史¶
无