两年前我写了篇文章『我们自研的那些Devops工具』介绍了我们自研的一些DevOps工具系统,两年过去了这些工具究竟还有没有在发光发热,又有哪些新的变化呢,我将通过这篇文章来回顾一下这两年的发展与变化

CMDB

CMDB配置管理数据库,作为整个运维体系构建的基础,几乎其他所有的运维工具系统都要依赖他提供的基础数据,所以保证稳定非常重要,这里的稳定不仅指的是系统运行状态的稳定,还有数据结构、功能的稳定,其数据结构一旦改变上游系统可能都要跟着修改,所以在规划CMDB的迭代更新时,首先要考虑兼容性,已有功能不做过多修改,仅进行新功能的添加

基于以上考量,CMDB在这两年来整体功能没有太大变化,功能上仅是将主机监控给集成进来,可以在cmdb里直接搜索对应主机查看监控,而无需再去监控系统检索,同时在易用性上有了提升,例如去掉了目录树,丰富了展示信息,优化了检索功能

nova

nova系统主要用来做生产环境的持续部署,之前的文章里也有介绍,由于我们的环境比较复杂,公有云、私有云、云主机、物理机、Kubernetes等都有使用,并且分布在不同地区的机房,为了方便维护,我们专门抽离了生产环境的部署功能做了nova系统

持续集成原本是通过varian系统来实现的,但现在我们已经彻底废弃了varian,用更为强大的自定义任务引擎Probius来代替了,Probius下边介绍

现在将回滚功能也集成进了nova,回滚基于Docker镜像来实现,选择要回滚环境,会根据环境拉对应项目和环境去Dockerhub拉取相应的镜像列表,选择镜像进行回滚,可以快速回滚到之前的任何一个版本

还为nova增加了批量任务执行的功能,主要基于Ansible来实现,详细介绍可以看之前的文章:Django+Ansible构建任务中心思路,借助于批量任务可以方便的进行多节点异常排查,以及非部署类的任务处理

kerrigan

作为对运维非常友好的配置管理工具,Kerrigan在整个项目运行中起着至关重要的作用,目前已经管理了数百个不同类型的配置文件,保障了上万次的配置修改得以正常执行,近两年来也对其进行了优化升级,主要有2个方面

confd该为watch模式,配置修改立即生效。这个主要是针对nginx配置文件的管理,在之前的模式中,配置修改之后需要重新部署项目或者重启confd服务配置才能生效,这个过程较为繁琐,于是我们将confd改为了watch模式,配置一旦修改就会立即更新,这个模式有一个风险在于如果配置改错了怎么办?配置改错分两种情况,语法错误与规则错误,首先confd在更新配置文件前会检查配置文件是否有语法错误,如果没有才会更新,这样就避免了因为语法错误导致的更新失败,其次对于规则本身写错的问题,这个只能在更新前认真检查了,即便不是watch模式自动更新也会有这种问题存在,为此kerrigan做了几个方面的优化来尽量保证不改错以及改错后能快速修正,具体的可以看这篇文章:Kerrigan:配置中心管理UI的实现思路和技术细节,包括配置对比、快速回滚等

提供了完善的API。kerrigan除了管理了nginx之类的服务配置外,同时还管理了Dockerfile之类的文件,在持续集成的过程中需要用到Dockerfile,所以为Kerrigan提供了API来支持通过http的方式来获取配置文件,以便在Probius系统中使用配置文件,为此还用Python专门写了个获取配置文件的系统命令,只需要一个命令即可获取kerrigan里的配置文件,具体的实现方式可以看这里:用Python写个Linux系统命令

overmind

最开始写overmind系统仅仅是一个SQL审核平台,做到现在已经成了一站式DB管理系统,从工单开始,到DB信息添加,密码管理、权限管理,DB查询与审计,DB执行审核等一系列数据库相关的操作均可借助于overmind系统来完成

proxy

proxy代理系统在易用性上有了不小的提升,首先是创建实例时选择协议,如果想要一个实例同时支持http和https两种协议,则在之前的版本需要创建两个实例,而现在则可以选择HTTP和HTTPS都支持,创建的实例将同时支持http和https协议访问,同时还可以配置是两个协议都可以同时访问还是http强制跳转至https,操作简单了许多

另一个修改是,可以编辑是否开启日志,如果开启的话还能在页面上实时监听日志,这对于某些排错的场景非常好用,实时监听日志就是模拟了tailf的功能,感兴趣的可以查看这篇文章:Django使用Channels实现WebSocket

