自动化运维体系必不可少的系统
无论大家如何设计自己的自动化运维平台或体系,以下三个系统在自动化运维体系中是不可缺少的:CMDB 管理系统、持续集成系统、运维调度管理系统。
1、CMDB 管理系统
无论自动化运维的建议走到哪一层、哪一步,都要有一个中心,来保证所有平台的一致性,即大家熟悉的 CMDB(Configuration Mananement Database),因为业务的不同,每个公司的 CMDB 记录机器资产的情况是不一样的,但大致上这几个方面是相同的,即机器主机名、IP 名、业务角色、隶属平台、机器类型、归属线路。
另外,考虑到后期的架构扩展及机器的频繁上下架等综合因素,我们的 CMDB 必须具备一定的开放性,比如机器的上下架非常频繁,可以设计了 API,以程序的形式自动更新机器的详细设备信息并开放给资产部的同事,方便他们每天或每周定时巡检,而且开放了相应的写权限,方便在必要的时候可以手动更新;此外,现在很多业务都需要是有弹性的,所以类似 AWS 或阿里云主机都会使用(当然,用于临时分布式计算的 Spot Instance 不在考虑之列),这些都属于公司的固态资产,如果再加上公司业务需要的物理机器,其实就是混合了云的概念在里面了。CMDB 设计好以后,就可以调用自动化配置管理工具的 API,例如 Ansible 或 Saltstack,来设计自动化运维流程,这样,即使不是运维人员,也能调用图形化界面来完成自动化运维的工作。
2、持续集成系统
持续集成系统以开源的 Jenkins 为例,采用的是 Jenkins 的 Master/Slave 分布式架构,而且 Slave 节点全部是由 Docker 来实现,即将 Jenkins 置于 Docker 容器内运行。由于 Docker 技术的引入,现在持续部署的工作也很容易实现,以目前开发的某款 APP 为例说明其流程。
详细流程说明如下:
1)Developer 以 tag 的方式向内部的 GitLab 网站提交代码。
2)Jenkins 系统通过 Web Hook 插件(此插件可选,不选的话需要手动构建)检测到了代码有变化,执行自动化构建过程,通过 Dockerfile 文件打包镜像。
3)Jenkins 系统在自动化构建脚本中调用 docker 命令将构建好的镜像 push 到腾讯云或阿里云私有仓库。4)可以及时将构建成功与否的结果推送给相关人员(推荐安装钉钉通知器插件,并使钉钉通知器里带有 Jenkins 的部署项目和版本号),比如测试人员,以安排测试。
5)像腾迅云或阿里云等的私有仓库中,都有类似镜像触发器的规则,此时触发规则,会自动将新镜像部署到 DevOps 环境的 Kubernetes 集群机器上。
6)等应用成功更新镜像版本以后,研发人员可以通过程序获取应用的 API(或者代码层面提供版本健康检查路由),或通过直接访问应用方式来查看变化。
事实上,在测试环境和开发环境中已经引入了 Kubernetes,利用它来实现新的镜像,进而实现部署自动化。k8s 的滚动升级可以使得服务近乎无缝地平滑升级,即在不停止对外服务的前提下完成应用的更新。
3、运维调度管理系统
运维调度管理系统,有的也称之为“运营系统”,该系统是对复杂运维事务的封装,个人觉得运维调度管理系统是上述所有子平台中最有技术含量的,在运维过程中会接触到很多复杂的运维场景,比如容灾切换、服务迁移、熔断机制、扩容或缩容等,这些都不是简单地通过单一运维动作就能够完成的,需要综合考虑很多因素(最直接有效的监控指标就是业务参数和大数据日志分析),这也是需要花精力思考和总结的地方。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/47dbb0f611e6eed9a0ba56dc2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论