765DevOps

Thinking is the problem, Doing is the answer !

0%

自动化运维系统建设

在作为运维开发的这段时间,我们主要围绕运维的工作做了些自动化系统,这边就简单分享下我当初大约经历8个月左右的时间,基于运维自动化搭建一些列自动化运维平台。

概述

关于运维发展,可以参考大厂-阿里的发展历程,可以分为五个阶段,分别为L1-脚本运维、L2-工具化运维、L3-平台化运维、L4-数据化运维、L5-智能运维。我们当初运维的整理状态应该在0.5*L2(即半工具化运维😂),可想而知其过程的艰辛。

运维在系统层面的建设,如:Zabbix监控、ZStack虚拟化、Granfana监控、LVS、IDC重建等,这部分工作主要由运维同学在逐步推进。

自动化平台部分建设,主要有:CMDB、持续交付系统、DB平台、DNS系统、配置中心、任务调度、自动化平台、事件平台等,接下来我会针对这个自动化平台部门做一个简单的介绍吧。

CMDB

这个很值得和大家聊一聊的,刚开始时,我们定位是做一个运维 资产平台,只需要做好资产申请管理即可。经过一番前期调研,发现我们原有理解实在是太狭隘了,感兴趣的同学可以去了解下运维现代CMDB建设

以下是引用的话(出处:智能化运维平台的基石),说明CMDB平台如何建设:

1、应用CMDB必须提供统一的应用元数据管理能力。

2、应用CMDB建设的核心诉求是应用生命周期的管理,带来了整个管理的驱动力是最强的,这时候无论变更的频率还有以及对于一致性的要求都是最高的。

3、必须以应用为中心,不是基础资源为中心,这个视角大家要记住。

4、必须要从应用的角度构建IT资源的弹性关系,有两个层次,一个层次是我应用的模型和后端模型表达关系,我可以依赖DB,我可以依赖DNS,我A可能用了DB,我B没有用DB,这是弹性关系。

最后就是系统的选型啦,我们选择的是腾讯开源的蓝鲸CMDB(Tencent/bk-cmdb

持续交付系统

这个是我们重点建设的系统,这个没有选择开源系统而是自建的(其实是运维老大带过来的😄😄😄),当然这个是DevOps的一个核心环节,后续还会有专篇进行解密的,这边主要介绍几个核心模块吧

  • 应用管理:应用申请、配置、查看、权限人员配置
  • 容器部署:支持K8s容器部署
  • 传统部署:支持物理机,虚机部署

DB平台

两个开源系统纠结吧。

  • Yearning
  • Archery(最终选择了这个,主要是DBA伙伴决定的)

DNS平台

这个是自建的平台(其实是运维老大带过来的😄😄😄)。

使用 BIND 作为 DNS 服务器,使用 ETCD 来管理 DNS 服务器的 BIND 配置文件,包括 VIEW,ZONE,RECORD 的各个配置文件。

所有的 DNS 服务器的配置文件和数据都是统一从 ETCD 上获取,因此所有 DNS 服务器的配置文件及数据都是相同的,且所有 DNS 服务器角色均为 Master,不存在 Slave

所有 DNS 服务器会实时监测 ETCD 上的数据,当在平台上对 DNS 进行操作时,只要配置文件发生变化,所有 DNS 服务器都会实时获取到最新的配置文件信息。

配置中心

这个选择了携程开源的 Apollo了,因为公司有相当部分业务使用时PHP,对于Apollo的支持不是那么友好,所以基于这个,还开发了一个Apollo-Agent。

任务调度

这个选新做了三个开源系统的对比:Xxl-job、ElasticJob和Gocron

Gocron Xxl-Job Elasticjob
Golang 支持golang job运行可以集成至gin框架原生语言使用较为方便 可以支持glue及bean模式有golang客户端也可集成至gin框架原生语言使用较为方便 不支持golang job
Lumen 支持php job只限于命令行可以使用php artisan一键启动 可以支持glue及bean模式,包括命令行及fastcgi方式支持php artisan一键启动 不支持php job
Spring 不支持java任务,只能通过shell调用不能和spring框架集成 有spring原生库支持,方便接入 有spring原生库支持,方便接入

最终选型确定为:Xxl-job,Xxl-job相比ElasticJob和Gocron功能比较健全,没有明显的缺陷,而且Xxl-job相比Elasticjob对golang和php的原生job支持更友好,相比Gocron对于java的job又更友好,比较适合我们这种java和php业务并存的公司技术形态。

另外,在其他一些功能特性上Xxl-job相比Gocron有明显优势:

1、支持任务节点弹性扩容/缩容、故障转移,Xxl-job支持高可用的job调度执行,在业务上云后能发挥更大优势

2、支持任务分片执行以及其他更多高级调度策略,Xxl-job可以将一个任务按照特定路由规则打散在不同任务服务器机器上

3、业务拓扑管理、任务执行报告、任务参数传递,能提供应用维度的任务管理、单个任务的执行周期报告数据,可为后期任务脚本逻辑优化提供建议

与此同时,Xxl-job和Gocron均存在不支持常驻任务,但目前优化后的Xxl-job可以通过集成Goagent支持常驻和命令行模式。

自动化平台

我们选型的自动化工具是:Ansible,这个平台主要是对Ansible的playbook的管理吧,貌似后续使用程度不高。

事件平台

业务故障收集平台

基础依赖-用户中心和消息通知平台

用户中心

运维平台的统一用户中心,对接OA LDAP,同时支持各系统的权限管理配置

消息通知平台

各系统的统一的消息通知平台,支持邮件、企微等通知方式

总结

建设思路

主要是以平台化的思路在进行建设的(即将缺什么就去做什么,或者以经验为主导进行建设),选型基本以业界标准且开源为主,避免重复造轮子

反思

平台分散,无法做到DevOps所期望的**一站式研发协同平台**,属于DevOps建设过程的一个中间阶段。

总结

后续建设,做好整体的DevOps的整体全景规划,有一个整体的目标和方向,建设过程中可以逐步完善,但是逐步向同一个目标推进,避免系统的分散割裂。