关于proxy的详细介绍可以查看这篇文章:Proxy:简单小巧又强大好用的代理系统

wiki

wiki整体功能没有太大的变化,只是强化了搜索功能,首页依然是个目录树,内页则只有内容,聚焦重点,没有花里胡哨的功能,不过随着目录的越来越多,后边若是重构则会考虑增加空间的概念,团队与团队,板块与板块之间做个区分还是很有必要的

我们自研的那些Devops工具这篇文章里介绍过的工具除了varian已经完全废弃了之外,其他的各个系统都有在正常使用和迭代更新,生命力依然顽强。除了以上这些系统外,近两年还开发了一些新的工具系统

alodi

alodi系统主要用来快速生成临时环境,并实现对临时环境整个生命周期的一站式管理,主要应用在同一项目多版本同时开发测试或是保密项目不能通过常规测试环境测试的情况下使用,通过alodi可以快速的创建一个项目运行环境,通过生成的随机临时域名访问

alodi基于Kubernetes实现,部署过程日志、容器终端日志、进入容器终端查看都可以在alodi系统中实现,无需跳转到其他系统,同时为了应对某些特殊的测试环境,还允许绑定自定义域名,使用完成之后一个按钮即可销毁所有创建的资源

更多alodi的介绍可以查看这篇文章:Alodi:环境创建从未如此简单

webssh

通过webssh实现堡垒机功能,通过webssh连接远程主机,可以记录会话信息,对操作进行录像,后续还可进行审计,同时也可以实时查看其他用户的操作过程,提取操作命令等,为了方便使用,还通过目录树增加了分组功能

probius

自定义任务引擎probius是这两年实现的最重要的一个系统,具有强大且灵活的任务编排能力,最初只是想取代varian,但现在不仅做到了完美的取代,而且在易用性功能性上有了很大的提升,现在每天都有数十上百个持续集成任务通过probius来完成,同时还把kubernetes以及prometheus都集成了probius系统

probius的三个核心概念是命令、模板和任务,命令是系统中的最小粒度,可以是一个具体的linux命令或是一个可以执行的脚本,模板是一组命令的组合,任务包含了模板和参数,同一个模板对应不同的参数就会是多个不同的任务,基于这种思想probius可以实现任何的功能,无论是日常巡检还是发布上线,都可轻松应对

probius跑了所有开发测试环境的部署任务,而开发测试环境依赖的底层资源是Kubernetes,所以为了方便使用,Probius也集成进了Kubernetes和Prometheus,Kubernetes和Prometheus是作为插件的形式集成进来的,可以不用,对probius本身影响不大

sadmin

Sadmin是一个Django的基础公共库,这个公共库集成了许多基础的功能,例如后台配置网站标题、Title以及主题,动态配置菜单,自动的审计日志记录,多种认方式等等,同时也对最常用到的CRUD进行了封装,使用起来得心应手

目前以上这些系统几乎全都使用了Sadmin公共库进行了重构,保证了统一,也方便后续维护,sadmin公共库的更多介绍看这里:Sadmin:打造私有Django公共库实现代码复用

最后

我们自研的那些Devops工具的文章里写未来一年的计划,将那些相对分散的系统给串联起来,现在未来已成过去,我们借助于probius实现了对多个系统的串联,实现了更高程度的自动化,那下一阶段要怎么发展?真的需要再停下来认真思考一下了

除了以上这些DevOps相关工具系统外,我还协助开发了一些业务相关的系统,例如前两天介绍的需求管理系统,关于以上这些工具系统,我写过很多相关文章来介绍,感兴趣的可以前往运维咖啡吧同名公众号或是博客查看,如有想法可以一起交流

