Ansible: 简单易懂的自动化运维工具(一)

不知什么时候,Ansible 的 slogan 从“IT Automation Software for System Administrators”变成了“AUTOMATION FOR EVERYONE”。

从一个给系统管理员使用的工具变成了给所有人使用的工具。

但是,现实中,发现了解 Ansible 的人,还是太少了。同时,自己断断续续学习 Ansible 也有一段时间,希望拿出来和大家交流。所以就决定不定期写写一个关于 Ansible 的系列。如果你觉得我写得还可以,到文末扫码请我喝杯茶。

此文为“Ansible: 简单易懂的自动化运维工具”系列文章的开篇 —— Ansible 解决了什么问题

Ansible 解决了什么问题

首先,它是一个运维工具。当然要解决运维过程中遇到的问题了。运维过程遇到了什么问题?

想像一下,你要在一台新的机器上安装 Tomcat,你会怎么样呢,条件反射的:

ssh user@111.111.111.111
wget -c http://apache.fayea.com/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
tar -zxf apache-tomcat-8.5.15.tar.gz
.....省略

好,10 分钟后你愉快地完成了老板给你的任务。但是现在你需要给 100 台机器安装 Tomcat 呢?手工的重复 100 次?

而 Ansible 能让我们只定义一次,理论上可以在无限台机器上执行。换句话:减少运维工作中的重复工作

同时,如果是人工执行 100 次,那么失误是难免的!自动化运维工具会严格根据我们所给指令来执行,而不会因为失恋而手抖执行了:sudo rm -rf /

不少人反对自动化,认为那样太危险,因为一不小心就在上百台机器删错文件。显然,他们没有注意到:自动化实现的是准确地执行指令,解决人类执行任务时存在的指令理解不正确、执行不严格的问题。而机器不会。没有达到预期效果,往往是我们人类下达的指令不正确。

所以,Ansible 还解决了人执行指令不准确的问题。

如果使用 Ansible 来实现上述的运维需求,怎么做呢?你需要做三件事情:

  • 定义目标机器的列表:一种被称为 inventory 的类 ini 文件
  • 定义这些机器的配置:使用 YAML 格式的文件来描述你机器的配置
  • 执行 ansible-playbook -i inventory playbook.yml

以下是 inventory 文件:

[tomcat-servers]
111.111.111.111
112.112.112.112
....

而这些 ip 的配置:

---
- hosts: tomcat-servers
  tasks:
    - name: download tomcat
      get_url:
          url: http://apache.fayea.com/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
          dest: /tmp
    - name: unarchive tomcat to /usr/local
      unarchive:
          src: /tmp/apache-tomcat-8.5.15.tar.gz
          dest: /usr/local/
.....省略

如果你想再添加 100 台机器,你需要做的,也只是在 inventory 文件里添加 100 个 ip,再执行一遍 ansible-playbook 命令。

当然,写 shell 写得不错的人,也能实现上面的功能。

但是,使用 Ansible 有什么优势?模块化和标准化! 手工写 shell,甚至手工写 python,要做到模块化和标准化,太困难了。

Ansible 将大部分运维工作都抽象并标准化成一个个模块(module)。所有的模块都以这样形式使用:

- name: <描述说明(option)>
  <模块名>
  <属性名>: <属性值>

比如使用 Ansible 的 file 模块创建文件夹,而且 file 模块会自行判断该文件夹是否存在:

- name: create a directory
  file:
    path: "/tmp/aa"
    state: directory
    owner: "centos"
    group: "centos"
    mode: "ug=rwx,o=rx"

显然,不同的人使用 shell 或 python 在方法名上可能都不一样,是驼峰,还是使用下划线?是使用 createDir?使用 createDirectory?还是 create_folder?

小结

我们小结一下 Ansible 到底解决了什么问题?

  • 自动化:避免运维工作中重复的工作,以及人的不确定性问题
  • 模块化:大部分运维工作能做到模块化,直接使用 shell 脚本或者 python,还是过于低级,比如: if [ ! -d "/tmp/aa" ]; then mkdir /tmp/aa fi ....
  • 标准化:所有的模块的使用方式都是一样的,减少学习成本

然后,我个人认为 Ansible 解决以上问题都是为了实现一个最根本的目标:自动化配置!关于自动化配置,你可以看看我写的另一篇文章: 关于自动化配置还有什么好说的呢?

最后,这篇文章存在一个假设:手工运维、非模块化、非标准是问题,需要解决。如果你觉得这些都不是问题的话,这篇文章所说的也就都不成立了。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏点滴积累

geotrellis使用(三十七)COG 基础介绍

前言 Geotrellis 已经迭代到了 2.0 版本(截止写作此文时为 2.0.0-SNAPSHOT 版),2.0 版多了很多新的特性,其中最重要的应该就是 ...

36814
来自专栏程序小工

【转】PHP发展路径

按照了解的很多 PHP/LNMP 程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段 PHP ...

662
来自专栏WindCoder

简化软件集成:一个Apache Camel教程

本周收到的是一篇关于使用Apache Camel整合企业中各种软件的教程,涉及到从基础到Kubernetes集成。推荐直接看原文:

631
来自专栏测试开发架构之路

Android软件测试Monkey测试工具

前言: 最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monk...

46411
来自专栏腾讯移动品质中心TMQ的专栏

APP省流量更新监控最佳实践

移动分发市场竞争已进入炽热化,已不再是当年野蛮生长阶段。各大分发市场都在走精细化与差异化路线。其中,省流量更新(增量更新)成为提升用户体验,增加用户留驻粘性的一...

3731
来自专栏腾讯Bugly的专栏

TRIM:提升磁盘性能,缓解Android卡顿

在业内,Android 手机一直有着“越用越慢”的口碑。根据第三方的调研数据显示,有77%的 Android 手机用户承认自己曾遭遇过手机变慢的影响。他们不明白...

4189
来自专栏杨建荣的学习笔记

orabbix结合python发送图形报表(一) (r6笔记第33天)

在数据库的运维工作中,如果有一种运筹帷幄的感觉,那么其中一种方式就是看报表,比如喝着咖啡缓缓打开电脑,几十台,上百台的机器的负载明细都在眼底。如果某个地方出现了...

2756
来自专栏PHP技术

PHP程序员的技术成长规划

第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系...

4819
来自专栏自动化测试

DIY自动化测试【智能音箱】

    笔者从事智能音箱系统测试,这是一款基于android系统的智能语音助手产品。基本功能特性和测试方法都已稳定,目前多产品快速迭代,涉及的场景较多且数据量大...

2533
来自专栏数据和云

实践实战:在PoC中的Oracle 12c优化器参数推荐

最近,Oracle数据库优化器的产品经理 Nigel Bayliss 发布了一篇文档,介绍:Setting up the Oracle Optimizer fo...

834

扫码关注云+社区