跳转到: 导航, 搜索

AdministrativeVMs

  • Launchpad Entry: NovaSpec:administrative-vms
  • 创建: 04/17/2011
  • 贡献者:

总结

创建一个标准的方式来定义管理虚拟机/容器。这些虚拟机可以连接到项目网络(或管理网络),但由提供商管理,而不是最终用户。

发布说明

提议的蓝图将通过在与实例相关的API中添加额外的可选类别参数来扩展当前外部API。用户应该能够继续使用当前版本,并且不会注意到任何行为上的差异。这一组更改还需要数据库模式更新和迁移。

原理

目前我们有一种类型的管理虚拟机,它通过自定义代码路径(pipelib.py)处理。这种性质的虚拟机对于提供各种云服务非常有用,例如负载均衡、队列系统、数据库、负载均衡器、网络桥接组件等。我们需要一种一致的方式来定义这些管理虚拟机,以及控制它们API。这种通用定义应该支持容器和传统的虚拟机,甚至可能位于相同的基础设施上。

某些类型的管理虚拟机可能由提供商管理,而另一些类型可能由用户通过特殊接口/UI间接管理。这种实例的一个例子是用户创建的虚拟存储阵列/控制器,但用户无法直接访问它们(只能访问GUI等)。

用户故事

  • 允许在项目中创建由云管理员或用户间接管理的特殊实例/虚拟机
  • 允许不同类型的管理实例
    • 区分普通计算和管理实例的方式
    • 过滤/阻止对管理实例的操作
  • 能够指定管理实例的要求(如硬件要求)
    • 按实例类型
    • (未来) 按实例
  • (未来) 能够为管理实例注册特殊的规格
  • 在兼容的节点上运行管理实例(例如,允许的节点或匹配硬件要求的节点)
  • 管理虚拟机是从特殊镜像创建的
    • 区分普通镜像和管理镜像的方式
    • 过滤/阻止对已注册的管理镜像的操作
  • 允许将卷分配给管理实例
    • 区分普通卷和分配给管理实例的卷的方式
    • 过滤/阻止对管理卷的操作
    • (未来) 允许将管理卷分配给多个管理实例

前提条件

设计

考虑到管理虚拟机是具有特殊参数的计算实例,建议扩展当前API并添加一个新的实例类别参数来区分实例类型。

通常,实例类别的处理方式与实例类型/规格类似。

支持的实例类别操作

  • 创建
  • 更新
  • 销毁
  • 清除
  • 不同的 get_by_*

每个类别将具有

  • 唯一的类别名称
  • 描述
  • 默认镜像ID
  • (未来) 默认实例类型/规格
  • 特殊的硬件要求或其他元数据,将被调度器使用(以键/值形式)
    • 10GbE网卡的可用性
    • 具有SR-IOV的网卡
    • 本地SSD存储
    • 等等…

常规EC2 API可用于生成/终止/重启/描述某些类型的管理实例,而其他类型的实例可能通过直接调用compute_apis来控制。

如果未指定类别,这些API的默认行为将不会改变

  • DescribeInstances API将仅向普通用户报告非管理实例,或向管理员用户调用报告所有实例
  • RunInstances 默认假定 Regular 类别
  • 普通用户(非管理员)在未指定类别名称的情况下对管理实例执行的终止/重启实例操作将被拒绝

将类别放在单独的表中,将来将有机会在实例规格和类别之间建立关系,并为每个实例类别注册规格。它还将允许我们存储不同类别的默认值,并简化实例的过滤(检查实例类别ID而不是解析元数据)

镜像过滤

  • DescribeImages 调用中,如果用户不是管理员,则过滤掉为管理实例注册的镜像(在instance_categories表中)

卷过滤

  • 如果用户不是管理员,则在 DescribeVolumes 调用中,过滤掉分配给管理实例的卷

实现

UI 变更

代码变更

Networking

TBD 在多网卡之后

身份验证

待定

迁移

  • 添加新的 instance_categories 表,与实例通过 instance_cat_id 建立 1..N 的关系
  • 在 instances 表中添加新的字段 instance_cat_id。默认填充与普通实例类型关联的类别ID。如果实例的 image_id 等于 FLAGS.vpn_image_id - 类别ID 设置为 FLAGS.instance_cat_vpn

测试/演示计划

这不必在规范接近 Beta 之前添加或完成。

未解决的问题

这应该突出显示需要在进一步的规范中解决的任何问题,而不是规范本身的问题;因为任何存在问题的规范都无法获得批准。

BoF 议程和讨论

使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。