再聊我们自研的那些Devops工具的更多相关文章

  1. 我们自研的那些Devops工具

    随着云技术以及容器技术的崛起,人肉运维的时代结束了 2018年为了解决日常运维中的痛点以及更高效的推进运维工作,我们自研并完善了几个工具系统,这些系统无一例外的帮我们节约了时间,提高了效率,这篇文章将 ...

  2. 如何选择正确的DevOps工具

    坦白的讲:世界上没有哪种工具能够像DevOps这么神奇(或敏捷,或精益).DevOps在开发和运营团队之间建立了完美的合作与沟通,因此与其说这是一种神奇的工具,不如说是一种文化的转变. 然而,团队之间 ...

  3. Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾

    Fbric.Ansible.Docker.Chaos Monkey:DevOps工具的年中回顾 [编者按]近日,Cyber Engineering Solutions Group 技术经理 Hasan ...

  4. Web Scale IT 与 6 种 DevOps 工具

    新年伊始,在总结过去一年 IT 行业变化和发展的同时,不少企业更关注未来一年甚至几年的行业趋势.Gartner 于 2014 年发表了文章 Gartner Says By 2017 Web-Scale ...

  5. DevOps工具链

    Devops工具链 DevOps实际是一种文化上的变迁,代表了开发.运维.测试等环节之间的协作,因此DevOps工具是非常多种多样的,甚至可以由多种工具组成一个完整的DevOps工具链.此类工具可以应 ...

  6. 一文解读DevOps工具链 (转)

    在列出DevOps 工具链之前,介绍一下什么是DevOps,虽然DevOps这个概念现在还没有标准的定义,但我们可以追溯一下其过去九年的历史发展过程(从2009年-2017年),列出几个相对明确又有所 ...

  7. 从大厂DevOps工具链部署,看现代产品的生命周期管理

    目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...

  8. devops工具链概述

    1. devops工具链概述  1)devops工具篇 2) 持续集成 3) 持续交付 4) 持续部署 2. devops工具链概述

  9. 研发过程及工具支撑 DevOps 工具链集成

    https://mp.weixin.qq.com/s/NYm63nkCymIV3DbL4O01dg 腾讯重新定义敏捷 |Q推荐 小智 InfoQ 2020-09-03 敏捷开发奠基人 Robert C ...

随机推荐

  1. [暴力题解&&考试反思] 双十一欢乐赛(联赛膜你测试32)

    前言: 今天考试很迷糊.从7点考到11点半,我大概从7点睡到9点.隐隐约约看到旁边的狗哥敲了好几个题,我才开始写代码.然后因为还是很困,而且T1迷迷糊糊调了好长时间,T3T4的暴力就懒的写了... 估 ...

  2. IDEA插件开发,我是如何把公司的发布系统搬到IDEA里的

    不得不说JetBrains公司直的非常的牛B,每一个程序员都能在JetBrains的官方网站找到一款属于自己的开发工具.这些开发工具在工作中给我们带来了巨大的便利.各种各样的基础插件,第三方插件,真是 ...

  3. 字符串与模式匹配算法(二):MP算法

    一.MP算法介绍 MP 算法(Morris-Pratt算法)是一种快速串匹配算法,它是詹姆斯·莫里斯(James Morris)和沃恩·普莱特(Vaughan Pratt)在1970年提出的一种快速匹 ...

  4. Luogu P2827 [NOIp2016提高组]蚯蚓 | 神奇的队列

    题目链接 80分思路: 弄一个优先队列,不停地模拟,切蚯蚓时就将最长的那一条出队,然后一分为二入队,简单模拟即可.还要弄一个标记,表示从开始到当前时间每一条蚯蚓应该加上的长度,操作时就加上,入队时就减 ...

  5. cf12E Start of the season(构造,,,)

    题意: 给一个偶数N. 构造出一个矩阵. 满足:主对角线上全为0.每一行是0~N-1的一个全排列.矩阵关于主对角线对称. 思路: 觉得是智商题,,,,看完题解后觉得不难,但是我就是没想出来.只想到了前 ...

  6. hdu 2586 How far away? (LCA模板)

    题意: N个点,形成一棵树,边有长度. M个询问,每个询问(a,b),询问a和b的距离 思路: 模板题,看代码.DFS预处理算出每个结点离根结点的距离. 注意: qhead[maxn],而不是qhea ...

  7. .NET 生态系统的蜕变之 .NET 6云原生

    云原生的英文名是cloud native,native 就是土著的意思,也就是土著对当地的环境是非常适应的,在云的环境和传统的数据中心是非常不同的,云原生就是要用的云的技术来构建应用, 利用云的技术来 ...

  8. Vmware 中 Kali linux 2020 设置共享文件夹

    前言 kali2020已经自带vmware-tools工具,因此,只要是原装的kali2020是不需要继续安装vmhgfs工具的. 过程 vmware 设置共享目录 使用vmware-hgfsclie ...

  9. Java反射判断对象实例所有属性是否为空

    https://www.jb51.net/article/201647.htm public static Boolean ObjectAllFieldsEmpty(Object obj) throw ...

  10. Python基础入门(2)- python中的数据类型

    python数据类型 什么是数据类型? 将数据分类,能有效的被电脑识别 为什么会有多种数据类型? 为了适应更多的使用场景,将数据划分为多种类型,每一种类型都有着各自的特点和使用场景,帮助计算机高效的处 ...