[关闭]
@yanglfyangl 2018-09-11T05:34:05.000000Z 字数 1346 阅读 419

关于安全网关团队的服务部署需求

360

需求

各位,上次我们讨论完后,这是我get到的需求

  • 能进行灰度发布
  • 操作相对简单
  • 对现有系统最好无侵入。
  • 能够执行测试脚本
  • 根据测试结果决定是否进行回滚

业界做法

目前在业界,我所了解的情况是,服务器数据小于400台,对于服务部署没有高时间要求的,Ansible是一个很常见的解决方案,而且也很好。

特别是Ansible没有在目标机上安装Agent的要求,侵入性低。

ansible playbook基本操作

我个人建议的一个工具 lykops

lykops:一套web可视化的运维自动化项目

这个工具功能相对简单,主要模块有三个

  • 用户管理
  • 主机管理
  • 任务执行

在主机管理中,可以对主机进行“分组”,在任务执行时,可以选择分组下的主机来执行命令。

而且系统的安全性做的还不错,两层密码保护:登录秘码和vault密码(vault秘码用于加密ssh, sudo密码等)。

同时,从系统架构上来说,相对简单,不管是从代码上还是架构上。但相对也合理,可以支持通过队列的横向扩展。这样未来如果有时间的需求的时候,也可以横向扩展。

当然,这个系统也并歪完善,特别是界面看上去有点“low

这个小工具的“报告”系统对我们应该是方便很多的,可以

  • 通过web查看每一步的状态。
  • 可以查看在相关机器上的运行情况。
  • 可以查看历史记录。
  • 。。。

个人对于本例中部署的pipeline的建议

之前的方案是用脚本来部署服务的,整个过程应该分这样几步

  • 停掉之前的服务。
  • 将之前的ko和相关文件备份。
  • 将新的ko文件copy到对应的位置。
  • 启动相关的服务。

除了人工成本之外,我个人觉得这里面还有几个问题

  • 脚本中某一项任务失败时,没有做处理,可能导致处于“不稳定”状态
  • 测试没有放到自动化里。
  • 回滚需要手工回滚。

我个人建议的操作流程是:

Created with Raphaël 2.1.2操作员操作员文件服务器文件服务器lykopslykops服务器(s)服务器(s)上传新包。更新配置。选择机器分组,playbook任务;开始执行playbook

建议的playbook执行流程是:

  • 下载新的服务包。
  • 停止相关服务。
  • 原服务文件备份。
  • 部署新的服务包。
  • 启动服务。(失败则进入重试,重试3次,如果还失败,则进入"失败处理"流程)
  • 进行测试。(测试失败则进入“回滚”流程,成功则上线)

这里面有两个不同的出问题后的处理流程

  • 失败处理:主要是指处理的过程中发现异常,这些异常需要人工参与的。(注:进入失败处理前,需要进行3次的重试 )
  • 回滚:指正常的部署完成,但测试未通过,需要回滚到上一版本。

建议的playbook

  1. tasks:
  2. - name: 下载新安装包
  3. copy: src=源文件 dest=目标文件
  4. tasks:
  5. - name: 备份老文件
  6. copy: src=源文件 dest=目标文件
  7. tasks:
  8. - name: 部署新包
  9. copy: src=源文件 dest=目标文件
  10. tasks:
  11. - name: 启动新服务
  12. shell: startSuccess = ...
  13. tasks:
  14. - name: 启动重试
  15. shell: startSuccess = ...
  16. when !startSuccess
  17. tasks:
  18. - name: 进行测试
  19. shell: testSuccess = ...
  20. tasks:
  21. - name: 失败回滚
  22. shell: 。。。
  23. when !testSuccess
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注