云主机镜像发布系统构想




现状

制作

  1. sa+开发准备模板,提交到gerrit,并交叉review
  2. merge模板,sa使用镜像制作工具(oz)制作镜像(windows镜像除外)
  3. 对于初次制作的镜像,可能需要sa手工处理各种特殊问题(如网卡配置、服务配置等)

测试

  1. sa制作完毕,上传镜像到联调环境,一般设置为私有并共享给qa
  2. qa进行各种验证(部分已自动化)
  3. qa测试发现问题,则通知开发和sa进行分析解决
  4. sa和开发再次修改模板,并制作新镜像
  5. qa测试通过则通知sa上传到对应的公共测试、线上环境
  6. sa上传到线上环境admin账号下,并共享给qa
  7. qa在线上进行最后的验证,不通过则重新制作镜像
  8. qa测试完毕通知sa将镜像设置为public正式对外提供

发布

  1. sa负责上传到联调、演练、公共测试、线上环境
  2. sa负责镜像版本在各个环境的更新同步
  3. 目前线下环境镜像版本比较混乱,环境和镜像比较多,靠sa人肉维护不太现实

目标

制作

  1. 尽量自动化
  2. 做完的镜像要有初步检查脚本(比如各种软件是否安装成功,配置是否修改正确,二进制是否替换等),建议和镜像模板一起提交检查脚本
  3. sa根据初步检查结果决定是否要重新制作镜像
  4. 较小的配置改动,建议通过mount镜像的方式修改,而不是再次制作新镜像(有qa二次验证,不用担心这种修改导致镜像有问题)

测试

  1. 尽量自动化,最好全部自动化
  2. 可以实现两个检查脚本,一个用来检查镜像内部配置(可以参考sa的初步检查脚本并进行用例扩充),二是外部的云主机各种操作脚本(创建删除、挂卸卷、挂卸载网卡、迁移修改规格等)

发布

  1. 开发一个镜像发布管理系统(具有预发布功能),并使用glance上传镜像时可以从指定http地址下载镜像功能实现镜像自动发布
  2. 系统可以执行发布、查看、修改、共享、删除、弃用等镜像管理操作
  3. 系统可以查看镜像版本,与sa制作的最新镜像的版本差异等
  4. 系统可以更新指定镜像
  5. 其他附加功能
  6. 具体功能参考“发布场景”描述

发布场景

账户管理

分为多个权限级别,如sa、qa、dev、ro等,其中sa拥有最高权限,可以增加删除账号,sa的账号需要手工在数据库中初始化,其他账号由sa创建管理。

用户登录

用户输入用户名密码即可登录,可以限制仅在办公区访问。

sa预发布镜像到发布服务器

sa制作完成后,将镜像拷贝到发布NOS等存储服务(对外需提供无需认证的http下载链接,用来glance-api下载镜像),该服务器要可以与所有环境的glance服务的网络连通,如果无法保证网络连通性,则需要部署多个发布服务器。

sa发布镜像到nos之后,登录发布系统,填写或者选择已有的镜像发行版类型(如Debian)、版本(如7.0)、位数(如64bit)、校验和(如镜像md5值)、镜像描述信息、镜像存放地址(如nos下载链接),完成预发布。

qa测试新制作镜像

sa预发布新镜像后,qa在web上切换到测试的环境(对应于发布系统与各环境网络全部连通场景),或者登录测试环境的发布服务web页面(对应各个环境独立部署发布服务场景),选择要测试的镜像(可以首先通过“操作”的“镜像详情”查看镜像制作时间、版本、md5等信息),点击“操作”中的预发布,预发布的镜像为“私有”属性,隶属于配置的管理员用户,qa通过“操作”中的“共享管理”功能,将预发布的镜像共享到自己的测试账号下,进行镜像测试,测试通过后,点击“操作”中的“测试通过”,表示该镜像已通过测试,可以发布到各个环境,只有“测试通过”的镜像才可以进行发布操作。

sa发布镜像到线上环境

首先是选择“预发布”操作,之后“共享管理”给qa测试,“测试通过”后,sa选择“发布”即可完成。

sa/qa/开发查看各环境镜像版本

打开相关web页面即可查看

sa/qa同步更新线下环境镜像版本

根据相关环境的镜像信息即可进行相关的发布操作,如果已经确认测试完毕的镜像,预发布后直接点测试通过最后发布即可。

sa/qa/开发查看各环境某个镜像的历史版本信息

点击版本信息即可查看

sa维护管理线上环境镜像

弃用/启用镜像

点击版本信息,并启用或者弃用某个版本的镜像即可

删除镜像

主要是为了sa清理镜像中间版本,防止镜像制作测试过程中产生的不可用镜像,被错误的发布到线上,以及删除某些确实无法使用的镜像,一般来说弃用镜像即可,不需要删除。

共享镜像

通过“操作”的“共享管理”即可

设置私有/公共镜像

预发布镜像都为私有,已发布的镜像都是公共,某些企业用户或者内部服务的专有镜像,不需要设置为公共镜像,通过“共享管理”共享给指定用户即可。 如果某个镜像需要从公共镜像改为私有镜像,建议通过“弃用”镜像实现,或者删除重新发布。

修改镜像描述

仅sa可修改镜像描述,描述信息会在发布到相关环境时设置到glance的description字段中。

其他人员查看各环境镜像信息

只读静态页面即可,无敏感信息,不需要认证,可设置为仅办公区访问减少安全风险。

设计

架构图

发布服务器与所有机房网络连通场景

只需要一个发布服务器和域名即可:

Alt pic

发布服务器分别部署到所有机房场景

可能需要多个发布服务器和域名:

Alt pic

web前端

主要界面类似下图:

Alt pic

web后端

无状态服务,部署在一个或者多个服务器上(视服务器与各环境的网络连通性决定),配置好相关环境的glance admin账号密码,和keystone、glance api地址,用来生成web页面,以及调用glance-api服务执行各种管理操作。

最好能搭建一个服务器,可以访问所有环境的glance-api服务,架构将会十分简化。

用镜像的校验和来作为镜像的唯一索引依据。

数据库

部署在一个服务器上,可使用公网IP对外服务(无敏感数据,仅用来记录镜像版本、更新记录以及镜像描述等信息)。 使用mongodb或者MySQL均可,表结构比较简单,主要以镜像md5为索引,来保存镜像已发布的环境、发布状态、描述、测试状态、发行版、版本、位数等web前端需要展示的信息。

流程

  • sa/开发负责镜像制作
  • qa负责镜像测试
  • sa负责线上环境镜像的更新维护
  • qa负责线下环境镜像的更新维护
  • sa/qa/开发均可查看线上线下环境的镜像版本及其他信息,以便提醒相关人员同步或更新镜像