为创建服务器添加主机和超visor主机名标志¶
https://blueprints.launchpad.net/nova/+spec/add-host-and-hypervisor-hostname-flag-to-create-server
当管理员指定 forced_host/forced_node 来创建服务器时,nova 将绕过调度器过滤器。本规范建议在新的 REST API 微版本中添加两个新参数 host 和 hypervisor_hostname,作为指定的主机和/或节点来创建服务器,而不会绕过调度器过滤器。
问题描述¶
当管理员指定 forced_host/forced_node 来创建服务器时,nova 将绕过调度器过滤器。
如果没有调度器过滤器,失败的实例可能会浪费精力尝试启动,因为由于网络提供程序、PCI 设备、NUMA 拓扑等原因,失败是不可避免的。
我们可能会尝试声明主机上不可用的资源,和/或由于没有运行过滤器,我们没有传递任何资源声明的限制,从而无意中过度订阅主机。
用例¶
此更改为系统添加了以下用例
管理员希望请求在指定计算主机和/或节点上创建服务器,并希望请求通过调度器过滤器进行验证,而不是强制执行。
提议的变更¶
将
host和hypervisor_hostname添加到 REST APIPOST /servers。添加新的策略
os_compute_api:servers:create:requested_destination,以限制host和hypervisor_hostname仅供管理员使用。将
host和hypervisor_hostname转换为 RequestSpec.requested_destination,它仍然通过调度器过滤器。
注意
我们仍然保留此新微版本中的旧机制 az:host:node,以便用户可以选择强制目标或请求目标,在服务器创建期间。
备选方案¶
存在一个名为 JsonFilter 的过滤器,默认情况下未使用。此过滤器允许使用简单的基于 JSON 的语法来选择主机。如果我们要指定名为“openstack-node”的主机,我们可以添加如下参数:--hint query='["=","$host","openstack-node"]'。
除了此过滤器的文档中的警告外,如果它是可配置的,则可能并非在所有云中都存在,因此不能保证互操作性。
存在一个名为 AggregateInstanceExtraSpecsFilter 的过滤器,默认情况下未使用。此过滤器检查聚合元数据是否满足与实例类型关联的任何额外规范(没有范围或范围限定为 aggregate_instance_extra_specs)。如果我们要指定名为“openstack-node”的主机,我们可以创建一个名为“test-ag01”的聚合,其中包含主机“openstack-node”。然后,我们使用 host=openstack-node 设置此聚合的元数据。最后,我们创建一个 flavor 并设置此 flavor 的元数据,其中包含 aggregate_instance_extra_specs:host=openstack-node。因此,当我们选择 flavor 来创建实例时,所有实例都将在主机“openstack-node”上。
在这种情况下,为大型云中的每个主机/节点创建并固定到该聚合的聚合和 flavor 是不可管理的,并且还可能泄露有关云的部署详细信息,并且当有如此多的可用区来模拟这些聚合时,也会让用户感到困惑。这对于大型云中的此用例来说不是一个现实的选择。
数据模型影响¶
无
REST API 影响¶
在新的微版本中,将 host 和 hypervisor_hostname 标志添加到 API 中,两者都是可选的
POST /servers
{
"server": {
...
"host": "openstack-node",
"hypervisor_hostname": "openstack-node"
}
}
仅显示 server 的 body 数据 JSON schema 定义中的新参数
'host': parameter_types.hostname
'hypervisor_hostname': parameter_types.hostname
根据是否设置 host 和 hypervisor_hostname,操作如下
如果在请求体中提供了
host,首先 Compute API 将检查是否可以从 DB 中获取此host对应的计算节点。如果不能,将向用户返回HTTP 400 Bad Request。如果在请求体中提供了
hypervisor_hostname,首先 Compute API 将检查是否可以从 DB 中获取此hypervisor_hostname对应的计算节点。如果不能,将向用户返回HTTP 400 Bad Request。如果在请求体中同时提供了
host和hypervisor_hostname,首先 Compute API 将检查是否可以从 DB 中获取host和hypervisor_hostname对应的计算节点。如果不能,将向用户返回HTTP 400 Bad Request。
注意
新的(host 和/或 hypervisor_hostname)和旧的(az:host:node)机制是互斥的。如果两者同时在同一个请求中指定,API 将返回 HTTP 400 Bad Request。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
更新 python-novaclient 和 python-openstackclient 以支持新的微版本。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
朱博翔 (zhu.boxiang@99cloud.net)
工作项¶
为此更改添加新的微版本。
依赖项¶
无
测试¶
将提供功能和单元测试。
将提供一些场景(在请求的主机和/或节点上创建服务器,然后将其移动 - 实时迁移、撤离、冷迁移和卸载 - 以确保它移动到另一个主机,并且不受原始请求目标的限制)。
文档影响¶
API 文档应更改为介绍此新功能。
参考资料¶
Train PTG etherpad: https://etherpad.openstack.org/p/nova-ptg-train
历史¶
发布名称 |
描述 |
|---|---|
Train |
引入 |