科技>计算机>网络与互联网
奔跑吧Ansible

奔跑吧Ansible"

作者:陈尔冬
ISBN:9787121275074
定价:¥79.0
字数:476千字
页数:348
出版时间:2015-11
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

Ansible是近年用户量急速蹿升的互联网配置管理工具。在Ansible之前,行业中已经有很多开源配置管理工具了,特别是鼎鼎大名的Puppet,堪称配置管理界的超级巨星。然而,Ansible依靠它的简单易用、"零依赖”及弱抽象还是获得了无数开发者和运维工程师的青睐。遗憾的是,由于Ansible还很年轻,除了官方文档外,其他相关的优秀文档可谓凤毛麟角。而本书恰恰就是为了缓解这一现状而写的。作者在本书中演示了如何使用Ansible管理接近真实生产环境的案例,这既演示了Ansible的强大功能,又能够帮助读者快速入门与上手,非常适合作为官方文档的扩展资料来阅读。

前言

O’Reilly Media, Inc.介绍 O’Reilly Media 通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978 年开始,O’Reilly 一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly 的发展充满了对创新的倡导、创造和发扬光大。 O’Reilly 为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make 杂志,从而成为DIY 革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。 O’Reilly 的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly 现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版、在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。 业界评论 “O’Reilly Radar 博客有口皆碑。” ——Wired “O’Reilly 凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。” ——Business 2.0 “O’Reilly Conference 是聚集关键思想领袖的绝对典范。” ——CRN “一本O’Reilly 的书就代表一个有用、有前途、需要学习的主题。” ——Irish Times “Tim 是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra 的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim 似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。” ——Linux Journal 推荐序一 几年前,我和尔冬都作为技术团队的一员在一起开始新浪微博的研发,研发团队开发完第一个服务后就面临服务发布及管理的问题。最开始是通过工程师手动登录服务器的方式来发布与启动。当服务请求增大、服务单元增多后,工程师便将命令写成脚本,通过SSH 在多台机器执行,半人工地解决了一段时间的问题。当服务规模进一步增大,手工运行SSH 变得困难后,我们开始寻找一些工具来使这些工作自动化,当时能找到的工具都需要在机器上安装一个agent,通过agent 接收指令来执行对应的操作。随着服务集群规模变大、依赖变多,当时使用的工具需要具备指令安全、执行进度汇报、执行结果检 测等功能。于是我们自己做了一个脚本,可以通过命令行的方式控制软件发布、服务启动与进度查看。随着机器规模的增加,命令行及脚本的方式显得不是很直观,也不利于新进入团队的人了解及使用。于是我们做了一个Web 界面来中心化管理及执行脚本,并且可以很直观地查看进度,还可以选择发布任务执行的范围,较好地解决了当时服务发布遇到的问题。 几年之后,我们发现Ansible 使用相同的理念更好地解决了以上问题。其设计方法也遵循“脚本+ 可视化管理”的思路,Ansible 本身是一种脚本控制的语言,在此之上,我们可以选择其商业化的Tower 软件来可视化地进行管理。而其脚本在指令安全、执行进度汇报、执行结果检测方面,相对于直接运行操作系统脚本都具有更大的优势。 自动化管理是大势所趋,尔冬及时翻译的《奔跑吧Ansible》一书可以给国内同行带来很多启发,希望大家能够利用Ansible 工具及设计思想将应用的发布和配置管理提升到新的高度。 ——TimYang 微博研发副总经理,“高可用架构”公号主 推荐序二 运维发展到今天,已经不是刀耕火种的年代,各种运维自动化工具层出不穷,运维人员也逐步摆脱了直接登录服务器进行操作所带来的烦琐、重复和高风险性。自动化工具也有一个演进过程,从Puppet、Saltstack 到Chef,运维人员在学习和使用的过程中也深深因其复杂性而苦恼,特别是客户端机制。相比之下,Ansible 的使用简单很多,这也是它广受欢迎的主要原因。 运维自动化工具本来是用来简化运维工作的,但如果工具本身比较复杂,甚至需要一定的程序开发能力,就会增加使用和推广的难度。Ansible 有三个最吸引人的地方:无客户端、简单易用和日志集中存储。很多时候,运维人员对服务器仅具有临时权限,甚至没有权限,所以无法部署客户端程序。另外,客户端机制往往也是运维自动化容易出问题的地方,这涉及客户端的安装、配置修改和卸载,其中任何一步没有同步完成,都可能会带来隐患。 Ansible 很简单,上手方便,不需要啃一本大部头书才能学会使用(从这一点来看,真可谓业界良心)。另外Ansible 又很好地解决了Shell 操作日志的集中存储问题——这一点在被管理服务器数量少时,貌似作用还不大,但在批量管理大量服务器时,就能显示出其便利性了。所有操作日志都存储在Ansible 发起服务器,可以采用自定义的格式,这样可以很方便地知晓哪些服务器的操作有问题,哪些已成功,而且便于日后的追溯。当然,Ansible 的配置管理功能简单而强大,所有被管理的软件配置都集中存储,如果目标服务器想安装MySQL,InnoDB 所占用内存需要从10GB 调整为12GB,那么在Ansible 发起服务器简单修改即可。 我对Ansible 的印象非常好。在2014 年年底的时候,为了给公司采购公有云提供决策支持,我选定了国内八大公有云,对它们进行了长达四个月的测试,总共进行了上万次测试。 每家公有云随机选择3~5 台云主机和RDS,每台云主机测试多轮,每轮测试200 次。测试项目包括网络稳定性(探测节点涵盖全国共400 多个)、CPU、内存、磁盘及云主机整机性能测试。如果不借助于Ansible,仅仅两个人是无论如何也不可能在短时间内完成一万多次测试的。我们基于Ansible 编写了一个批量自动化测试工具,这个工具完成了对新入手云主机的一切工作,包括初始化、测试工具部署、测试数据装载及自动发起指定次数的测试流程。结果很完美,所有测试结果都汇聚在Ansible 发起服务器,我们又开发了一个日志自动分析的工具,能从Ansible log 中截取有用的信息并加以汇总(就只 差用Excel 出图了)。 同时,Ansible 虽然不如Puppet 等复杂,但也还是需要一些方法和技巧,而且版本更新迭代较快。因此我也很高兴看到尔冬兄亲自翻译的《奔跑吧Ansible》这本书,其英文原版由Michael DeHaan(Ansible 软件的创作者,Ansible 公司前CTO)亲自作序,其受认可度可见一斑。本书内容编排由浅入深,理论与实践并重,作者特别提到了SSH multiplexing,Ansible 与之配合,可以用来管理成千上万的服务器节点。 尔冬兄是运维行业资深人士,深度参与了新浪微博从小到大的发展过程。每次和尔冬兄交流,总能感觉到他对运维行业深深的感情,以及关于运维的真知灼见。这次尔冬兄亲自翻译此书,可以说是国内诸多Ansible 使用者的福祉,可以帮助大家更好地学习、理解、掌握Ansible,并融会贯通。 ——萧田国 开放运维联盟联合主席,高效运维社区发起人 译者序 由于诸多原因,早在童年时代计算机就进入了我的生活。对计算机的迷恋最终将我带进了计算机工程领域。而让我真正从玩耍转向工程化地对待计算机的分水岭就是,对系统管理领域的接触。好吧,不管多么不乐意,这类工作在那个年代就是被称作网管。从我刚开始入门系统管理的时候,我就一直有一个疑问:如果一家公司足够大,有上百台计算机,该怎么管呢?总不能一个个远程桌面连上去吧?嗯,没错,那个时候我使用的还是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 的文档易于理解和掌握,但是有不同形式的材料可以参考,并依此尝试实践应用总是大有裨益的。 在《奔跑吧Ansible》一书中,Lorin 使用非常流畅的行文、适于逐步探索的顺序介绍了Ansible。Lorin 几乎是从最开始就参与到了Ansible 项目中,我真诚地感谢他做出的贡献。 我还要真诚地感谢今天项目中的每一位成员,以及未来的每一位成员。 最后,希望你们喜欢这本书,享受瞬间就可以管理你的计算机的愉悦感!啊,对了,别忘记安装cowsay 注1 ! ——Michael DeHaan Ansible 软件的创作者,Ansible, Inc. 公司前CTO 注2 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)。——译者注 前言 我为什么写这本书 多年前,我使用时下流行的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(见附录D 参考文献webops)的部署与配置没有明确边界的观点。 本书引导 我对这样的提纲并不感冒:“第1 章涵盖这个;第2 章涵盖那个”,类似这样的内容不会有人真正仔细去看(反正我从没看过)。我认为目录反倒更易于浏览。本书的内容编排是适于从前向后顺序阅读的,后面的章节会基于前面的内容。本书包含大量范例,建议你按照本书指导在自己的计算机上去试验这些范例。绝大部分范例都是面向Web 应用的。 本书约定 本书使用的排版约定如下: 斜体(Italic) 新术语、URL、电子邮件地址、文件名和文件扩展名以这种字体展示。 等宽字体(Constant width) 程序代码或正文中包含的程序元素,如变量、函数名、数据库、数据类型、环境变量、 语句和关键字等代码文本以这种字体展示。 等宽黑体字(Constant width bold) 需要用户输入的命令或其他文本以这种字体展示。 等宽斜体字(Constant width italic) 需要由用户替换为具体内容的文本,或需要遵照具体上下文确定具体内容的文本由 这种字体展示。 这个图标表示小窍门、建议或是一般注意事项。 这个图标表示一般性的提示。 这个图标表示警告或提醒。 本书切口处 中的页码对应英文原书页码。 在线资源 本书中的样例代码都可以在本书的GitHub 页面(http://github.com/lorin/ansiblebook)上获取到。Ansible 官方也提供了丰富的文档(http://docs.ansible.com)供参考。我还在GitHub 上维护了一个简明参考手册(http://github.com/lorin/ansible-quickref)。 Ansible 的代码存放在GitHub 上,分割成三部分分别存放在不同的代码仓库上: ? 主仓库(https://github.com/ansible/ansible)。 ? 核心模块(https://github.com/ansible/ansible-modules-core)。 ? 其他模块(https://github.com/ansible/ansible-modules-extras)。 建议将Ansible 的模块索引加到你的收藏夹中,在使用Ansible 过程中,你将会时常需要去查看它,网址为:http://docs.ansible.com/modules_by_category.html。Ansible Galaxy是一个由社区共同维护的Ansible 角色仓库,网址为:https://galaxy.ansible.com/。 如果你有任何关于Ansible 的问题,都可以到Ansible 项目的Google Group 中讨论:https://groups.google.com/forum/#!forum/ansible-project。 如果你希望向Ansible 开发组贡献代码,可以访问Ansible 开发组的Google Group :https://groups.google.com/forum/#!topic/ansible-devel/68x4MzXePC4。 在irc.freenode.net 上还有个非常活跃的#ansible IRC 频道,在那里你可以得到更为实时的帮助。 本书旨在帮你解决实际问题。一般来说,除大批量使用代码之外,如果你需要在自己的程序或文档中使用本书提供的范例代码是不需要联系我们取得授权的。例如,使用本书的几段代码编写一个程序不需要向我们申请许可。但是销售或者分发O’Reilly 图书随附的代码光盘则必须事先获得授权。引用书中的代码来回答问题也无须我们授权。将大段的示例代码整合到自己的产品文档中则必须经过我们的授权。 我们非常希望你能在引用本书时表明出处,但并不强求。出处一般包含有书名、作者、出版商和ISBN。例如:“Ansible: Up and Running by Lorin Hochstein (O’Reilly).Copyright 2015 Lorin Hochstein, 978-1-491-91532-5”。 如果有关于使用代码的未尽事宜,可以随时与我们联系:permissions@oreilly.com。 Safari Books Online 是应需而变的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发者、Web 设计师、商务人士和创意精英都可以将Safari 在线图书作为他们的调研、解决问题、学习和认证的主要资料来源。 Safari Books Online 对于组织团体、政府机构和个人提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sam、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGarw-Hill、Jones & Bartlett、Course Technology 及其他数十家出版社的上千种图书、培训视频和正式出版前的书稿。要了解更多关于Safari Books Online 的信息,请访问我们的网站。 联系我们 请将对本书的评价和发现的问题通过如下地址告知出版者。 美国: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 本书拥有一个专属网页,你可以在那找到本书的勘误表、范例代码和其他信息,网址为: http:// bit.ly/ansible-up-and-ruuning。 对本书的意见和技术性问题还可以发送电子邮件到bookquestions@oreilly.com。想要了解更多关于O’Reilly 图书、培训课程、会议和新闻等信息,请访问O’Reilly 官方网站:http://www.oreilly.com。 Facebook 地址:http://facebook.com/oreilly。 Twitter 地址:http://twitter.com/oreillymedia。 YouTube 地址:http://www.youtube.com/oreillymedia。 致谢 感谢Jan-Piet Mens、Matt Jaynes 和John Jarvis 审阅本书的草稿并提出反馈意见。感谢在SendGrid 工作的Isaac Saldana 和Mike Rowan 的大力支持。感谢Michael Dehaan 创建了Ansible 项目并引领着迅速崛起的Ansible 社区。同时也感谢Michael Dehaan 对本书的反馈,包括他对Ansible 名字由来的讲解。感谢本书的编辑Brian Anderson 超耐心地与我共同工作。 感谢我父母无私的支持;感谢我的哥哥Eric,他是我们家族中的正牌作家;感谢我的两个儿子Benjamin 和Julian ;最后,感谢我的妻子Stacy 在各方面的付出与无条件的支持。

目录

原书推荐序 ................................................................................xxiii 前言 .......................................................................................... xxv 第1 章 概述 ................................................................................1 关于版本的说明 .....................................................................................................2 Ansible 的优点 .......................................................................................................2 Ansible 如何运作 ...................................................................................................3 Ansible 的精妙设计有哪些 ....................................................................................4 易读的语法 .....................................................................................................4 远程主机无须安装任何依赖 ...........................................................................5 基于推送模式 ..................................................................................................5 Ansible 管理小规模集群 .................................................................................6 内置模块 .........................................................................................................6 非常轻量的抽象层 ..........................................................................................7 Ansible 太过于简单了吗 ........................................................................................8 我需要具备哪些基础知识 ......................................................................................9 哪些内容不会涉及 .................................................................................................9 安装Ansible.........................................................................................................10 建立一台用于测试的服务器 ................................................................................ 11 使用Vagrant 来创建测试服务器 ................................................................... 11 xiv | 目录 将测试服务器的信息配置在Ansible 中 ........................................................15 使用ansible.cfg 文件来简化配置 ..................................................................16 继续前进 ..............................................................................................................20 第2 章 playbook :一切的开端 ...................................................21 一些准备工作 ......................................................................................................21 一个简单的playbook ...........................................................................................22 指定一个nginx 配置文件 ..............................................................................24 创建一个定制的首页 .....................................................................................25 创建一个webservers 群组 .............................................................................25 运行这个playbook ...............................................................................................26 playbook 是YAML 格式的 ..................................................................................28 文件的起始 ...................................................................................................28 注释 ...............................................................................................................28 字符串 ...........................................................................................................28 布尔型 ...........................................................................................................29 列表 ...............................................................................................................29 字典 ...............................................................................................................30 折行 ...............................................................................................................30 剖析playbook ......................................................................................................31 play................................................................................................................32 task ................................................................................................................33 模块 ...............................................................................................................34 将它们整合在一起 ........................................................................................35 执行Ansible 后发生变化了吗?跟踪主机状态 ...................................................36 来点更酷炫的:添加TLS 支持 ...........................................................................36 生成TLS 证书 ...............................................................................................38 变量 ...............................................................................................................38 生成nginx 配置模板 .....................................................................................40 handler ...........................................................................................................41 运行playbook................................................................................................43 第3 章 inventory :描述你的服务器 ............................................45 inventory 文件 ......................................................................................................45 准备工作:创建多台Vagrant 虚拟机 ..................................................................46 inventory 行为参数 ..............................................................................................49 ansible_connection ........................................................................................50 ansible_shell_type .........................................................................................50 ansible_python_interpreter .............................................................................50 ansible_*_interpreter .....................................................................................50 改变行为参数的默认值 .................................................................................51 群组 .....................................................................................................................51 范例:部署一个Django 应用........................................................................52 别名和端口 ...................................................................................................55 群组嵌套 .......................................................................................................55 编号主机(宠物vs. 公牛) ............................................................................56 主机与群组变量:在inventory 内部 ...................................................................56 主机和群组变量:在各自的文件中 .....................................................................58 动态inventory ......................................................................................................60 动态inventory 脚本的接口 ...........................................................................61 编写动态inventory 脚本 ...............................................................................62 预装的inventory 脚本 ...................................................................................65 将inventory 分割到多个文件中 ...........................................................................66 使用add_host 和group_by 在运行时添加条目 .............................................66 add_host ........................................................................................................66 group_by .......................................................................................................68 第4 章  变量与fact ...................................................................71 在playbook 中定义变量 ......................................................................................71 查看变量的值 ......................................................................................................72 注册变量 ..............................................................................................................72 fact .......................................................................................................................76 查看与某台服务器关联的所有fact ...............................................................77 查看fact 子集 ................................................................................................77 任何模块都可以返回fact ..............................................................................79 本地fact ........................................................................................................79 使用set_fact 定义新变量 .....................................................................................80 内置变量 ..............................................................................................................81 hostvars .........................................................................................................81 inventory_hostname .......................................................................................82 groups ............................................................................................................82 在命令行设置变量 ...............................................................................................83 优先级 ..................................................................................................................84 第5 章 初识Mezzanine :我们的测试应用 .................................85 为什么向生产环境部署软件是一件复杂的事 ......................................................85 PostgreSQL :数据库 .....................................................................................88 Gunicon :应用服务器 ...................................................................................88 nginx :Web 服务器 .......................................................................................89 Supervisor :进程管理器 ...............................................................................90 第6 章 使用Ansible 部署Mezzanine .........................................91 列出playbook 中的task .......................................................................................91 组织要部署的文件 ...............................................................................................92 变量与私密变量 ...................................................................................................92 使用迭代(with_items)安装多个软件包 ...........................................................94 向task 中添加sudo 语句 .....................................................................................96 更新apt 缓存 .......................................................................................................96 使用Git 来Check Out 项目源码 ..........................................................................98 将Mezzanine 和其他软件包安装到virtualenv 中 ................................................99 task 中的复杂参数:稍微跑个题 ....................................................................... 102 创建数据库和数据库用户 .................................................................................. 104 从模板生成local_settings.py 文件 ..................................................................... 105 运行django-manage 命令................................................................................... 108 在应用环境中运行自定义的Python 脚本 .......................................................... 110 设置服务的配置文件 ................................................................................... 112 启用nginx 配置文件 .......................................................................................... 115 安装TLS 证书 ................................................................................................... 116 目录 | xvii 安装Twitter 计划任务 ........................................................................................ 117 playbook 全文 .................................................................................................... 118 在Vagrant 虚拟机上运行playbook .................................................................... 121 将Mezzanine 部署到多台主机 .......................................................................... 122 第7 章  复杂playbook ............................................................123 在控制主机上运行task ...................................................................................... 123 在涉及的主机以外的机器上运行task................................................................ 124 手动采集fact ..................................................................................................... 124 逐台主机运行 .................................................................................................... 125 只执行一次 ........................................................................................................ 126 处理不利行为命令:changed_when 和failed_when .......................................... 127 从主机获取IP 地址............................................................................................ 131 使用Vault 加密敏感数据 ................................................................................... 132 通过模式匹配指定主机 ...................................................................................... 133 限定某些主机运行 ............................................................................................. 134 过滤器 ................................................................................................................ 135 default 过滤器 ............................................................................................. 135 用于注册变量的过滤器 ............................................................................... 135 应用于文件路径的过滤器 ........................................................................... 136 编写你自己的过滤器 ................................................................................... 137 lookup ................................................................................................................ 138 file ............................................................................................................... 139 pipe.............................................................................................................. 140 env ............................................................................................................... 140 password ...................................................................................................... 141 template ....................................................................................................... 141 csvfile .......................................................................................................... 141 dnstxt ........................................................................................................... 142 redis_kv ....................................................................................................... 143 etcd .............................................................................................................. 144 编写你自己的lookup 插件 .......................................................................... 145 更复杂的循环 .................................................................................................... 145 with_lines .................................................................................................... 146 with_fileglob ............................................................................................... 146 with_dict ...................................................................................................... 147 将循环结构用作lookup 插件 ...................................................................... 148 第8 章 role :扩展你的playbook .............................................149 role 的基本构成 ................................................................................................. 149 范例:Database 和Mezzanine role .................................................................... 150 在你的playbook 中使用role ............................................................................. 150 Pre-Task 和Post-Task ......................................................................................... 152 用于部署数据库的“database” role ................................................................... 153 用于部署Mezzanine 的“mezzanine” role ......................................................... 155 使用ansible-galaxy 创建role 文件与目录 ......................................................... 160 从属role ........................................................................................................... 160 Ansible Galaxy ................................................................................................... 161 Web 界面 ..................................................................................................... 161 命令行工具 ................................................................................................. 162 向Galaxy 贡献你自己编写的role ............................................................... 163 第9 章 让Ansible 快到飞起 .....................................................165 SSH Multiplexing 与ControlPersist ................................................................... 165 手动启用SSH Multiplexing ........................................................................ 166 Ansible 中的SSH Multiplexing 选项........................................................... 167 pipelining ........................................................................................................... 169 启用pipelining ............................................................................................ 169 将主机配置为支持pipelining ...................................................................... 169 fact 缓存 ............................................................................................................. 171 JSON 文件fact 缓存后端 ............................................................................ 172 Redis fact 缓存后端 ..................................................................................... 173 Memcached fact 缓存后端 ........................................................................... 173 并行性 ................................................................................................................ 174 加速模式 ............................................................................................................ 175 火球模式 ............................................................................................................ 175 第10 章 自定义模块 ................................................................177 范例:检测远程服务器是否可达 ....................................................................... 177 使用script 模块替代编写自己的模块 ................................................................ 177 模块形式的can_reach ........................................................................................ 178 自定义模块该放到哪里 ...................................................................................... 179 Ansible 如何调用模块 ........................................................................................ 179 生成带有参数的独立Python 脚本(仅限Python 模块) ............................. 179 将模块复制到远程主机 ............................................................................... 179 在远程主机上创建参数文件(仅限非Python 模块) .................................. 179 调用模块 ..................................................................................................... 180 预期的输出 ........................................................................................................ 181 Ansible 预期的输出变量 ............................................................................. 181 使用Python 来实现模块 .................................................................................... 182 解析参数 ..................................................................................................... 183 访问参数 ..................................................................................................... 184 导入AnsibleModule 辅助类 ........................................................................ 184 参数选项 ..................................................................................................... 185 AnsibleModule 的初始化参数 ..................................................................... 188 返回成功或失败 .......................................................................................... 191 调用外部命令 .............................................................................................. 192 检测模式(dry run) .................................................................................... 193 文档化你的模块 ................................................................................................. 194 调试你的模块 .................................................................................................... 196 使用Bash 实现模块 ........................................................................................... 197 为Bash 指定替代的位置 .................................................................................... 198 范例模块 ............................................................................................................ 199 第11 章 Vagrant .....................................................................201 便捷的Vagrant 配置项 ....................................................................................... 201 端口转发和私有IP 地址 ............................................................................. 201 启用agent forwarding ................................................................................. 203 Ansible 置备器 ................................................................................................... 203 置备器何时运行 ................................................................................................. 204 由Vagrant 生成inventory .................................................................................. 204 并行配置 ............................................................................................................ 205 指定群组 ............................................................................................................ 206 第12 章 Amazon EC2 .............................................................209 术语 ................................................................................................................... 211 实例 ............................................................................................................. 211 Amazon 系统镜像 ....................................................................................... 211 标签 ............................................................................................................. 211 指定认证凭据 .................................................................................................... 212 环境变量 ..................................................................................................... 212 配置文件 ..................................................................................................... 213 必要条件:Boto Python 库 ................................................................................ 213 动态inventory .................................................................................................... 214 inventory 缓存 ............................................................................................. 216 其他配置项 ................................................................................................. 217 自动生成群组 .............................................................................................. 217 使用标签定义动态群组 ...................................................................................... 217 把标签应用到现有资源 ............................................................................... 218 更好听的群组名 .......................................................................................... 219 EC2 Virtual Private Cloud(VPC)和EC2 Classic ............................................ 219 配置ansible.cfg 支持使用EC2 .......................................................................... 220 启动新的实例 .................................................................................................... 221 EC2 密钥对 ........................................................................................................ 222 创建新的密钥 .............................................................................................. 222 上传已有密钥 .............................................................................................. 224 安全组 ................................................................................................................ 224 允许的IP 地址 ............................................................................................ 226 安全组端口 ................................................................................................. 226 获取最新的AMI ................................................................................................ 226 向群组中添加一个新的实例 .............................................................................. 227 等待服务器启动 ................................................................................................. 230 创建实例的幂等性方法 ...................................................................................... 231 全部加在一起 .................................................................................................... 231 指定Virtual Private Cloud ................................................................................. 233 动态inventory 和VPC ................................................................................ 237 构建 AMI ........................................................................................................... 238 使用ec2_ami 模块 ...................................................................................... 238 使用Packer ................................................................................................. 238 其他模块 ............................................................................................................ 242 第13 章 Docker ......................................................................243 Docker 与Ansible 配合案例 .............................................................................. 244 Docker 应用的生命周期 ..................................................................................... 244 容器化我们的Mezzanine 应用 .......................................................................... 245 使用Ansible 创建Docker 镜像 .......................................................................... 247 Mezzanine ................................................................................................... 248 其他的容器镜像 ................................................................................................. 253 Postgres ....................................................................................................... 253 Memcached .................................................................................................. 253 Nginx ........................................................................................................... 254 certs ............................................................................................................. 255 构建镜像 ..................................................................................................... 256 部署Docker 化的应用 ....................................................................................... 256 启动数据库容器 ................................................................................................. 257 获取数据库容器的IP 地址和映射端口 .............................................................. 257 等待数据库启动 ................................................................................................. 261 初始化数据库 .............................................................................................. 263 启动Memcached 容器 ................................................................................. 264 启动Mezzanine 容器 ................................................................................... 264 启动证书容器 .............................................................................................. 265 启动Nginx 容器 .......................................................................................... 265 完整的playbook ................................................................................................ 266 第14 章 调试Ansible playbook ...............................................269 调试SSH 问题 ................................................................................................... 269 xxii | 目录 debug 模块 ......................................................................................................... 271 assert 模块 .......................................................................................................... 271 在执行前检查你的playbook .............................................................................. 273 语法检查 ..................................................................................................... 273 列出主机 ..................................................................................................... 273 列出task ...................................................................................................... 274 检测模式 .................................................................................................... 274 diff(显示文件差异) ................................................................................... 275 限制特定的task 运行 ......................................................................................... 275 step .............................................................................................................. 275 start-at-task .................................................................................................. 276 tags .............................................................................................................. 276 继续向前 ............................................................................................................ 277 附录A SSH ............................................................................279 附录B 默认设置 ......................................................................289 附录C 为EC2 证书使用IAM role ............................................293 术语 ..........................................................................................297 参考文献 ...................................................................................303 索引 ..........................................................................................305

作者简介

陈尔冬,原新浪私有云平台高级架构师。现华为云计算平台高级架构工程师。2007年与2014年先后加入新浪与华为。曾从事私有云平台建设与运维、虚拟化平台研发以及私有云平台分布式子系统研发。擅长大型Linux集群系统的自动化管理与运维、问题分析、性能调节与架构设计优化。

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个