在 Watcher 中构建裸金属数据模型¶
https://blueprints.launchpad.net/watcher/+spec/build-baremetal-data-model-in-watcher
对于拥有大量虚拟机和物理主机的数据中心,总功耗巨大。当工作负载不重时,Watcher 可以通过触发关闭一些空闲主机的请求来减少功耗,而当工作负载增加时,Watcher 将触发“开启”请求以满足服务需求。
这个“节能”目标可以通过在 Watcher 中添加四个特性来实现:1) 在当前的 Watcher 集群数据模型中构建一个新的裸金属数据模型 2) 在 Watcher 中添加新的动作“开启”和“关闭” 3) 实现基于‘裸金属’和‘计算’数据模型的新策略,该策略可以触发‘计算’和‘裸金属’动作。 4) 通过 ironic 通知更新裸金属数据模型
本规范实现了第一个特性:构建一个新的裸金属(ironic)数据模型,独立于当前的 Watcher 集群数据模型。
问题描述¶
在“开启”和“关闭”动作中,Watcher 使用 ironic(ironic 调用 IPMI 工具)向 nova 发送请求以开启/关闭由 nova 管理的物理机。因此,Watcher 应该知道目标主机(s)的 hypervisor_id 和 node_uuid,以及它们的映射列表。在本规范中,我们将构建一个裸金属数据模型,用于描述 hypervisor_id 和 node_uuid 之间的这种映射列表
让我们举个例子,如果我们想关闭主机 3 和 4,如下所示。但是 Watcher 不知道它们的 node_uuid。
[root@host_192_51_151_2 ~(keystone_admin)]# nova hypervisor-list +—-+———————+——-+———+ | ID | Hypervisor 主机名 | 状态 | 状态 | +—-+———————+——-+———+ | 3 | host_192_51_151_3 | up | enabled | | 4 | host_192_51_151_5 | up | enabled | | 5 | host_192_51_151_7 | up | enabled | | 7 | host_192_51_151_8 | up | enabled | | 9 | host_192_51_151_9 | up | enabled | | 11 | host_192_51_151_10 | up | enabled | +—-+———————+——-+———+
因此,我们建立 hypervisor_id 和 node_uuid 之间的映射列表。就像下面的例子一样: +—-+———————+————————————–+———+ | ID | Hypervisor 主机名 | node_uuid | Extra | +—-+———————+————————————–+———+ | 3 | host_192_51_151_3 | 4f37180e-c310-4327-a286-d5ab9ffc6497 | | | 4 | host_192_51_151_5 | 4f37180e-c310-4327-a286-d5ab9ffc6498 | | | 5 | host_192_51_151_7 | 4f37180e-c310-4327-a286-d5ab9ffc6499 | | | 7 | host_192_51_151_8 | 4f37180e-c310-4327-a286-d5ab9ffc6500 | | | 9 | host_192_51_151_9 | 4f37180e-c310-4327-a286-d5ab9ffc6501 | | | 11 | host_192_51_151_10 | 4f37180e-c310-4327-a286-d5ab9ffc6502 | | +—-+———————+————————————–+———+
“Extra”字段用作可扩展字段。
总而言之,从 Watcher 用户的角度来看,整个过程从通过‘nova hypervisor-list’获取 compute.node.id 开始,然后使用‘ironic node create’手动创建 ironic 节点,如提议的变更部分所述。在第二步中,生成 ironic_node_id 并建立关联。有了所有这些 id 和关联信息,现在我们可以在 watcher 中创建一个“开启和关闭”审计,以进行优化。
用例¶
作为开发人员,我希望在 watcher 中拥有一个新的裸金属数据模型,独立于计算 CDM,以获取 hypervisor_id 和 ironic node_uuid 之间的映射列表。
提议的变更¶
在创建节点或更新节点信息时,将“compute.node.id”信息添加到 Ironic 节点的“extra”字段中。就像下面的两种方式
如果我们在创建 ironic 节点之前无法获取 compute.node.id。 1) ironic node-create 2) nova hypervisor-list 3) ironic node-update
如果我们在创建 ironic 节点之前可以获取 compute.node.id。 1) nova hypervisor-list 2) ironic node-create
- ironic node-create [-c <chassis>]
-d <driver> [-i <key=value>] [-p <key=value>] [-e <key=value>] [-u <uuid>] [-n <name>] [–network-interface <network_interface>] [–resource-class <resource_class>]
- ironic node-create -d your_driver agent_ipmitool
-i ipmi_address=<ipmi_ip> -i ipmi_username=<ipmi_username> -i ipmi_password=<ipmi_password> -e compute_node=compute.node.id -u ironic_node_uuid
compute.node.id 是保存在 CCDM(Compute Cluster Data Model)中的计算节点 ID
2) 在 watcher 上,通过定期请求 Ironic 服务构建裸金属集群数据模型 (BCDM)。裸金属集群数据模型结构如下
- {
“uuid”: “4f37180e-c310-4327-a286-d5ab9ffc6497”, “power_state”: “power on”, “maintenance”: false, “maintenance_reason”: null, “extra”: {“compute_node_id”: 1} }
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
Watcher 消费一些 Ironic 通知。我们将其留作未来工作,如下面的 bp 所示: https://blueprints.launchpad.net/watcher/+spec/update-bare-metal-data-model-by-ironic-notifications
其他最终用户影响¶
Watcher 可能会报告 Ironic 资源的陈旧表示,为了减少这种陈旧性,他们可以减少配置中的同步间隔。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
<li-canwei2>
- 其他贡献者
<alexchadin>,<yumeng-bao>
工作项¶
添加裸金属数据模型。
依赖项¶
无
测试¶
在 Watcher 决策引擎 上进行单元测试。Tempest。
文档影响¶
系统架构文档将被更新,因为模型驱动程序目前只能访问 nova 和 glance。
参考资料¶
无
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |