两年前我写了篇文章『我们自研的那些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. (六)、Docker 之 Dockerfile

    1.什么是Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 2.Dockerfile解析过程 前提认知: 每条保留字指令都必须为大写字母 ...

  2. 使用Keil下载Hex文件进STM32

    前言 初学STM32时,是通过串口1把Hex文件下载进STM32的,需要一个串口模块,而且还要设置BOOT0和BOOT1电平,然后通过FlyMcu软件进行下载,这也是一种不错的方法,这里我要介绍的是使 ...

  3. 洛谷 P4555 [国家集训队]最长双回文串

    链接: P4555 题意: 在字符串 \(S\) 中找出两个相邻非空回文串,并使它们长度之和最大. 分析: 直接使用马拉车算法求出每个点扩展的回文串.如果枚举两个回文串显然会超时,我们考虑切割一个长串 ...

  4. mybatis竟然报"Invalid value for getInt()"

    目录 背景 场景 初探 再探 结局 背景 使用mybatis遇到一个非常奇葩的问题,错误如下: Cause: org.apache.ibatis.executor.result.ResultMapEx ...

  5. 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析

    基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...

  6. hdu 1227 Fast Food(DP)

    题意: X轴上有N个餐馆.位置分别是D[1]...D[N]. 有K个食物储存点.每一个食物储存点必须和某个餐厅是同一个位置. 计算SUM(Di-(离第i个餐厅最近的储存点位置))的最小值. 1 < ...

  7. 网关服务spring cloud zuul

    Zuul例子配置文件 spring.application.name=switch-gateway server.port=5555 请求路由 传统路由方式 zuul.routes.api-a-url ...

  8. OpenYurt 与 FabEdge 集成验证——云边数据面通信初试

    作者|浙江大学 SEL 实验室:晋晨.博云:耿浩涛 审核&校对:海珠 编辑&排版:雯燕 背景 在近几年的产业环境下,传统云计算能力已无法支撑起规模日趋庞大且异地分散的数据处理与计算需求 ...

  9. uni-app app端设置全屏背景色

    设置page:{样式},博主调试的时候在app端不起作用,设置配置文件的backgroundColor也没有用,所以博主就使用了一个稍微比较偏的办法解决了,没有用获取设备信息的api来实现 具体操作就 ...

  10. [gym102770L]List of Products

    有一个很重要的性质:若$a\le b$且$c\le d$,则$ac\le bd$ 根据这一性质,就可以利用单调性$o(n)$求出小于$a_{x}\cdot b_{y}$的数的个数(先要对$a$和$b$ ...