专栏首页运维部落1分钟了解Ansible企业应用场景

1分钟了解Ansible企业应用场景

运维自动化过程其实是简化对象操复杂度过程,即命令执行和文件传输的便利化过程,是开发和运维从分立对抗到合作共赢的过程. Ansible 做为当下运维自动化工具如火如荼的发展了很多年,但哪种使用方式是正确的姿势呢?本文将为大家揭开某公司互联网中心的 Ansible 应用场景

我们从如下4个角度来进行本次分享:

1、互联网中心自动化工具演化史

fabric、ansible、puppet、saltstack作为同时代的自动化工具,各有优劣:

  • fabric:四者中最为轻量,但应对多/大项目,会明显“力不从心”
  • puppet:老牌自动化工具,四者中最重的自动化工具,ruby语言实现
  • saltstack:即puppet之后的新兴运维工具,当下 运维必备开发技能的python语言实现
  • ansible:最新出现的无client客户端工具,非C/S架构。python实现,以去中心化理念推广盛行。也是目前最为火热的运维自动化工具,github 的fork和star数是第二名 saltstack 和第三名puppet两者之和还要多。

1.1 流程化、标准化是自动化的前提

在整个2016年,运维的工作重心和难点,很大一部分精力都是树立标准规范,对抗个人原则。

早期开发同学使用的是fabric来做运维工具,在运维到来之前,开发的所有选择都是合理的。运维所要发挥的价值是让事情更加专业化。

所幸,运维及时发现 fabric 在多/大项目的应对上不足以承载规模,因此,第一时间将所有逻辑迁移至 ansible。这个选择太正确的,在随后快速发展中,ansible相继承载了三十余项目。

2018年是运维自动化工具的起飞年,Ansible 结合 Jenkins 实现了初步的流程一站化,将运维和测试环境打通。

而在2019年的web化和智能化历程中,运维自研平台和测试自研平台,终于将CICD完整闭环,从开发提交版本发一刻开始,到版本是上线生产为止,所有的环境均归纳到CICD闭环中,均有完整流程和轨迹可供追溯

1.2 版本流转流程

和绝大多数公司的使用场景一样,随着互联网技术的逐步成熟,这样的流程基本已经是标配。互联网技术成熟的标志之一就是某个技术热点的消失

  1. Developers 开发环境开发版本
  2. 提交 gitlab
  3. 触发 jenkins打包
  4. 结合自动化工具如 Ansible ,发布更新

有运维开发能力的公司往往会将各平台相互打通,实现无人干预。

1.3 AutomaticTool架构规划

我们特意分了2大模块:

  • 应用发布
  • 应用部署

应用发布目录主要存放运维自定义或编写的yml文件,而应用部署则主要针对 galaxy 下载或二次开发的外部引用模块。

针对应用发布模块,我们也做了很多约束和目录规范「但其实是无效的」:

  • 各目录功能使用定义,如 files 目录存放普通文件;scripts存入执行脚本; tasks存放临时任务脚本等;
  • 配置自动远程备份;
  • 应用部署目录下的配置不能覆盖

2、用Ansible做了什么?

目前实现的功能有如下这些:

  • 系统初始化(目录,用户,软件包)
  • Nginx conf配置自动生成
  • 业务应用环境初始化部署
    • 一键安装指定版本
    • 全量生成全服配置
    • 应用权限自动刷新
  • 自动化发布(console)
    • git打通
    • 自动打包&分发
    • 自动备份
    • DB更新自动检测及备份
  • DB自动更新
  • Ansible与K8S结合初探(测试)

2.1 Ansible 与应用部署

我们找一些比较经典的场景做细节探究

想象这么一个场景,新申请的服务器需要安装nginx、php等应用,你用Ansible会怎么做。

全手工写YAML playbook是一种不错但肯定不是最优路径的办法。正确的姿势如图:

  1. 从 glaxy 下载role
  2. 修改 roles
  3. 使用

对的,就是这么简单

2.2 Ansible 与发布

发布通常要完成的要素有如下几个方面:

  1. 打包
  2. 分发包
  3. 备份旧程序
  4. 停进程
  5. 更新程序
  6. 起进程

该 YAML只是其中一个范例,最大的特点是,其它数十个项目的发项代码和它有着惊人的相似处,修改维护成本很低,新增我通常的做法是复制一个文件,花几分钟修改下就能够满足要求了。

秘决在哪里呢?前提有提到流程化、标准化是自动化的前提

2.3 Ansible 与 nginx 配置生成

Nginx的大家都会,但正因为大家都会,也同步带来了很多风格问题。

想像这么一个场面,大家都能修改nginx配置,每个人都在修改,每个人都留下了自己的想法和气味,但最终的结果可想而知。最终nginx配置再也没人能懂,再也没人能维护了。

我们就经历了这样的惨剧,最终不得已,终于下狠心,将所有的nginx配置推翻重来。就有了现在的这种方式。使用 Ansible 命令,通过读取模板配置来动态生成 Nginx 的配置。

