走进InOps之一:InOps的功能架构与部署架构

上周给InOps起了个头,这周我们来一起顺着InOps形成的过程来看看它的功能架构与部署架构。

InOps的架构并不复杂,只是希望整个过程中一些思考、经验和教训,能给同样做自研的小伙伴们一点启发。

最初呢,我们只是想利用一些自动化的工具,解放我们云平台的运维人员,不用成天埋没在重复、低效的日常运维工作当中。很自然,就想到用Ansible、Saltstack一类的自动化工具来对云平台主机进行批量操作,Ansible凭借不用装agent的优势,成为我们的首选。那最原始的架构就出来了,请看下图(其实根本就没什么架构嘛):

Ansible通过执行脚本或指令的形式,能对批量主机设备进行各类运维操作,比如创建账户、修改密码、安装补丁、采集信息、开关端口、启动服务等等。对于Ansible不大了解的同学,可以自行上网搜索相关内容。

慢慢的,就发现这一套不够用了。平台运维人员能写脚本的是少数,而且全部用命令行的形式,不利于任务的规范管理。另外,如果上层应用系统的运维人员也想用,怎样才能方便的共享这些能力呢?那就,做个界面吧!把脚本管理、任务管理全部做成web界面能操作的功能,通过配置任务的方式调用脚本。这样既能降低自动化工具的使用门槛,又能对自动化运维进行标准化管理。好了,现在总算相对上图有些进步了:

不过问题开始出现了:

web服务节点如何与Ansible节点交互?

web的功能虽然不多,但好歹也是个系统啊,咱们自研这几把枪,还兼着其他工作,有时间整个系统出来吗?

不用慌,开源的世界一切皆有办法。

首先,web服务节点要能与Ansible交互,肯定是需要Ansible有api的。虽然官方的Ansible api是商业产品,但皇天不负有心人,总算也让我们找到一个开源的第三方api。

先把源代码扫了一遍,原来就是起了一个tornado的服务,把Ansible的一些执行函数封装了一层。嗯,不错,基本够用,那就装上试试。运行完一看,这不挺好的嘛,就它了!

其次,web端如何解决?网上一搜,大把开源web系统框架或案例。根据我们团队里小伙伴的经验,我们挑了一个功能够用(又是够用,还能有点更高的追求吗?)、入手简单的,拿回来噼里啪啦先把主机管理、脚本管理、任务管理几个功能给整了进去,哟,还像模像样的嘛:

主机管理主要对纳入自动化平台的主机对象进行统一的标准化管理,通过分组能够方便的对一批主机执行指令;

任务管理则通过配置任务执行的各个参数(包括主机对象,脚本特定参数等)、任务执行的周期、执行的脚本,实现对批量主机的自动化操作;

脚本管理则通过web界面可以方便的上传、删除Ansible节点里的脚本,同时还能对每个脚本挂载一些运行前后需要执行的动作,比如预先记录脚本信息、拆分执行结果等,实现更加灵活的自动化脚本配置。

好了,这样跑了一段时间,大家又开始有不满了:

Ansible最大同时对400个主机下发批量任务,我们云平台肯定不止这么点主机啊,那得多几个Ansible节点;

Web端也要相应增加管理多个Ansible节点的功能,另外,web操作界面上连权限控制都没有,也没有高可用,太low。

好吧,那再改一下:

通过部署nginx负载均衡,多个web节点,多个Ansible/Ansible-api节点,我们基本实现了整套系统的高可用;web功能上,通过增加节点管理、权限管理等加强了自动化操作的安全性及可配置性。

架构永远是在演进的,随着网络多可用区的改造,对于跨机房、跨网络可用区的主机,原则上是网络隔离的,如何统一操作呢?不管三七二十一,放通所有网络策略?比如下图中的ansible节点2:

显然这种方式需要放通Ansible节点2到网络可用区2中每一个主机的网络,带来网络策略混乱的问题。因此我们最终是通过在不同网络可用区部署多个Ansible节点的方式来解决:

这样,只需要放通网络可用区1中web节点与网络可用区2中Ansible节点的策略即可。

同时,随着业务的发展,web端的功能也有了新的扩展。比如,我们在实现虚机自动创建时需要配置Vcenter节点,最近又通过Saltstack来实现入网设备的自动发现,那么web端的节点管理功能便扩展成了组件配置功能,除了配置Ansible,还需要对vcenter、saltstack节点进行配置;在自动化任务管理方面,除了自定义的任务,我们还根据最常见的一些运维场景,配置了专有的自动化运维界面,进一步降低使用门槛,提升运维效率。因此,此时的功能架构也演进成了下面的样子:

好了,到这里为止,InOps的功能与部署架构演进暂告一段落。其实,一切都是顺理成章成了今天的样子。

那么,Ansible的开源api和web开源框架是如何具体使用的?

中间又做了哪些适配或修改?

虚机管理、安全加固、日常巡检这些自动化运维的脚本怎么编写的?

有没有踩到一些坑?

敬请关注后面几期走进InOps!

本期嘉宾

本期嘉宾 | 杨杰 广东省五一劳动奖章获得者,广东移动网管支撑领域技术架构专家,江湖人称玉面小飞龙、杨五一、杨杰瑞。拥有十余年电信设备研发,运维和运营及互联网企业工作经验,在企业级计算虚拟化,网络虚拟化,海量电信设备自动化运维,移动应用开发方面,拥有丰富的从业经验。

你可能还喜欢

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G1V9X100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券