支持 Cinder 可用区

https://blueprints.launchpad.net/sahara/+spec/support-cinder-availability-zones

扩展 API 以支持指定创建卷的 Cinder 可用区。

问题描述

为了实现更精细的集群卷拓扑,将 Cinder 可用区分配给节点组可能是有益的。

用例

  • 作为最终用户,我希望将 namenode 卷生成在常规 AZ 中,而将 datanode 卷生成在高性能 ssd-high-io AZ 中。

提议的变更

它在 NodeGroup 和 NodeGroupTemplate 对象中添加了一个新的 volumes_availability_zone 属性。设置后,它将修改 direct 和 Heat 引擎,以强制将卷创建到正确的 AZ 中。

替代方案

数据模型影响

此更改将在 sahara 数据库中添加 volumes_availability_zone 列,位于 volumes_per_nodevolumes_size 旁边。受影响的表是 node_groupsnode_group_templatestemplates_relations

此更改将伴随数据库迁移。

REST API 影响

处理节点组和节点组模板的每个 API 方法都将具有一个额外的(可选的)volumes_availability_zone 参数,如果设置了 volumes_per_node 且不为零,则将考虑该参数。

示例

{
  "name": "cluster1",
  "node_groups": [
    {
      "name": "master",
      "count": 1,
    },
    {
      "name": "worker",
      "count": 3,
      "volumes_per_node": 1,
      "volumes_size": 100,
      "volumes_availability_zone": "ssd-high-io"
    }
  ]
}

其他最终用户影响

python-saharaclient 应进行修改以集成此新功能。

部署者影响

需要使用以下命令迁移 DB 版本:

sahara-db-manage --config-file /etc/sahara/sahara.conf upgrade head

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

sahara-dashboard 应进行修改以集成此新功能。

实现

负责人

主要负责人

adrien-verge

工作项

  • 在 NodeGroup 和 NodeGroupTemplate 对象中添加一个 volumes_availability_zone 属性。

  • 当用户指定(可选的)volumes_availability zone 时,检查其是否存在。

  • 在 direct 引擎中,将 volumes_availability_zone 参数包含在对 cinder.client().volumes.create() 的调用中。

  • 在 Heat 引擎中,将 availability_zone 属性添加到 sahara/resources/volume.heat 中。

依赖项

测试

  • 使用指定的 volumes_availability_zone 测试集群创建。

  • 使用指定的错误的 volumes_availability_zone 测试集群创建。

文档影响

需要更新文档,在与节点组模板创建和集群创建相关的部分。

参考资料