Dell EMC ScaleIO 作为临时存储后端¶
https://blueprints.launchpad.net/nova/+spec/scaleio-ephemeral-storage-backend
添加对 ScaleIO 作为临时存储后端的支持。
问题描述¶
Nova 目前不支持 Dell EMC ScaleIO - 另一种软件定义存储 [1] - 作为临时存储后端。ScaleIO 已经通过 Cinder(和 os-brick)支持卷托管。让 Nova 使用 ScaleIO 作为临时磁盘是合理的(并且客户也提出了要求)。
所需的受支持功能集应与 Ceph 实现的一致,包括实时迁移,但排除与 Glance 优化交互相关的特性,例如克隆或直接快照,因为 Glance 目前不支持 ScaleIO。
在开发过程中,必须特别考虑的主要 ScaleIO 特性是
ScaleIO 设备必须在使用前显式连接到计算主机,并在使用后断开连接。
ScaleIO 可以提供大小为 8 Gb 倍数的卷。
用例¶
云操作员为某些计算节点选择 ScaleIO 作为临时后端。他/她确保节点上没有正在运行的实例。他/她确保 SDC(ScaleIO Data Client)已正确安装在节点上,并对 nova-compute 配置文件进行适当更改以设置它们使用 ScaleIO 集群。在节点上重新启动 nova-compute 服务后,新的实例将使用 ScaleIO 作为所有临时磁盘。
除了管理实例的现有用例之外,ScaleIO 没有其他特定用例,由最终用户和/或云操作员管理。最有价值的现有用例是:创建/删除、实时迁移、调整大小/还原调整大小、创建快照、主机撤离。
提议的变更¶
将引入一个新的镜像类型、一个新的镜像后端类和一个新的镜像模型类,并在整个 nova.virt.libvirt 包中使用,就像 rbd 和 lvm 镜像类型一样。
连接/断开实例磁盘所需的的操作将在 nova.virt.libvirt.driver 的多个适当位置调用。这些调用将用 if 子句包装,以便显式地为新的后端执行它们,就像 rbd 和其他后端一样。
ScaleIO 镜像后端将无法创建大小与 8 Gb 倍数不同的磁盘。唯一的例外是救援磁盘,它是在没有指定大小时创建的。在这种情况下,后端会将救援镜像的大小近似到 8 Gb 的倍数。
配置驱动程序将不会托管在 ScaleIO 上,而是放置在实例的本地目录中,就像默认情况下发生的那样。使用 iso9660 格式,这不需要太多的空间(Nova 仅出于遗留原因支持 vfat 格式)。
备选方案¶
与其为 ScaleIO 实现单独的临时存储后端,不如开发 Cinder 临时存储后端,该后端显然可以服务于 Cinder 支持的任何类型的物理存储(包括 ScaleIO)。虽然之前的尝试 [2] 获得这样的后端失败了,但最近社区再次讨论了这个想法。但是,目前还没有针对此任务的新规范。此外,实现似乎更加复杂,可能需要额外的重构,因为该后端特别用于替换 Ceph 后端,而 Ceph 后端的实现(显式和隐式)在整个 libvirt 驱动程序中分布非常广泛。但是 Ceph 后端被广泛使用,因此完成此任务对于在 Cinder 后端中支持 Ceph 后端的每个功能非常重要。因此,看起来 Cinder 后端无法很快实现,需要 2-3 个发布周期。另一方面,我们有 ScaleIO 后端,它已经为之前的 OpenStack 版本(自 Juno 以来)实现,并且也适用于各种部署工具 [3]。在这个主题上的另一个问题是,ScaleIO 后端是否会给从基于卷的临时后端到 Cinder 后端的无缝过渡系统带来很多复杂性。由于有多个这样的后端(LVM、Ceph),并且 Cinder 能够获取未管理的卷,因此过渡系统可能具有很多通用代码,以及少量与后端相关的部分。因此,在过渡系统中添加对 ScaleIO 的支持也不会带来很大的额外工作。
与其在具有错误磁盘大小的风味上运行实例失败,不如
将磁盘大小近似到最接近的 8 Gb 倍数。在 Nova 文档中编写建议,让云操作员使用 8 Gb 的倍数作为磁盘大小。
实例将获得比请求的更大的磁盘。这使得 Nova、Ceilometer 等收集的统计信息毫无意义。此外,快照大小也将大于预期。
与之前相同,但也要修复实例属性(例如 root_gb)。
目前 Nova 还没有设计成风味和实例属性不同。
在具有近似大小的 ScaleIO 卷上创建一个请求大小的分区,并将该分区作为设备传递给 libvirt。
此解决方案仅适用于精简配置类型。需要进行额外的调查才能证明此想法可行,包括调整大小功能。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
无。
其他部署者影响¶
必须安装和配置 ScaleIO 集群。必须在集群中创建一个保护域和一个存储池来存储临时磁盘。ScaleIO SDC 组件必须安装在受影响的计算节点上。这些 SDC 必须在集群中注册。
Nova 的计算配置文件必须包含这些选项才能使 ScaleIO 镜像后端工作
[libvirt]
images_type = sio
[scaleio]
rest_server_ip = <ScaleIO Gateway IP>
rest_server_username = <ScaleIO Gateway user>
rest_server_password = <ScaleIO Gateway user password>
default_protection_domain_name = <ScaleIO protection domain>
default_storage_pool_name = <ScaleIO pool name>
可选参数
[scaleio]
default_provisioning_type = <thick (default) or thin>
verify_server_certificate = <True or False (default)>
server_certificate_path = <Path to the certificate>
default_sdcguid = <ScaleIO SDC guid of compute host>
rest_server_port = <ScaleIO Gateway port, 443 by default>
为了获得更大的灵活性,风味的 extra_spec 可以包含
键 |
值 |
|---|---|
disk:domain |
ScaleIO 保护域 |
disk:pool |
ScaleIO 存储池名称 |
disk:provisioning_type |
thick 或 thin |
如果风味中未设置键,则使用来自配置文件的默认值。
打算与 ScaleIO 镜像后端一起使用的每个风味都必须具有 8 Gb 的倍数的磁盘大小。可以使用零根磁盘大小的风味来创建仅基于卷的实例,因为不建议创建这样的风味。同时,零临时/交换大小将以通常的方式处理。
如果 OpenStack 部署具有使用任何其他镜像后端的计算节点,并且有必要在那里拥有 ScaleIO 不兼容的风味,可以使用基于风味 extra spec 和主机聚合的调度程序过滤来实现。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
Feodor Tersin <ftersin@hotmail.com>
工作项¶
一次性实现所有提议的更改。
依赖项¶
使用新的库 siolib [4] 通过 REST API 与 ScaleIO 通信。
测试¶
单元测试。
将使用新的第三方 ScaleIO CI 进行测试,使用与 ScaleIO Cinder CI 相同或相似的基础设施。
不会引入新的 Tempest 测试。
文档影响¶
将添加有关将 ScaleIO 用于临时存储后端的文档。
这里有一个需要更改的潜在文档页面列表。
文档页面 |
变更 |
提及共享块存储作为 ComputeNode 存储,并提及 ScaleIO |
|
提及 ScaleIO 作为临时存储的选项 |
|
添加一个部分,解释如何配置计算以使用 ScaleIO,如何在风味中调整什么,如何将 ScaleIO 主机与其他风味隔离 |
|
提及 scaleio 部分 |
|
描述完整的 scaleio 部分 |
|
将 sio 添加到 images_type 选项的可用值列表中 |
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Pike |
引入 |
Queens |
重新提出 |