《Ansible权威指南 》一 导读


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 本章小结

相关资源:Ansible 权威指南
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页