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 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。