新書推薦:
《
推拿纲目
》
售價:HK$
414.0
《
精致考古--山东大学实验室考古项目论文集(一)
》
售價:HK$
250.7
《
从天下到世界——国际法与晚清中国的主权意识
》
售價:HK$
78.2
《
血色帝国:近代英国社会与美洲移民
》
售價:HK$
59.8
《
海外中国研究·王羲之:六朝贵族的世界(艺术系列)
》
售價:HK$
182.9
《
唐宋绘画史 全彩插图版
》
售價:HK$
101.2
《
“御容”与真相:近代中国视觉文化转型(1840-1920)
》
售價:HK$
113.9
《
鸣沙丛书·大风起兮:地方视野和政治变迁中的“五四”(1911~1927)
》
售價:HK$
102.4
|
編輯推薦: |
在当下百家争鸣的配置管理工具领域中,Ansible有着独特的优势:原生即轻量。你不需要在你要管理的机器上安装任何软件,并且它的学习曲线非常平缓。不管你是想要将代码部署到生产环境的开发者,还是寻求更好的自动化解决方案的系统管理员,这本实用指南都将会帮助你快速地在生产环境中使用这个工具。
作者Lorin Hochstein示范了如何编写playbook(Ansible中的配置管理脚本),如何管理远程服务器,并带你探索了这个工具的潜在法宝:内置声明模块。通过阅读本书,你会发现Ansible不仅拥有你所需要的功能,而且还异乎寻常地简单。
□ 理解Ansible区别于其他配置管理系统的特点。
□ 使用YAML语法编写你自己的playbook。
□ 学习Ansible中的变量与fact。
□ 部署一个复杂应用的完整范例。
□ 使用role来简化与复用playbook。
□ 使用SSH Multiplexing、pipelining和并行化来让playbook运行得更快。
□ 将应用部署到Amazon EC2或其他云平台。
□ 使用Ansible创建Docker镜像并部署Docke
|
內容簡介: |
Ansible是近年用户量急速蹿升的互联网配置管理工具。在Ansible之前,行业中已经有很多开源配置管理工具了,特别是鼎鼎大名的Puppet,堪称配置管理界的超级巨星。然而,Ansible依靠它的简单易用、"零依赖”及弱抽象还是获得了无数开发者和运维工程师的青睐。遗憾的是,由于Ansible还很年轻,除了官方文档外,其他相关的优秀文档可谓凤毛麟角。而本书恰恰就是为了缓解这一现状而写的。作者在本书中演示了如何使用Ansible管理接近真实生产环境的案例,这既演示了Ansible的强大功能,又能够帮助读者快速入门与上手,非常适合作为官方文档的扩展资料来阅读。
|
關於作者: |
陈尔冬,原新浪私有云平台高级架构师。现华为云计算平台高级架构工程师。2007年与2014年先后加入新浪与华为。曾从事私有云平台建设与运维、虚拟化平台研发以及私有云平台分布式子系统研发。擅长大型Linux集群系统的自动化管理与运维、问题分析、性能调节与架构设计优化。
|
目錄:
|
原书推荐序 ................................................................................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
|
內容試閱:
|
推荐序一
几年前,我和尔冬都作为技术团队的一员在一起开始新浪微博的研发,研发团队开发完**个服务后就面临服务发布及管理的问题。*开始是通过工程师手动登录服务器的方式来发布与启动。当服务请求增大、服务单元增多后,工程师便将命令写成脚本,通过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)亲自作序,其受认可度可见一斑。本书内容编排由浅入深,理论与实践并重,作者特别提到了SSHmultiplexing,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
——Michael DeHaan
Ansible 软件的创作者,Ansible, Inc. 公司前CTO 注2
2015 年4 月
译者序
由于诸多原因,早在童年时代计算机就进入了我的生活。对计算机的迷恋*终将我带进了计算机工程领域。而让我真正从玩耍转向工程化地对待计算机的分水岭就是,对系统管理领域的接触。好吧,不管多么不乐意,这类工作在那个年代就是被称作网管。从我刚开始入门系统管理的时候,我就一直有一个疑问:如果一家公司足够大,有上百台计算机,该怎么管呢?总不能一个个远程桌面连上去吧?嗯,没错,那个时候我使用的还是Windows,而上百台计算机对于当时的我来说已经是一个很夸张的数字了。
2007 年我加入了新浪平台架构部,这里的工作为我真正打开了新世界的大门。那个时候部门正在使用CFEngine 管理上百台机器、为不同功能的服务器划分角色、为相同功能的服务器进行编号(像为公牛编号那样)、为配置文件编写模板来减少硬编码,所有这一切都用一种工程实践的方法解决了我之前的所有疑问。后来,我才知道这个实践性很强的方法的名字——配置管理。
转眼之间,我已经在新浪工作了七年之久。这七年间我的职位与工作内容有多次变化,但所围绕的工作核心从未改变:如何让数千台服务器按照我们想要的方式运转。为了更好地达到这一目的,我尝试过各种配置管理的方式:从CFEngine 到Puppet、SaltStack,甚至是自行开发配置管理工具。但是每一种方式都与我理想中那个遵循“KISS 原则”、易于学习,且在功能上具有无穷扩展空间的配置管理工具相差甚远——直到经同事文旭的推荐,我认识了Ansible。Ansible 的轻量、*小化抽象层及轻松扩展与收缩一下子就吸引了我。目前为止,它是与我理想中的配置管理工具*接近的一个。
这样优秀的工具我当然不会自己独享。我曾经在各种场合向正在寻找合适配置管理工具的朋友与同事推荐Ansible。我发现有一部分朋友虽然对于Ansible 给予了正面的评价,却对缺少中文文档感觉略有不便。这让我意识到语言仍旧是部分技术人员学习技术的障碍之一。显然,我并不具备帮助技术人员提升英语阅读水平的能力,但至少我可以将这本《奔跑吧Ansible》的中文版带给大家,希望本书可以帮助一些读者快速上手Ansible。
由于水平所限,本书中难免出现一些翻译错误。诚恳地欢迎大家向我或者出版社反馈本书中的各种错误。
*后,我想要感谢赵新宇、陈明杰和刘宇等朋友,他们在翻译本书过程中提供了无私的帮助和支持。还要感谢我的夫人张若金的支持与理解。没有你们就不会有本书的出版。
|
|