第2版译者序
距离上一版《奔跑吧 Ansible》中文版问世已经两年有余,非常荣幸还能主导本次第 2版的翻译工作。自第 1版出版后,不管是大规模服务器配置管理、Ansible社区,还是我的工作,都有了很多变化。
我从专注于运维能力提升的专家岗位上离职,转而回归基础设施研发与运维团队的技术管理工作。在新的岗位上,我有三个深切的感触:第一,自动化配置管理领域的触角已经深入网络设备领域;第二,在数据中心与 IT基础设施中,仍然有部分领域难以避免地使用 Windows操作系统;第三,容器化接过云计算的接力棒,正在席卷整个行业。也许是作者也和我有类似的感受,第 2版《奔跑吧 Ansible》如期而至,添加了 Windows管理和网络设备管理的相关章节。同时,还重写了 Docker一章。
除了行业的变化外,Ansible的大版本也来到了 2.x。在这个大版本中,Ansible带来了不少改变与新特性。使用 Ansible新版本的同时,继续使用第 1版的《奔跑吧 Ansible》作为工具书显然会让读者产生很多困惑,第 2版的出版恰好可以解决这个问题。
在第 2版的翻译中,我尝试让我所管理的 SRE团队都参与到本书的翻译工作中,感谢各位同事的辛勤劳动。参与翻译的人员如下:杨振振(第 1章和第 15章)、刘德鑫(第 2至 4章)、高雪(第 5至 7章)、张冠男(第 8至 9章和第 19章)、刘阳龙(第 11至 12章和第 18章)、李震(第 10章、第 16至 17章)以及刘志远(第 13至 14章)。
第1版译者序
由于诸多原因,早在童年时代计算机就进入了我的生活。对计算机的迷恋最终将我带进了计算机工程领域。而让我真正从玩耍转向工程化地对待计算机的分水岭是,对系统管理领域的接触。好吧,不管多么不乐意,这类工作在那个年代就是被称作网管。从我刚开始入门系统管理的时候,我就一直有一个疑问:如果一家公司足够大,有上百台计算机,该怎么管理呢?总不能一台台远程桌面连上去吧?嗯,没错,那个时候我使用的还是 Windows,而上百台计算机对于当时的我来说已经是一个很夸张的数字了。2007年我加入新浪平台架构部,这里的工作为我真正打开了新世界的大门。那个时候,部门正在使用 CFEngine管理上百台机器、为不同功能的服务器划分角色、为相同功能的服务器进行编号(像为公牛编号那样)、为配置文件编写模板来减少硬编码,所有这一切都用一种工程实践的方法解决了我之前的所有疑问。后来,我才知道这个实践性很强的方法的名字——配置管理。转眼之间,我已经在新浪工作了七年之久。这七年间,我的职位与工作内容有多次变化,但所围绕的工作核心从未改变:如何让数千台服务器按照我们想要的方式运转。为了更好地达到这一目的,我尝试过各种配置管理的方式:从 CFEngine到 Puppet、SaltStack,甚至是自行开发配置管理工具。但是每一种方式都与我理想中那个遵循“ KISS原则”、易于学习,且在功能上具有无穷扩展空间的配置管理工具相差甚远——直到经同事文旭的推荐,我认识了 Ansible。Ansible的轻量、最小化抽象层及轻松扩展与收缩一下子就吸引了我。到目前为止,它是与我理想中的配置管理工具最接近的一个。这样优秀的工具我当然不会自己独享。我曾经在各种场合向正在寻找合适配置管理工具的朋友与同事推荐 Ansible。我发现有一部分朋友虽然给予了 Ansible正面的评价,却对缺少中文文档感觉略有不便。这让我意识到语言仍旧是部分技术人员学习的障碍之一。显然,我并不具备帮助技术人员提升英语阅读水平的能力,但至少我可以将这本《奔跑吧 Ansible》的中文版带给大家,希望本书可以帮助一些读者快速上手 Ansible。
由于水平所限,本书中难免出现一些翻译错误,诚恳地欢迎大家向我或者出版社反馈本书中的各种错误。
最后,我想要感谢赵新宇、陈明杰和刘宇等朋友,他们在我翻译本书的过程中为我提供了无私的帮助和支持。还要感谢我的夫人张若金的支持与理解。没有你们就不会有本书的出版。
序
2012年 2月 Ansible创立的时候,它还是一个非常简单的项目,随后它的快速发展令我们十分惊喜。现在,它已经是上千人参与开发的产品了(如果包括参与贡献想法的人还会更多),并且几乎在每个国家都有人在使用。在各种技术会议中也总是能找到一些人在使用它,这在计算机领域是一件很不寻常的事。
Ansible的不平凡源自于它的平凡。Ansible并不企图做盘古开天地般的创新,而是从那些聪明的家伙已经提出的想法中提炼出精华,并将这些想法尽可能地落地。
Ansible旨在探求某些学术上的 IT 自动化方法(它们本身就是对大型繁杂的商业套件的一种反映)与简单粗暴解决问题的脚本之间的平衡点。另外,我们如何能将配置管理系统、部署发布系统、编排系统(orchestration project)以及千奇百怪但是非常重要的 shell脚本库用一个单一系统替换呢?这恰恰是 Ansible 要实现的。
我们可以从 IT自动化技术栈中移除主要架构组件吗?去掉管理性守护进程,转而依赖于 OpenSSH,意味着系统转眼间就可以开始管理一台新的计算机,而不需要在被管理的机器上安装任何东西。更深一层来说,系统更趋于可靠和安全。
我注意到,尝试使用自动化系统本该使事情变得简单,但实际上却变得更难了。并且编写以自动化为目的的东西就好像一个吸收时间的黑洞,使我无法在本应该更专注的事情上投入更多时间。况且我并不想在这种系统上投入数个月以成为这个领域的专家。
我个人尤其享受编写新的软件,而不喜欢在使其自动化方面花太多时间。简而言之,我希望自动化的事情尽快完成,这样我就能将更多时间投入到我更关注的事情上。Ansible并不是一个你需要整天和它打交道的系统。你可以很快把它拿起来,很快搞定,然后又很快回到你更关心的事情上面。我希望这些也会成为你喜欢 Ansible 的原因。
我花了大量时间来确保 Ansible的文档易于理解和掌握,其他渠道也还有很多不同形式的材料可以参考,参考这些资料进行实践是大有裨益的。在本书中, Lorin使用非常流畅的行文、适于逐步探索的顺序介绍了 Ansible。Lorin 几乎是从最开始就参与到 Ansible 项目中的,我真诚地感谢他做出的贡献。我还要真诚地感谢今天项目中的每一位成员,以及未来的每一位成员。
最后,希望大家喜欢这本书,享受瞬间就可以管理你的计算机的愉悦感!啊,对了,别忘记安装 cowsay! 1
—Michael DeHaan,Ansible 软件的创作者,Ansible公司前 CTO2 2015 年 4 月
1 Ansible 的创作者很有趣。从 0.5 版本开始,他给 Ansible留了一个彩蛋:如果你的机器中安装了 cowsay 的话,执行 playbook 的时候,终端上就会显示一头奶牛。最主要的是,他还在发布 0.5 版本的时候严肃地介绍了这么做的优点。——译者注
2 如 Michael DeHaan 自己所说,他其实更享受编写新软件。目前他已经从 Ansible 公司离职到 DataStax 工作。在 Ansible 公司的最后工作日,他写下了一篇博文: Happy Trails, Ansible(http:// michaeldehaan.net/ post/109595670406/happy-trails-ansible)。——译者注
第2版前言
自本书第 1版撰写(早在 2014年)以来,Ansible的世界发生了很大变化。Ansible项目完成了一次重大发布,版本号变为 2.0。项目之外也发生了很大变化:支持 Ansible项目的公司 Ansible, Inc.被 Red Hat收购。所幸 Red Hat的收购并没有影响 Ansible项目的发展,它仍在积极开发并努力赢得用户。
我们在这个版本中做了多处更改,最重要的变化是增加了 5个全新的章节。该书现在涵盖了回调插件、Windows主机、网络硬件和 Ansible Tower。在第 8章中添加了很多内容,将其扩展为新的一章“自定义 host、run和 handler”。我们还重写了“Docker”一章以涵盖新的 Docker模块。
为了与 Ansible 2.3版本兼容,我们更新了所有范例的代码。特别是将已弃用的 sudo语
句全部替换为 become。删除了对已弃用模块(如 docker、ec2_vpc和 ec2_ami_search)
的引用,并将它们改为使用新的模块。 “Vagrant”一章新收录了 Ansible本地置备器, “Amazon EC2”一章增加了 Packer Ansible远程置备器,“让 Ansible快到起飞”一章涵
盖了异步任务,以及在“调试 Ansible playbook”一章介绍了 2.1版中引入的调试器。
此外,还有一些细微的变化。例如, OpenSSH从使用十六进制编码的 MD5指纹切换到 base64编码的 SHA256指纹,并更新了相应的范例。最后,我们还修改了读者提交的勘误表。
关于人称的注释
本书的第 1版只有一个作者,并且经常使用第一人称单数:我。但是第 2版有两位作者,使用第一人称单数会比较奇怪。但我们还是决定保留它,因为它通常用于表达其中一位作者的意见。
致谢来自 Lorin
感谢 Jan-Piet Mens、Matt Jaynes和 John Jarvis审阅本书的草稿并提供反馈。感谢 SendGrid的 Isaac Saldana和 Mike Rowan对本书的支持。感谢 Michael DeHaan创建 Ansible并对社区做出的巨大贡献,以及对该书的反馈,包括他对为什么选择使用 Ansible这个名字的解释。感谢我的编辑 Brian Anderson,他对我的工作充满了无限的耐心。
感谢我的父母对我的无尽支持;感谢我的兄弟 Eric,我家的正牌作家;还要感谢我的两个儿子,Benjamin和 Julian。最后,感谢我的妻子 Stacy为我所做的一切。
来自 René
感谢我的家人和我的妻子 Simone对我的支持与爱,感谢我的三个孩子,Gil、Sarina和 Léanne,感谢他们给我带来的快乐;致所有向 Ansible贡献代码的人,感谢你们的工作;并特别感谢 Matthias Blaser向我推荐了 Ansible。
第1版前言
我为什么写这本书
多年前,我使用当时流行的 Python Web 框架 Django 编写了我人生中的第一个 Web 应用,当那个应用终于在我的台式计算机中成功运行时,油然而生的成就感让我至今难忘。首先运行 django manage.py runserver,然后打开浏览器并访问 http://localhost:8000,最后是见证奇迹的时刻——我的 Web 应用闪亮登场!
然而,随后我就发现让应用运行在 Linux服务器上有非常多令人无奈的事情。除了把 Django 本身和我的应用安装在服务器上之外,还必须安装 Apache 和 mod_ python模块。有了 mod_python模块,Apache 才可以运行 Django 应用。这还不算完,我还必须弄明白天书一般的 Apache配置文件,并把它配置为可以同时运行我的程序和其他所依赖的静态内容。
说实在的,每一步都不算难,但是想把所有的环节都配置正确也不是一件容易的事。作为一名程序员,我真不想不停地摆弄配置文件,我只是想让我的应用能运行而已。好在当我把一切都配置好之后,就不用再去动它了。然而几个月后的一天,噩耗传来,在另一台服务器上还得再经历一遍这些无奈,而且还是从头开始。
终于有一天,我发现痛苦的根源在于我用的方法不对。做这些事情的正确方法有一个学名 : 配置管理。使用配置管理要注意的一件重要的事情是:它是一种获取那些始终保持最新的配置与信息的方法。你不再需要频繁地搜索正确的文档或者查找以前的笔记。
不久以前,一位同事出于兴趣尝试使用 Ansible部署新项目,他请我帮忙推荐一些官方文档以外的 Ansible应用实践方面的参考资料。那时我才突然发现,好像官方文档以外没有什么资料可以推荐了。于是我决定填补这个空白,所以就有了这本书。可惜这本书对于那位同事来说太迟了,但希望对于你来说它来得正是时候。
谁适合读这本书
这本书是写给需要管理 Linux 或者类 UNIX 服务器的人的。如果你对下列术语如数家珍:系统管理、运维、部署、配置管理(看到这里也许有的读者在叹气)或者 DevOps,那么看到本书你也许会觉得如获至宝。
尽管我也在管理自己的 Linux服务器,但我的专业其实是软件开发。这意味着本书的范例将偏向于部署领域,尽管我同意 Andrew Clay Shafer的“部署与配置没有明确边界”的观点。
阅读指南
我对这样的提纲并不感兴趣:第 1 章涵盖这个,第 2 章涵盖那个,类似这样的内容不会有人真正仔细去看(反正我从没看过)。我认为目录反倒应更易于浏览。
本书的内容编排是适于从前向后顺序阅读的,后面章节中的内容会基于前面章节中的内容。本书包含大量范例,建议你按照本书的指导在自己的计算机上去实践这些范例。绝大部分范例都是面向 Web 应用的。