Windows Image Support

Monday 11 April 2016 Glance, Nova, Windows, OpenStack

最近Catalyst Cloud的公有云服务要支持Windows 镜像,但问题并不是上传个image那么简单,实际操作起来 有很多问题。下面总结一下涉及的一些问题。

License

使用Windows 镜像和 Linux 镜像的最大不同在于,你得交钱,你得交钱,你得交钱, 给微软。作为一个小规模 的公有云,我们采用的方式是同第三方合作,由第三方提供镜像,而作为公有云我们是透明的,也就是说,虽然 我们向客户对使用Windows镜像收取一定额外的费用,但这些费用会直接付给第三方,我们并不从中收费。

Aggregate and Nova scheduler

我们目前的设计是对提供Windows镜像支持的host单独创建一个aggregate。这样做主要是便于管理,也便于 对上面谈到的License问题进行计费。同时尽量控制使用最少的host。为了实现将所有创建Windows instance 的请求全部请求schedule 到特定的Windows aggregate 上,需要用到Nova的 AggregateImagePropertiesIsolation 这个 filter, 具体参见这里

这个Filter的作用就是对image中的某个属性和在aggregate中的metadata进行匹配,从而实现对aggregate的过滤。 在我们设计中我们使用的是 Glance 中image的内置属性 os_distro。因此,相应地要对Windows aggregate设置同样 的属性和值。这里需要注意的是,如果不想让instance创建在其他某个aggregate中,那么对应的也要给那个aggregate设置同样的属性但是不同的值。

Billing(计费)

计费是公有云里非常重要的一个环节,infrastructer运行的再稳定,计费弄错了都是白费。针对Windows的 instance我们目前的计费方案是决定在我们后台的OpenERP里对Windows的instance针对其flavor增加若干新的计费条目。 因为不想改Ceilometer, 因为只有在我们自己的billing系统里第一次 拿到这个instance的metrics时,通过拿到其image的os_distro属性判断其是否是Windows instance。 然后在计费系统里生成OpenERP的Sales Order line的时候对所有的Windows instance新加一条计费条目。具体patch 参见 这里