2018年3月21-22日,由中国信息通信研究院主办、中国通信标准化协会支持的”OSCAR云计算开源产业大会”在国家会议中心举行。DevOps论坛作为分论坛之一,于21日下午召开。
论坛汇聚了华图教育、高效运维社区、京东云、用友畅捷、DevOps时代社区和哈尔滨银行数据中心等多位行业专家,对DevOps的标准体系进行权威解读,并将企业各自的DevOps实践进行了分享。
(华图教育技术总监 郭宏泽)
华图教育技术总监郭宏泽带来的精彩演讲题为《基于Python的企业级运维平台》。他表示,历经十几年的发展,运维已从手工运维、脚本运维,发展至自动化运维阶段。他就自己在运维过程中的经验和如何从零开始开发一套基于Python的运维平台进行了分享。
郭宏泽介绍到,企业在运维中面临的挑战也越来越多,一是系统架构变得越来越复杂。随着IaaS云化、容器化、PaaS智能化,依赖库多样化、RUNTIME复杂化、运维人员无法应对新时代的运维要求。
二是技术债务。由于资源成本压力,中小企业的IT运维及IT系统存在大量历史债务,而企业的能力不足以应付技术债务导致故障频发,从而造成客户的应用体验不佳,无法满足客户的需求。
三是人员流动。他表示,企业关键性人物的离职会造成整个系统的不稳定性、可持续性概率直线增加。
四是战略规划。郭宏泽表示,企业的运维比较复杂且资源分配不合理,一般没有固定的战略规划,导致整个系统很混乱。
他指出,目前企业面临最大的瓶颈是:传统的运维思路和思维已无法支撑目前的业务发展。
运维的发展历程可归结为,从手工运维到脚本工具,到流程系统,到运维平台,最后达到智能运维。
郭宏泽表示,在流程治理运维上,花费时间较长,而要完成一项运维任务则需要处理很多环节。为了解决这种手工的、没有自动化的、过于复杂的流程,DevOps理念产生了。
DevOps理念落地方向之一是运维自动化平台,主要是面向日常的运维任务管理,部署流水线面向的是端到端的交付。
针对如何在企业中构建运维平台,郭宏泽介绍到,构建平台有两种方式,一是自建;二是购买。根据他多年的运维经验,企业最需要的是掌握开发能力去开发一套适合自身工作流程的一套平台。这一过程中,首要考虑的就是理念的问题。
“我们在运维平台开发的时候没有真正开发一个平台而是在原来基础之上给它加了一个可视化”。一是敏捷开发。进行软件工程的管理,使得运维开发平台和业务开发流程及模式一致;二是快速迭代。用敏捷的开发方法,快速迭代平台的功能,发现问题后立刻修改平台,使其功能更贴近运维工作;三是灰度发布。四是模块化开发。五是不断重构。要给平台留下重写的路径和接口,即进行不断重构和迭代的理念。六是经验沉淀。
运维平台的首要任务也是核心任务是完成CMDB,即硬件管理和应用管理。他指出,资产管理是主要任务,包括服务器、服务器属性、带宽、IP和机房等硬件相关的信息。而应用配置上,主要是软件信息,包括软件包、配置文件、监控属性、安全属性、业务属性、架构属性、权限属性和运营属性。资产管理主要面向的是资源管理,包括IDC、Network、Server、虚拟化、CDN、操作系统和DNS等。
在后台技术选型上,他认为,能够解决问题的语言就是好语言,“你的团队可以用Java开发,也可以用Python开发,但是咱们本地用的是Python+Diango.”
MTV也就是软件工程里的MVC,即模块化开发。郭宏泽这样说道,“在Python里面,用户请求以后我通过UL分发器分发到我的不同功能模块上,由功能模块总的管理逻辑器调用数据库的增删改查模块,将其和前端页面的模块最终形成一个给用户返回的结果。”
Diago的价值在于可以解决它内置丰富的应用和模块,不会企业耗费太多精力就可开发,保证所有的战略资源全都放在了如何实现业务上。
在前段选型上,华图教育使用了一个HTML框架。具体讲,在前端页面使用adminlte,图形条目使用Bootstrap,特效应用上使用Jquery,图标字体是Font-Awesome,弹窗组件选择Layer,而监控图表使用Echarts.“这些确定以后就要做一个整合后端提供数据,前面监控图走起来,数据转起来了,表格也就出现了。”
以上是华图教育的资产管理模块。郭宏泽解释说,在CMDB如何构建表设计上的难点是不知道如何构建表关系。他将所有的对象都放在了数据库里,即机房一个表,机柜一个表,业务组一个表,作出四个表。最后形成一个机房多个机柜和一个机柜多个服务器的关系模式。这样以后在调机房查询时,就可以查到机房的关联机柜和服务器,实现一键查询所有数据。而将这个现实、具像的东西抽象化成数据库的二维表,就完成了整个CMDB的底盘。
他表示,完成表设计后,在前端调属性时,一调它的资产类型数据就会展示出来,即服务器、交换机的停用或故障灯状态会一一列出来。
关于应用配置,团队必须要有一个产品线,将其下面的工程都工程化,设置有专门的负责人。在其基础上加上认证书,关于产品线和密钥的问题,便于以后查询。
关于CMDB和Ansible的整合,郭宏泽表示,收钥匙解决数据一致性的问题。在CMDB里查询资产服务器里被管服务器的信息,即使服务器变更后,也会自动同步到Ansible里面去,使Ansible转变成一个永远有效的自动化运维工具,并且它的数据库都是有效的,不用考虑数据不一致性的问题。
如何进行资产和监控信息?他介绍说,他们使用了Diango的HTTPSERVER做接口,而不是Socket.使用Http Post方法上传使用Json进行前后端数据传递,数据处理直接插到数据库里面去。
在接口上,设置一个接收数据的函数,接受前端浏览器发来请求的正文,来判断它是不是Post上来了,再用Json格式化一下,把机器脚本带到磁盘CPU等信息带存到变量里,最后Host,把这些属性Save一下直接存盘了。
基于Celery的异步任务中心,可以解决各台机器的任务类型。将其作为任务中心化后,谁创建了任务?什么项目调用的?多长时间执行一次?这些信息可以一目了然。
为了更好的联动,华图教育也进行了监控平台的实践。郭宏泽表示,不要使用关系型数据库存储监控数据;推荐使用Influxdb rrdtool Prometheus存储监控数据;前端选择一个Grafana图表展现;使用Son数据传递;使用JS异步回调实时刷新数据等。
郭宏泽介绍了任务联动处理的具体流程:Agent上报到各种监控报警推到消息对列,消息对列取到数值通过自己的策略判断体系,判断这个问题调自己的知识库,在知识库里调用任务处理模块,把问题处理掉,最后将事件写到CMDB里去。
“选择自己开发所有模块的初衷,就是希望能够更强的掌控我们的运维系统,想做什么就能做出来什么。”
关联阅读
中小银行如何构建自主可控的运维自动化体系?
(最全)牌照盘点:170家云牌照和120家CDN牌照企业名单
华为开源高原:跨社区协同构建应用工具链生态
【中国IDC圈原创 未经允许禁止转载】