2.4 Ansible 与 Spring Boot

这里不想讲太多,具体直接看代码,逻辑上都很简单,只是在结合使用时,有一些接口的处理比较麻烦。

2.5 Ansible 与 web 化

如图,是我们当下使用的平台。在 Ansible 的调用上也并不优雅。主要是API接口不够完善,各模块的使用场景并非每个人都很熟悉。

2.6 Ansible使用之初始化

  • 系统初始化
ans;ansible-playbook init.yml
  • 安装部署 proxy 应用
ans;ansible-playbook sysinit/NginxProxy.yml
  • 安装部署 web 应用
ans;ansible-playbook sysinit/NginxWeb.yml
  • 生成 Proxy Nginx 配置
ans;ansible-playbook sysinit/NginxProxy.yml --tags “nginx_vhost_generate"
  • 生成 Web Nginx 配置
ans;ansible-playbook sysinit/NginxWeb.yml --tags “nginx_vhost_generate,php_conf_generate"
  • 部署 Rabbit MongoDB等
ans;ansible-playbook sysinit/Rabbitmq.yml
ansible-playbook sysinit/Mongodb.yml
…

2.7 Ansible使用之代码发布

  • PHP类
$ ansible-playbook all.yml --extra-vars “project=all git_commit=a7db8750e7fb8b3845a6e5d76c6b7b6843f5bacd"
$ ansible-playbook yunying.yml --extra-vars "project=yunying git_commit=c4d753ae0e29f03961d8093760eeb9b2bdb08241"
$ ansible-playbook h5.yml --extra-vars "project=h5 git_commit=6c99ce066f7cc7134f3c5fb51d3fbcd0366e8c96"
$ ansible-playbook static.yml --extra-vars "project=static git_commit=d3ebf117e19b656eea6dfb2fe1e3a04aaa43ceb1”
…
  • JAVA类
$ ansible-playbook java-cloud.yml --extra-vars "project=outer git_commit=d3sdfv117e19b656eea6dfb2fe1e3a04aaa43ceb1”
$ ansible-playbook java-cloud.yml --extra-vars "project=account git_commit=d3sdfv117e19b656eea6dfb2fe1e3a04aaa43ce2ds”
…

大家可以看到,所有项目的发布项目几乎都是类似的。

3. Ansible OR Shell

使用 Ansible 工具最大的好处,我依然认为是能够打平整个团队的整体输出质量。

本文分享自微信公众号 - 运维部落(linux178),作者:松鼠尚学堂

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 扩散几个高端职位吧

    运维部落
  • 啊,http2还没搞明白,http3又来了?

    这就有点慌了,连 HTTP2 都还没搞明白, HTTP3 已经出来了。但 HTTP3 会受到关注也是有理由的:它速度很快。

    运维部落
  • 一分钟玩转 MongoDB

    MongoDB 是个可扩展、高性能、开源、面向文档(document-oriented)的,由c++实现的,介于关系数据库和非关系数据库之间,基于分布式文件系统...

    运维部落
  • 腾讯织云:DevOps 流水线应用平台践行之路

    作者:梁定安,腾讯织云负责人,目前就职于腾讯社交网络运营部,任运维技术总监,开放运维联盟委员,腾讯云布道师,腾讯课堂运维讲师,EXIN DevOps Maste...

    织云平台团队
  • 企业级应用的高可靠运维实践与DevOps(一)

    ? 很高兴今天有机会在这里与大家交流,也要感谢普元提供的交流平台和普元CTO焦总的邀请。我今天与大家分享的主题是关于企业级应用的可靠运维实践的这个话题。 ? ...

    yuanyi928
  • 运维转型 | 运维人不再只是“救火英雄”

    各行各业都开启了数字化转型的进程,运维团队在这种时代的浪潮中又该何去何从?我在帮助一些企业落地了运维技术平台之后,开始反思这个问题,并将所思所想整理成本篇文章。

    嘉为科技
  • 运维之殇

    让人推荐快速学习的方式,却也是极度无奈之举。而且运维也不是一日练成的。就算大师提供了很好的指导,也终究是拿自己的线上产品练手了,这样显然是得不偿失的。现如今,一...

    用户2936994
  • 关于如何做好运维管理工作的一点思考

    9月底的时候,我们团队负责的两个系统在几周内连续发生了两次线上的生产故障,虽然最后并没有发生严重的损失,但是领导免不了要提一些更高的要求,围绕 保持安全稳定,避...

    大江小浪
  • 运维工程师的职责和前景

    运维中关键技术点解剖:1 大量高并发网站的设计方案 ;2 高可靠、高可伸缩性网络架构设计;3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案;...

    小小科
  • 面试 Linux 运维工作至少需要知道哪些知识?

    知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家。

    小小科

扫码关注云+社区

领取腾讯云代金券