咱们自研的那些Devops工具

随着云技术以及容器技术的崛起,人肉运维的时代结束了nginx

2018年为了解决平常运维中的痛点以及更高效的推动运维工做,咱们自研并完善了几个工具系统,这些系统无一例外的帮咱们节约了时间,提升了效率,这篇文章将分享介绍一下这些工具系统web

系统介绍

CMDB

CMDB配置管理数据库,主要用来记录咱们管理维护的软硬件信息,包含实体的服务器,交换机以及虚拟的项目、服务、环境等全部须要管理维护的信息,通俗一点理解就是以前咱们可能一个excel表格记录了咱们维护的全部项目,项目所用的服务器资源,服务器的配置等等信息,均可以录入到CMDB系统里统一维护管理数据库

CMDB系统是其余不少系统的基石,要给全部用到基础信息的第三方系统提供API以查询或修改数据,例如提供项目对应的服务器信息给持续部署工具推送代码到项目服务器上,因此CMDB系统的数据准确性很是重要,同时只在一个地方维护基础信息可以让整个运维系统更可控,更高效,减小出错后端

咱们CMDB系统上线时间比较久,以前仅是用来替代Excel表格维护信息用,今年为他增长了API,提供给第三方系统获取基础数据,API认证采用了JWT,关于API认证这篇文章有更多的介绍:Django+JWT实现Token认证tomcat

varian

varian是咱们内部开发的一个模块化的持续集成工具,主要负责项目从源代码到最终可部署程序的这个过程,如今有大部分项目已是Docker部署了,那么varian会负责从源代码到最终打包好的项目镜像并上传到镜像仓库这个过程,其中会涉及到编译、合并、压缩等等操做,这篇文章有详细介绍咱们varian的工做过程:探秘varian:优雅的发布部署程序服务器

varian的核心逻辑是把持续集成中的每个小步骤拆分红独立的类或方法,最终根据项目类型的不一样组装不一样的类或方法,实现不一样类型不一样技术栈项目可以共用同一套持续集成程序,减小代码冗余,提升可用性运维

nova

nova持续部署,配合varian作整个上线流程,nova主要负责的是将最终的可部署程序或者Docker镜像推送到线上各个节点更新的过程,由于线上环境比较复杂,有云主机、Docker容器、私有云、公有云k8s等,因此在nova这一层作了兼容模块化

nova只接受三个参数,1.项目名称,2.部署环境,3.部署版本号,根据项目名称和部署环境调用CMDB提供的API肯定最终推送项目到哪些节点,根据版本号去拉取代码仓库代码或者镜像仓库镜像工具

扩容、回滚、重启等操做均可以经过nova系统自动完成,这篇文章介绍了持续部署的更多细节:Docker环境的持续部署优化实践测试

kerrigan

在整个发布上线的过程当中除了代码的变动以外,一般还会涉及到配置文件、数据库的变动,为了解决配置文件自动更新的问题咱们开发了kerrigan系统,这篇文章有关于配置中心实现细节的介绍:中小团队落地配置中心详解

kerrigan底层基于etcd+confd实现,主要实如今web端修改,服务器上自动更新生效的功能,kerrigan还可以管理多环境不一样类型的配置,尤为擅长文件型的配置(区别于一般看到的基于KV的配置中心,对运维更友好),例如管理nginx,tomcat等配置,同时可以记录配置文件的修改历史,快速回滚配置,还支持配置文件对比,只修改保存延后发布等功能

由于咱们项目比较多,每一个项目的nginx里边有一堆的规则,基于Docker的话每一个rewrite的更新都须要从新打包发布比较繁琐,使用kerrigan以后有效解决了这个问题

overmind

数据库运维系统overmind,除了可以解决发布上线过程当中的最后一环数据库变动外,咱们还集成了其余一些实用的功能,例如SQL审核、SQL查询、自动导数据的工单系统,密码表等

overmind的第一个版本主要是集成了inception作SQL的审核和执行,帮助咱们自动化的处理线上数据库的变动,这篇文章有介绍:中小团队快速构建SQL自动审核系统

完成第一个版本以后内部推进开发测试使用,收集到反馈,在第一个版本的基础上添加了SQL查询、Explain执行计划展现等功能,后续发现DBA常常接到各个不通环境之间导数据的需求,又开发了工单功能来实现数据自动迁移,这篇文章有介绍迁移:运维效率之数据迁移自动化

后边抛弃了Excel维护密码的方式,开发了密码表功能,见这篇文章介绍:Django开发密码管理表实例【附源码】

overmind在慢慢完善,后续还会基于需求和实用性添加更多的功能来提升效率

proxy

proxy是一个代理系统,相似于阿里云的SLB,kubernetes的ingress,主要给开发测试环境使用

咱们维护项目较多,每一个项目有多套不一样的环境,每一个环境都有不一样的域名,对应不一样的后端服务,为了模拟真实请求过SLB代理的环境以及集中的管理这些项目入口,以前的作法是把全部的域名都指向到一个nginx服务器,nginx服务器经过基于域名的vhost代理到后端服务,每次添加或修改都经过手动变动nginx配置文件来完成,如今开发了proxy系统,能够经过页面来快速方便的完成

wiki

wiki系统在18年以前已上线,当年提出来规范化、文档化、自动化、智能化的运维目标,文档是整个运维过程当中很是重要的一环,其好处不用多说,持续推动文档的输出也是咱们很是重要的一环

固然除了以上这些系统外还开发了一些小工具来规范管理,提升效率,这里很少介绍。另外咱们还用到了大量的开源软件系统,例如Jenkins、ELK套件、Kubernetes等

2019年计划

咱们知道devops是从研发到上线整个过程自动化的一种思想,并非某个工具或者某几个工具的集合,我一直在想如何才能将devops落到实处,18年基于当前的环境咱们开发了以上的各类工具来帮助咱们高效的工做,但这些工具系统相对分散,不能造成体系流程,19年会实践一些方式方法将这些工具系统串联,实现更高程度的自动化,同时也会持续推动Kubernetes更大范围的落地,为真正的实现Devops思想,从开发到上线的全流程自动化打基础


若是你以为文章不错,请点右下角【好看】。若是你以为读的不尽兴,推荐阅读如下文章:

相关文章
相关标签/搜索