《Ansible权威指南 》一 导读

简介: 对比主流的自动化工具SaltStack、Puppet等,Ansible给人最直观的感觉就是比较简单,而这也是笔者选择使用Ansible最重要的理由之一。因为笔者一直认为每个人精力有限,如腾讯早期的Ops技能培训希望个人同时兼备Ops和Dev的战略,但直到现在身边真正同时具备Dev和Ops能力于一身的人凤毛麟角。


26632d8769c5bf994cfeb9a41109f2276ad620be


前  言

为什么要写这本书
首次接触Ansible是缘于一次杭州出差。当时接触互联网3年左右,正是技能的储备阶段,看到Ansible这样的新兴自动化工具不免充满好奇。当时腾讯的蓝鲸还没有出来,但abs脚本和ijobs自动化体系已经应用多年,并在整个IEG中心广泛应用。大型企业讲究分工精细化,各司其职,强大的自我研发能力。但伴随业绩和KPI的压力,很多人其实是没有多余精力关注外界技术领域的发展,尤其是游戏行业,行业自身属性对开发人员的技术能力要求非常高,前沿开源技术与业务特殊性需求并不能很好地融合,致使多数工具依赖于开发人员,整体运维体系以应用、发现、维护、服务方向为主,底层运维没有技术能力和资源协调能力为业务创造直接价值。高级运维和领导层更需着眼于高层面的业务拓展和整体运维体系规划,所以多数互联网前沿技术以技能储备的方式被引入,待机蓄力而发。
后来蓝鲸和ijobs融合后,在强大技术力的驱动下,运维的技术能力进一步淡化,对应的业务能力、需求发现、服务意识被强化,并提出更高的要求,DevOps的岗位定义更加明确。蓝鲸平台类似于苹果公司的App Store,是一个载体,只要有开发能力就可以编写自己的应用。只要应用的通用性足够高,所有业务都可以下载使用,而通用性则是开源技术最讲究的点。同时开源工具也是非常好的学习对象,往往经过简单的修改即可变成自己的产品,因此运维对开源技术的关注度越来越高,而笔者也正是在这样的背景下接触到Ansible。
对比主流的自动化工具SaltStack、Puppet等,Ansible给人最直观的感觉就是比较简单,而这也是笔者选择使用Ansible最重要的理由之一。因为笔者一直认为每个人精力有限,如腾讯早期的Ops技能培训希望个人同时兼备Ops和Dev的战略,但直到现在身边真正同时具备Dev和Ops能力于一身的人凤毛麟角。类似于Puppet和SaltStack这样的工具,高级使用均需涉及诸如Class类开发这样的技能才可运用,而初级运维和没有开发经验的运维掌握面向对象技术去开发高级应用确实没有那么妥当。Ansible早期的官网也是以Stupid Simple来形容其简单程度的,其前沿的去中心化思想和近期被RedHat(红帽)官方收购的消息,也更坚定了笔者使用Ansible的想法。
但当时Ansible在国内公司应用的并不多,且其官网屡屡被破解,使得虽然自动化的理念早已家喻户晓,但国内Ansible的文档和社区却始终不温不火。无独有偶,笔者发现腾讯也开始在自家蓝鲸平台使用Ansible,并结合业务进行了深入应用,所以就产生了编写一本Ansible书籍的想法。因此,也有了后来的Ansible官网中文翻译团队和本书写作团队,再后来也就有了Ansible中文权威网站、运维部落微信公众号、Ansible部落微信群、Ansible中文权威QQ群。更为幸运和开心的是,在坚持的过程中也遇到了一批自动化工具爱好者
在一次和朋友聊天中,朋友问到你们Ansible已经应用这么久,同时也有自己独立开发的界面,现在国内Ansible的势头虽高,但文档和书籍欠缺,何不把你们的经验总结出来分享给更多朋友呢。我当时一怔,但也有担心:一方面精力不支,另一方面老婆怀孕,我担心生活工作不能兼顾。后来在老婆的鼓励下,经肖力和黄博文兄的引荐认识了华章公司的高编辑,正式开始书籍的编写之旅。在这个过程中,很高兴又有新的伙伴骑行牛人魏巍和Python能力出众的甘捷陆续加入,也使得个人的压力和精力有更多的释放,书籍的内容也有更完整、丰富的互补。在整个写书过程中我们也在成立的运维部落、Ansible公众号和QQ群,定期分享书籍内容,收集用户反馈和体验。
本书特色
从技术层面讲,运维自动化理论及思想在国内日趋成熟,自动化工具更是遍地开花。现在运维不再纠结于没有工具可用,而是惆怅于选择何种工具。而Ansible正是在这样的大环境下产生,并且迅速脱颖而出。Ansible去中心化思想和“简单就是一切”的原则也使其在运维圈快速流行。但正如所有事物一样,入门简单并不代表深入简单,这也正是本书的意义所在。
从适合读者阅读和掌握知识的结构安排上讲,本书分为“基础入门篇”“高级进阶篇”“Web自动化开发篇”。本书在介绍新技术应用的同时更注重读者对技术的消化和接受程度,整个过程都秉承原理→练习→实战的思路,让读者轻松逐步深入,不会有生硬和突兀感。在介绍Ansible的核心技术应用Playbook章节更是不惜用50页左右的篇幅,通过企业实际案例讲解分析Playbook的使用技巧和经验心得。在Ansible企业应用实战相关章节,详细介绍Ansible与现今流行技术的结合使用,以及如何自我发展、自我完善技能。
在由浅入深介绍Ansible的同时,本书所有的应用案例按章节顺序全部上传至GitHub,附带自研的Web自动化页面,也全部开源至GitHub(同时本书写作团队收入的20%将捐赠给开源组织,捐赠金额和去向也会通过公众号和网站的方式对外公开)。

