优化阈值

https://blueprints.launchpad.net/watcher/+spec/optimization-threshold

允许决策引擎将策略参数(如优化阈值)传递给选定的策略,同时策略也应向最终用户提供参数信息。

问题描述

目前策略中使用的所有参数都是硬编码的,最终用户除非修改源代码,否则无法修改它们。例如,策略 outlet_temp_control 的 THRESHOLD 至关重要且固定为 35.0,因此我们无法在不修改源代码的情况下针对特定用例进行调整。

用例

作为管理员,我可以选择一个目标来优化我的集群,Watcher 会向我显示所选策略的自定义参数列表。

作为操作员,我希望能够以一种简单的方式调整云端的策略参数。我希望能够通过 watcher 命令行来更改它,以达到最佳解决方案。

项目优先级

不相关,因为 Watcher 目前不在大型帐篷内。

提议的变更

需要以下内容来启用策略参数

  • 在 audit-template 中添加更多信息,以便 ‘watcher audit-template-show’ 向最终用户显示所选策略及其参数。 此外,将这些信息附加到 ‘watcher audit-template-create’ 的输出中。

  • 为策略参数配置添加新的 cmd 选项 ‘-p’ 到 ‘watcher audit-create’。 最终用户可以指定所有策略参数,例如 “-p threshold=45.0 -p repeat=10”。

  • 当 ‘watcher audit-create’ 时,决策引擎将在执行策略之前使用这些参数配置所选策略。

备选方案

数据模型影响

对于 audit template,需要添加所选策略及其参数的信息。 对于 audit,需要通过哈希表存储用户指定的策略参数。

audit template 的结构如下

+----------------+-------------------------------------------+
| Property       | Value                                     |
+----------------+-------------------------------------------+
| goal           | DUMMY                                     |
| strategy       | outlet_temp_control                       |
| parameter_info | {'threshold': (float, 'Temperature ...')} |
| description    | None                                      |
| name           | 1th_template                              |
| host_aggregate | None                                      |
| uuid           | 0c49a52c-4a0f-4dea-9e19-471360823aef      |
+----------------+-------------------------------------------+

audit 的结构如下

+---------------------+--------------------------------------+
| Property            | Value                                |
+---------------------+--------------------------------------+
| uuid                | b564665b-e77b-444c-a43f-3ae654b9a551 |
| audit_template_name | 1st_template                         |
| parameters          | {'threshold': 35.0}                  |
| created_at          | 2016-01-31T08:51:03+00:00            |
| updated_at          | 2016-01-31T08:51:58+00:00            |
| audit_template_uuid | 06cdba2a-069b-4618-8948-540854d8d911 |
| state               | SUCCEEDED                            |
| deadline            | None                                 |
| deleted_at          | None                                 |
| type                | ONESHOT                              |
+---------------------+--------------------------------------+

REST API 影响

Audit 创建 API: POST /v1/audit 已更改,以便在请求体中接受额外的策略参数哈希表。

例如,要基于 outlet_temperature 模板创建具有所需参数的 audit,我们可以 POST 以下内容

{
    "type": "ONESHOT",
    "audit_template_uuid": "outlet_temperature_template",
    "parameters": {
        "threshold": 35.0,
        "repeat": 10
    }
}

安全影响

策略参数控制执行过程,不正确的参数可能会导致意外行为。 此 BP 实现了参数的轻松更改,因此需要检查输入参数以确保其在合理范围内。

通知影响

其他最终用户影响

python-watcherclient 需要添加额外的命令行选项用于参数输入。 最终用户需要了解这一点才能调整策略参数。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

edwin-zhai

工作项

  • 重构代码,将策略选择从 audit 创建移动到 audit-template 创建。 因为我们只有在实例化策略后才能获得策略参数信息。

  • 扩展 audit-template 以显示所选策略及其相关参数的信息

  • 在 python-watcherclient 中添加额外的命令行选项,以便可以使用 ‘watcher audit-create -p xxx=XXX -p yyy=YYY …’ 指定策略参数。

  • 当 ‘watcher audit-create’ 时,应在验证后使用参数来配置所选策略,可以使用 voluptuous 就像操作参数检查一样。

  • 更新 Horizon 插件以确保其仍然适用于这些更改。

  • 每个具有参数的策略类都需要定义一个新函数 ‘input_parameters’ 来设置所有参数,例如 threshold。

  • 每个具有参数的策略类都需要定义一个新函数 ‘parameters_info’ 来返回参数信息,例如 ‘name’、‘type’ 和 ‘description’。

依赖项

测试

添加策略参数的单元和功能测试。

文档影响

需要更新 watcher API 文档和用户指南。 在关于策略实现的开发文档中,需要解释如何为策略添加输入参数。

参考资料

历史