前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1分钟了解Ansible企业应用场景

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

作者头像
运维部落
发布2020-04-26 15:01:35
2.2K0
发布2020-04-26 15:01:35
举报
文章被收录于专栏:运维部落运维部落

运维自动化过程其实是简化对象操复杂度过程,即命令执行和文件传输的便利化过程,是开发和运维从分立对抗到合作共赢的过程. 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使用之初始化

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

2.7 Ansible使用之代码发布

  • PHP类
代码语言:javascript
复制
$ 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类
代码语言:javascript
复制
$ 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 工具最大的好处,我依然认为是能够打平整个团队的整体输出质量。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、互联网中心自动化工具演化史
    • 1.1 流程化、标准化是自动化的前提
      • 1.2 版本流转流程
        • 1.3 AutomaticTool架构规划
        • 2、用Ansible做了什么?
          • 2.1 Ansible 与应用部署
            • 2.2 Ansible 与发布
              • 2.3 Ansible 与 nginx 配置生成
                • 2.4 Ansible 与 Spring Boot
                  • 2.5 Ansible 与 web 化
                    • 2.6 Ansible使用之初始化
                      • 2.7 Ansible使用之代码发布
                      • 3. Ansible OR Shell
                      相关产品与服务
                      云数据库 MongoDB
                      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档