目  录

第一篇 基础入门篇
第1章 Ansible基础入门
1.1 Ansible是什么
1.2 Ansible发展史
1.3 为什么选择Ansible
1.4 Ansible是如何工作的
1.5 Ansible通信发展史
1.6 Ansible应用场景
1.7 Ansible的安装部署
1.7.1 PIP方式
1.7.2 YUM方式
1.7.3 Apt-get方式
1.7.4 源码安装方式
1.7.5 验证安装结果
1.8 Python多环境扩展管理
1.8.1 Pyenv的部署与使用
1.8.2 Virtualenv的部署与使用
1.9 本章小结
第2章 Ansible基础元素介绍
2.1 Ansible目录结构介绍
2.2 Ansible配置文件解析
2.3 Ansible命令用法详解
2.4 Ansible系列命令用法详解与使用场景介绍
2.4.1 ansible
2.4.2 ansible-galaxy
2.4.3 ansible-pull
2.4.4 ansible-doc
2.4.5 ansible-playbook
2.4.6 ansible-vault
2.4.7 ansible-console
2.5 Ansible Inventory配置及详解
2.5.1 定义主机和组
2.5.2 定义主机变量
2.5.3 定义组变量
2.5.4 定义组嵌套及组变量
2.5.5 多重变量定义
2.5.6 其他Inventory参数列表
2.6 Ansible与正则
2.7 本章小结
第3章 Ansible Ad-Hoc命令集
3.1 Ad-Hoc使用场景
3.2 Ad-Hoc命令集介绍
3.2.1 Ad-Hoc命令集用法简介
3.2.2 通过Ad-Hoc查看系统设置
3.2.3 通过Ad-Hoc研究Ansible的并发特性
3.2.4 通过Ad-Hoc研究Ansible的模块使用
3.3 Ad-Hoc组管理和特定主机变更
3.3.1 Ad-Hoc组定义
3.3.2 Ad-Hoc配置管理:配置Proxy与Web Servers实践
3.3.3 Ad-Hoc配置后端:配置NoSQL与Database Servers实践
3.3.4 Ad-Hoc特定主机变更
3.4 Ad-Hoc用户与组管理
3.4.1 Linux用户管理
3.4.2 Windows用户管理
3.4.3 应用层用户管理
3.5 本章小结
第4章 Playbook快速入门
4.1 Playbook语法简介
4.1.1 多行缩进
4.1.2 单行缩写
4.2 Playbook案例分析
4.3 Playbook与Shell脚本差异对比
4.4 Ansible-playbook实战小技巧
4.4.1 限定执行范围
4.4.2 用户与权限设置
4.4.3 Ansible-playbook:其他选项技巧
4.5 实战一:Ansible部署Node.js企业实践
4.5.1 添加第三方源
4.5.2 运行Node.js进程
4.5.3 Node.js app服务部署总结
4.6 实战二:Drupal基于LAMP的自动化部署
4.6.1 定义变量并设置Handlers
4.6.2 部署LAMP基础服务
4.6.3 配置Apache
4.6.4 配置PHP
4.6.5 配置MySQL
4.6.6 安装Drush和Composer
4.6.7 通过Git和Drush安装Drupal
4.6.8 Drupal部署过程总结
4.7 实战三:Ansible部署Tomcat企业实战
4.7.1 定义变量并设置Handlers
4.7.2 安装Java
4.7.3 安装Tomcat 8
4.7.4 安装Apache Solr
4.8 本章小结
第5章 Ansible Playbook拓展
5.1 Handlers
5.2 环境变量
5.3 变量
5.3.1 Playbook 变量
5.3.2 在Inventory文件中定义变量
5.3.3 注册变量
5.3.4 使用高阶变量
5.3.5 主机变量和组变量
5.3.6 Facts(收集系统信息)
5.3.7 Ansible加密模块Vault
5.3.8 变量优先级
5.4 if/then/when——流程控制
5.4.1 Jinja2 正则表达、Python 内置函数和逻辑判断
5.4.2 变量注册器register
5.4.3 when条件判断
5.4.4 changed_when、failed_when条件判断
5.4.5 ignore_errors条件判断
5.5 任务间流程控制
5.5.1 任务委托
5.5.2 任务暂停
5.6 交互式提示
5.7 Tags标签
5.8 Block块
5.9 本章小结
第二篇 高级进阶篇
第6章 Playbook高级技巧进阶
6.1 巧用 Includes
6.1.1 Includes使用场景
6.1.2 Includes用法
6.1.3 动态 Includes
6.1.4 Handler Includes使用技巧
6.1.5 Playbooks Includes使用技巧
6.2 巧用Roles
6.2.1 构建Roles
6.2.2 使用Roles重构Playbooks
6.2.3 Roles技巧之Handlers:动态变更
6.2.4 Roles技巧之Files:文件传输
6.2.5 Roles技巧之Templates:模板替换
6.2.6 更多复杂的跨平台Roles
6.3 Jinja2实现模板高度自定义
6.3.1 Jinja2 For循环
6.3.2 Jinja2 If条件
6.3.3 Jinja多值合并
6.3.4 Jinja default()设定
6.3.5 Ansible结合Jinja2生成Nginx配置
6.3.6 Ansible结合Jinja2生成Apache多主机配置
6.3.7 Jinja2动态变量配置及架构优化
6.4 Ansible Galaxy
6.4.1 Ansible-galaxy命令用法
6.4.2 使用Galaxy
6.5 本章小结
第7章 Inventory文件扩展
7.1 Inventory文件实战
7.2 独立的Inventory文件
7.3 Inventory变量
7.3.1 host_vars目录
7.3.2 group_vars目录
7.4 动态Inventory
7.5 本章小结
第8章 Ansible插件扩展
8.1 Ansible 插件使用场景
8.2 Ansible插件类型
8.3 如何编写自己的插件
8.4 插件案例实践
8.5 本章小结
第9章 Ansible企业应用实战
9.1 为新系统添加安全认证SSHKey
9.1.1 Ansible密码认证
9.1.2 ssh-copy-id
9.1.3 Kickstart
9.1.4 Python Paramiko
9.1.5 Expect
9.2 企业高可用架构的Ansible应用
9.2.1 Playbook目录编排
9.2.2 高可用架构基于Ansible的自动化实现
9.2.3 使用Includes衔接各服务配置
9.3 ELK日志系统基于Ansible的自动化实现
9.3.1 ELK Server的自动化实现
9.3.2 ELK Client的自动化实现
9.4 实时日志系统基于Ansible的自动化实现
9.4.1 配置概览
9.4.2 架构部署
9.5 Zabbix基于Ansible的自动化实现
9.5.1 Zabbix Server基于Ansible的自动化实现
9.5.2 Zabbix Agent基于Ansible的自动化实现
9.5.3 Zabbix Proxy基于Ansible的自动化实现
9.6 Ansible+Git+GitLab实现自动化发布
9.6.1 架构概览
9.6.2 架构部署
9.7 Docker的Ansible自动化应用
9.7.1 Docker容器入门
9.7.2 使用Ansible创建和管理容器
9.7.3 基于Ansible创建Flask的Docker容器
9.7.4 数据存储容器配置
9.7.5 Flask容器配置
9.7.6 MySQL容器配置
9.7.7 启动容器
9.8 本章小结
第10章 Ansible基于Windows的管理架构
10.1 Ansible管理机部署安装
10.2 Windows系统预配置
10.3 Windows下可用模块
10.4 Windows Ansible模块使用实战
10.5 本章小结
第11章 Ansible安全优化篇
11.1 SSH与远程连接简介
11.1.1 Telnet
11.1.2 RLOGIN、RSH和RCP
11.1.3 SSH
11.1.4 SSH的发展和远程访问的未来
11.2 通信加密
11.3 禁止root远程登录
11.4 操作系统简介
11.5 遵守权限最小化原则
11.5.1 用户管理
11.5.2 文件权限管理
11.6 定期维护更新
11.6.1 手动更新
11.6.2 自动定时更新
11.7 善用Iptables防火墙
11.8 定期磁盘巡检
11.9 系统登录日志审记
11.10 正确使用SELinux和AppArmor
11.11 本章小结
第三篇 Web自动化开发篇
第12章 Ansible模块编写
12.1 初步认识Ansible模块
12.2 Ansible简单模块编写
12.3 模块变量添加
12.4 模块状态返回的标识及应用
12.5 模块退出状态处理
12.6 模块其他功能补充
12.7 Ansible模块API的调用
12.8 本章小结
第13章 开发自己的Ansible WebUI
13.1 搭建Django开发环境
13.1.1 为什么要使用Web页面做管理
13.1.2 系统及软件环境
13.2 Django配置文件详解
13.2.1 Django的基础配置及运行
13.2.2 Django的主配置目录介绍
13.2.3 Django的app目录介绍
13.3 编写Ansible的Web接口
13.4 前端基础知识介绍
13.4.1 HTML和CSS简介
13.4.2 JavaScript简介
13.5 Ansible WebUI界面开发
13.5.1 对接前端页面与Ansible的Web接口
13.5.2 配置Web页面传参
13.6 本章小结
第14章 Web与Ansible结合的常用实例
14.1 Web方式管理Ansible的Inventory
14.1.1 重新定制Ansible的Hosts文件规则
14.1.2 使用ConfigParser解析并生成Ansible Hosts文件
14.1.3 使用数据库的存储数据生成的Ansible Hosts文件
14.1.4 通过页面来生成Hosts文件
14.2 使用celery后台执行任务
14.2.1 为什么要使用celery
14.2.2 使用celery的前期准备
14.2.3 使用celery开始任务
14.2.4 使用celery取消正在进行的任务
14.3 运行YML文件并实时读取日志
14.4 通过页面上传文件并基于Ansible分发
14.5 在页面上构建YML文件注册中心
14.6 操作者注册中心界面
14.7 本章小结

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
Shell Apache 数据安全/隐私保护
Ansible权威指南笔记(粗略)
# 在托管节点上安装 python 解释器 ansible myhost --sudo -m raw -a "yum install -y python2 python-simplejson" # 各个平台上安装 ansible http://www.
1460 0
《Ansible权威指南 》一1.9 本章小结
Ansible是运维自动化工具的后起之秀。本章前半部分我们学习了Ansible是什么,底层通信发展史,Ansible发展历程等概念性知识。后半部分我们详细介绍了Ansible安装部署方式,同时考虑本地复杂环境可能导致的部署问题,本章后半部分我们也引申介绍了Python多环境扩展管理,以方便大家应对部署过程中可能出现的各类问题。
1436 0
《Ansible权威指南 》一 3.5 本章小结
Ansible Ad-Hoc在运维日常工作中的作用举足轻重,日常工作中的临时并发性操作均通过Ad-Hoc协助完成,因此我们花了很多篇幅为大家介绍其使用及企业实践。
811 0
|
JavaScript 算法 Linux
《Ansible权威指南 》一3.4 Ad-Hoc用户与组管理
用户权限管理是运维日常最重要的管理工作之一,如生产环境禁用开发和测试人员登录变更,但测试环境的用户权限仍需耗费精力维护,这项工作大公司也存在(将测试环境交给测试或开发管理并不是每个公司都能做到的,但未来是趋势)。
2713 0
|
Web App开发 JavaScript 关系型数据库
《Ansible权威指南 》一 3.3 Ad-Hoc组管理和特定主机变更
Ansible也提供了简洁但强大的组管理功能。同时,我们也可能遇到只针对这组主机中一台或某些主机做变更的场景,针对这些复杂多变的企业场景,本节我们将深入了解Ad-Hoc组管理和特定主机变更,进一步了解Ansible如何应对复杂多变的企业环境。
2383 0
|
JavaScript 前端开发 Linux
《Ansible权威指南 》一3.2 Ad-Hoc命令集介绍
本节介绍通过Ad-Hoc命令集查看系统设置,通过Ad-Hoc研究Ansible的并发特性,通过Ad-Hoc研究Ansible的模块使用。俗话说,磨刀不误砍柴工。开始之前做一些简单的初始化检查,如系统时间正确与否、磁盘容量是否充足等,是很有必要的。
2272 0
|
Linux Shell
《Ansible权威指南 》一第3章 Ansible Ad-Hoc命令集
第2章介绍了Ansible的各项元素、系列命令、Inventory基础,以及Ansible与正则的结合使用,这些内容是掌握Ansible的基础,请务必熟练掌握。在前两章的基础上,本章为大家介绍Ansible Ad-Hoc命令集,通过模拟真实的企业案例和应用场景更深入地了解Ansible。
1145 0
|
Web App开发 JavaScript 前端开发
《Ansible权威指南 》一2.6 Ansible与正则
正则表达式(Patterns)是各类高级语言的必定支持的方法之一,Ansible也不例外。其Patterns功能等同于正则表达式,语法使用也和正则类同,这大大便利了运维的使用。其对于Ansible的灵活性有着极大贡献,该功能同样支持Ansible-playbook。其用法也非常简单。
3296 0
|
JavaScript 前端开发 Linux
《Ansible权威指南 》一Ansible命令用法详解
Ansible命令行执行方式有Ad-Hoc、Ansible-playbook两种方式,Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于其提供的API开发类似的Web化产品。
4187 0
|
运维 JavaScript 前端开发
《Ansible权威指南 》一第2章 Ansible基础元素介绍
Ansible是开源工具,整个开发过程或二次开发均遵循GPL协议,所以所有源码均可见。作为一款日常工作所需的核心软件,我们有必要知道其目录分布及各目录功能
1771 0