支持卷类型中的可用区¶
https://blueprints.launchpad.net/cinder/+spec/support-az-in-volumetype
此蓝图建议支持设置卷类型的可用区。
问题描述¶
在全新部署的区域环境中,卷类型(SSD、HDD 或其他)可能仅存在于部分可用区,但最终用户不知道哪个可用区允许使用特定的卷类型,并且他们无法意识到只有在无法将卷调度到后端时才会发生这种情况。
用例¶
管理员可以更新卷类型的可用可用区,并且 UI 或最终用户可以知道当前可用区中有效的卷类型。
提议的变更¶
根据 Rocky PTG 期间的讨论结果 [1],我们建议使用卷类型的 extra specs 来支持此功能。由于 extra specs 旨在通用使用,我们建议引入一个保留键 os-extended:availability_zones 用于 extra specs。管理员可以按照以下格式创建/更新此属性以支持卷类型中的可用区
{
"volume_type": {
"id": "6685584b-1eac-4da6-b5c3-555430cf68ff",
"name": "az_type",
"description": "availability zone type 001",
"is_public": true,
"extra_specs": {
"os-extended:availability_zones": "az1,az2,az3"
}
}
}
注意:我们的能力过滤器将跳过任何键格式为“prefix:key_name”的 extra spec。由于此用例与 UI 或其他端点问题更相关,我们还建议支持通过 extra specs 过滤卷类型。
Request example:
/v3/{project_id}/types?extra_specs={'os-extended:availability_zones':'az1'}
此外,值得注意的是,在过滤期间,extra spec 可用区将以与其余部分略有不同的方式处理。Cinder 将始终尝试对此特定值进行不精确匹配,例如,当 extra spec os-extended:availability_zones 设置如下时,az1 和 az2 都是查询的有效输入
"os-extended:availability_zones": "az1,az2,az3"
为了在 Cinder 中完全支持类型的可用区,还需要对 Cinder 框架进行一些更改。
现在,在创建新卷时,将计算卷类型和其他输入(用户输入、源资源或默认配置)之间的可用区交集,如果此交集为空,将引发 400 Bad Request 错误。
现在我们可以将可用区列表传递给调度器进行创建或重定型,工作流和
AvailabilityZoneFilter将更新以支持此功能。
注意:如果类型的 availability_zones 属性已设置但值为空,Cinder 也会引发 400 Bad Request 错误。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
现在 Cinder 支持使用 extra specs 过滤卷类型
GET: /V3/{tenant_id}/types?extra_specs={'spec_name':'spec_value'} Response BODY: { "volume_types": [{ "name": "volume_type1", "description": "volume_type1", "extra_specs": {"spec_name": "spec_value"}, }] }这些更改需要 API 版本更新。
Cinder 客户端影响¶
卷类型的 CLI 将根据服务器端的 API 更改进行更新。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
使用 extra specs 过滤卷类型时,性能会略有下降。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
tommylikehu(tommylikehu@gmail.com)
工作项¶
支持卷类型 API 中的可用区和 extra spec 过滤。
更新 cinder 工作流以支持可用区列表。
添加相关的单元测试用例。
更新 cinderclient 以支持使用 extra specs 过滤卷类型。
依赖项¶
无
测试¶
添加单元测试以涵盖此更改。
文档影响¶
更新 API 参考。
添加管理员文档以宣传保留键
os-extended:availability_zones,并解释何时以及如何使用它。