Ansible是近年来急速发展的开源配置管理工具。在Ansible之前,行业中已经有很多开源配置管理工具了,特别是大名鼎鼎的Puppet,简直是配置管理工具中的超级巨星。然而,Ansible依靠它的简单易用、“零依赖”以及弱抽象获得了无数开发者和运维工程师的青睐。遗憾的是,除了官方文档外,Ansible相关的优秀文档凤毛麟角,而本书恰恰就是为了缓解这一问题而编写的。作者在本书中演示了如何使用Ansible管理接近真实生产环境的案例。既展现了Ansible的强大功能,又能够帮助读者快速入门与上手,本书非常适合作为官方文档的补充或者搭配阅读。特别值得一提的是,本书第2版还增加了管理Windows服务器和网络设备方面的章节,并重新编写了Docker相关章节,及时地对第1版中的不足进行了改进。
自动化运维|DevOps绝配 前新浪CTO领衔翻译 基于真实生产环境案例 涵盖大量官方文档缺少的重要概念和主题 覆盖编写playbook|管理远程服务器|探索内置模块
本书赢得的赞誉
大规模集群的配置管理工具一直都是提升效率的利器。新浪在 2003年前后开始使用 CFengine;在 2010年前后,为了解决 CFengine的一些问题,逐渐在一些业务中用 SSH进行批量命令执行和配置文件拉取,这种组合一直用到现在,管理着数万台服务器,但现在基本上已经以 SSH为主了。本书的译者在新浪负责很多配置管理系统的开发,以我们的经验来看,基于 SSH进行配置管理有很多好处,这也是我对 Ansible很感兴趣的地方。充分利用系统现成的机制,不仅省去了 Agent的安装,在数千台规模的大型数据中心,少一些中心化服务还意味着少了一些路由和安全策略的配置,省去了很多不必要的麻烦。当然,Ansible还有很多吸引人的地方,非常值得你去学习和发现。
——童剑新浪研发中心总经理
Ansible作为自动化系统运维的一大利器,在构建整个体系过程中有着举足轻重的地位。 DSL、幂等性、playbook、大量的模板等都是它的魅力所在,再加上易封装、接口调用方便, Ansible正在被越来越多的大公司采用,包括独立使用以及与其他工具(如 Puppet)结合使用。
本书通过大量简单易用的实例帮助读者快速上手,通读全书会让你对 Ansible有一个全面的了解,动手操作书中的实例,可快速掌握 Ansible,剩下的就交给你的灵感吧。
——刘宇 @守住每一天,金山西山居架构师《Puppet实战》作者,《Puppet实战手册》译者之一
对于 DevOps,我自己的理解是运维即开发,人管理代码,代码管理机器,而不是人直接管理机器。Ansible帮我们实现了运维人员向运维开发的转型,让繁杂、危险的运维工作变得简单、安全和可控。本书秉承了 Ansible这一工具简明的一贯特点,不是长篇累牍地讲解复杂技术原理,而是列举了大量简明的实例,拿来阅读半小时即可上手解决实际问题。
——程辉 UnitedStack公司创始人兼 CEO
我在几个小时内就疯狂地“啃”完了第 1版《奔跑吧 Ansible》的手稿: Lorin妙笔生花,对 Ansible的讲解如行云流水。听到他与 René合写第 2版的时候我感到非常兴奋。在第 2版中,两位作者向读者展示了如何将一个非常有用的实用工具应用得出神入化,我想不出有什么内容是他们没有讨论到的。
—Jan-Piet Mens,咨询顾问
Ansible的万用指南。本书不仅适用于入门,也适用于了解如何使用高级功能提升你的 Ansible技能。 —Matt Jaynes,High Velocity Ops首席工程师
Ansible的美妙在于,你可以从实践入手,而它又易于快速实现原型,很快就能迭代起来,并且能不断解决问题。这当然很棒。然而,随着时间的推移,这种方式会导致知识和理解上的偏差,而且很难去调和。
《奔跑吧 Ansible》(第 2版)恰恰可以解决这个问题。因为它从 Ansible的基础知识一直
讲解到使用 YAML和 Jinja2的复杂性。而且本书还包含许多现成的案例可供学习和测试,
可以帮助读者深入了解自动化构建与部署生产环境。
在过去几年的培训课程和实践工作中,我总是向同事和客户推荐这本书。
—Dag Wieers,自由职业 Linux系统工程师, Ansible长期贡献者和咨询顾问
本书既为大家提供了简单功能的讲解,同时也深入探讨了 Ansible的配置管理方法。本书还包含很多提示和指引,并覆盖了各种形式的案例,例如 AWS、Windows和 Docker。
—Ingo Jochim, itelligence GMS/CIS Cloud Implementation经理
Lorin和 René字字珠玑,妙合无痕。他们手把手带领读者完成创建和管理 Ansible项目的所有重要步骤。本书不单单是一本 Ansible的参考书,它还涵盖了官方文档中缺少的几个重要概念和主题。它是 Ansible初学者的优秀学习资源,同时也包含许多对 Ansible中高级使用者很有帮助的概念与技巧。
—Dominique Barton, confirm IT solutions DevOps工程师
不管你是一名新手,还是一名已经在使用 Ansible并且希望继续取得进步的老程序员,本书都精辟地涵盖了你所需要了解的内容。它与同类书籍最大的区别在于,它采用了真实的例子,并解释了如何实现以及为什么会这样,这一大特点将帮助你更加深入地理解 Ansible。
—Paul Angus, ShapeBlue技术 VP
第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 应用的。
本书约定
本书使用的排版约定如下:
斜体(Italic)
用于表明新术语、URL、电子邮件地址、文件名、目录名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及在段落中对变量、函数名、数据库、数据类型、环境变量、语
句和关键字等程序元素的引用。
等宽加粗字体(Constant width bold)
用于显示命令或用户手工输入的文本。
等宽斜体(Constant width italic)
用于显示应该由用户提供或者根据上下文确定的值。
这个图标表示一般性的备注说明。这个图标表示提示或建议。
这个图标表示警告或提醒。
在线资源
本书中的样例代码都可以在本书的 GitHub 页面(http://github.com/ansiblebook/ansiblebook)上获取到。Ansible 官方也提供了丰富的文档(http://docs.ansible.com)供参考。
我还在 GitHub(https://github.com/lorin/ansible-quickref)上维护了一个简明参考手册。
Ansible的代码存放在 GitHub上(https://github.com/ansible/ansible),在之前版本中,它被分散到三个仓库中保存。但是从 Ansible 2.3版本开始,所有的代码都放在同一个仓库中进行维护了。
建议将 Ansible的模块索引(http://bit.ly/1Dt75tg)加到你的收藏夹中,在使用 Ansible的过程中,你将会时常需要去查看它,网址为 http://docs.ansible.com/modules_by_ category.html。Ansible Galaxy是一个由社区共同维护的 Ansible角色仓库,网址为 https://galaxy.ansible.com/。如果你有任何关于 Ansible的问题,都可以到 Ansible项目的 Google Group 中讨论(https://bit.ly/1Dt79ZT)。
如果你希望向 Ansible开发组贡献代码,可以访问 Ansible开发组的 Google Group: https://bit.ly/1Dt79ZT。
在 irc.freenode.net 上还有一个非常活跃的 #ansible IRC 频道,在那里你可以得到更为实时的帮助。
本书旨在帮助你解决实际问题。一般来说,除大批量使用代码之外,如果你需要在自己的程序或文档中使用本书提供的范例代码是不需要联系我们取得授权的。例如,使用本书中的几段代码编写一个程序不需要向我们申请许可。但是销售或者分发 O’Reilly图书附带的代码光盘则必须事先获得授权。引用书中的代码来回答问题也无须我们授权。将大段的范例代码整合到自己的产品文档中则必须经过我们的授权。
我们非常希望你能在引用本书时表明出处,但并不强求。出处一般包含书名、作者、
出版商和 ISBN。例如: Ansible: Up and Running by Lorin Hochstein and René Moser (O’Reilly). Copyright 2017 O’Reilly Media, Inc.,978-1-491-97980-8.”
如果你对范例代码的使用不属于上述一般性合理情形,或者对许可范围存疑,欢迎随时通过 permissions@oreilly.com与我们联系。
联系我们
请将对本书的评价和存在的问题通过如下地址告知出版者:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)
奥莱利技术咨询(北京)有限公司
对于本书的评论和技术性的问题,请发送电子邮件到:
bookquestions@oreilly.com
关于我们的书籍、课程、会议和新闻的更多信息,请参阅我们的网站 http://www.oreilly. com。
在 Facebook 上找到我们: http://facebook.com/oreilly
在 Twitter 上关注我们: http://twitter.com/oreillymedia
在 YouTube 上观看我们: http://www.youtube.com/oreillymedia
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
. 提交勘误:你对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在购买电子书时,积分可用来抵扣相应金额)。
. 交流互动:在页面下方读者评论处留下你的疑问或观点,与我们和其他读者一同学习交流。
页面入口: http://www.broadview.com.cn/35144