《Ansible权威指南 》一 导读

前  言

为什么要写这本书
首次接触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 本章小结

时间: 2024-09-14 18:26:02

《Ansible权威指南 》一 导读的相关文章

《构建实时机器学习系统》一第2章 实时监督式机器学习 2.1 什么是监督式机器学习

第2章 实时监督式机器学习 2.1 什么是监督式机器学习 监督式机器学习旨在利用训练集数据,建立因变量和自变量之间的函数映射关系.如果用X 代表自变量,Y 代表因变量,f 代表映射函数,b 代表映射函数的参数,那么监督式机器学习的任务就是找到恰当的函数f 和参数 ,让下面的映射尽量符合要求: y=f (x;b,e) 这里e为实际情况中的随机扰动项. 下面就来具体看看在监督式机器学习中,因变量.自变量和预测函数的含义. (1)因变量 因变量是我们试图通过机器学习模型预测的变量,在实际应用中它往往无

《构建实时机器学习系统》一3.4 数据分析的三个要点

3.4 数据分析的三个要点 本书后面的章节中将会以前面发现的均值回归的性质为依托,设计实时机器学习交易策略进行交易.好多读者看到这里可能已经跃跃欲试,等不及要开始搭建服务器开始赚他一个亿了.但是在这之前我们需要总结一下在开展机器学习工作前期关于数据分析的几个原则. 3.4.1 不断验证假设 验证假设是否正确是机器学习前期数据分析最重要的目的.这里的假设包括但不限于:数据的格式.变量的数量.数据是否缺失.是否有极端值.采样是否均衡等.上面这些假设,如果稍有差错,就会让在后面得到的机器学习模型无用武

《构建实时机器学习系统》一 导读

前 言 机器学习从业人员的艰难选择 作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的"翠花"只认房产证不认 Zookeeper.即使你身怀绝技,有着远大的抱负,机器学习应用难以变现也是事实.为了能维持生计,众多机器学习从业人员只能进入大公司.大组织.但限于流程和已有的体制,在这样的工作环境下,他们很难完全发挥自己的潜能. 太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战

《构建实时机器学习系统》一2.2 怎样衡量监督式机器学习模型

2.2 怎样衡量监督式机器学习模型 本章前面对一个好的实时机器学习模型的衡量只提到了"优秀" "合适"这样的字眼,本节将会详细展开,讨论监督式实时机器学习模型的衡量标准. 在实际应用中,监督式实时机器学习效果的好坏可以分为统计量是否优秀和应用业绩是否优秀两个方面.下面将按照这两部分分别进行介绍. 在讨论技术细节之前,先进行一下符号的定义: 给定 n 组已知的自变量和因变量{(Yi, Xi)}ni=1作为测试数据集,对于任意i,我们通过自变量Xi和模型f(Xi; b)

《构建实时机器学习系统》一1.4 实时是个“万灵丹”

1.4 实时是个"万灵丹" 成长会解决一切问题.如果一个企业正在飞速成长,大家步调一致.同心齐力,那么内斗或管理混乱等问题将是难以出现的.而当企业的成长受到了制约,停滞不前的时候,往往就会出现众多非技术性原因造成的悲剧. 我们强调机器学习的实时性,就是为了保证应用机器学习的企业能够利用机器学习的资源大踏步向前,而不会被早早地制约,徘徊不前.机器学习就已经够有挑战性的了,为什么还要采用实时机器学习?根据我们的经验,实时机器学习上马应该越早越好,原因具体有以下三点. 1.实时架构稳定性可以

《构建实时机器学习系统》一1.5 实时机器学习的分类

1.5 实时机器学习的分类 按照实际应用中采用的方式不同,实时机器学习可以分为硬实时.软实时和批实时三种模式,下面将分别进行介绍. 1.5.1 硬实时机器学习 硬实时的定义是:响应系统在接收到请求之后,能够马上对请求进行响应反馈,做出处理.硬实时机器学习的主要应用场景是网页浏览.在线游戏.高频交易等对时效性要求非常高的领域.在这些领域中,我们往往需要将相应延迟控制在若干毫秒以下.对于高频交易等场景,更是有不少计算机软件.硬件专家,开发出了各种专有模块以在更短的时间内完成交易,获得超额利润. 在本

《构建实时机器学习系统》一1.8 实时机器学习模型的生存期

1.8 实时机器学习模型的生存期 进行实时机器学习开发必须考虑生存期.生存期是指一个系统从提出.设计.开发. 测试到部署运用.维护.更新升级或退役的整个过程.若在生存期设计上出现了数据,那么在后面的使用中就会出现各种各样的瓶颈阻碍应用产生价值. 从软件工程的角度上讲,开发实时机器学习也遵从构思.分析.设计.实现和维护五个步骤,这五个步骤可能会循环往复,随着业务的发展进行多次迭代.实时机器学习模型的应用由于其技术的特殊性,也具有自己的小型生存期,其中包括数据收集.数据分析.离线手工建模评测.上线自

《构建实时机器学习系统》一1.6 实时应用对机器学习的要求

1.6 实时应用对机器学习的要求 现今每年都会发表成千上万的机器学习相关的论文,其中不乏表现突出的方法论,但是并不是所有的机器学习模型在实际应用中都适用.实时机器学习的应用主要有以下几个方面的要求. 1.模型可扩展性 模型可扩展性需要整个机器学习应用的各个部分均可以轻易地根据实际需要进行扩展.这里的扩展可能是增加新的预测变量,也可能是在新的市场. 人群和用户界面中进行使用,还有可能是加入新的架构部件,进行可视化等操作. 2.模型运用低延迟性 低延迟性是实时机器学习应用区别于其他机器学习应用的核心

《构建实时机器学习系统》一1.7 案例:Netflix在机器学习竞赛中学到的经验

1.7 案例:Netflix在机器学习竞赛中学到的经验 美国领先的付费视频公司 Netflix 在机器学习.系统推荐方面都做出了卓越的贡献, 早在 2007 年,Netflix 就率先提出了百万美元大奖,奖励在 Netflix Prize 竞赛中优胜的队伍.Netflix Prize通过为期三年的竞赛,积累了机器学习宝贵的第一手资料,成为了机器学习中的经典案例,这里我们介绍以下两个方面. 1.7.1 Netflix 用户信息被逆向工程 Netflix Prize进行影片推荐预测时,使用的数据包括

《构建实时机器学习系统》一3.3 利用 Pandas 分析实时股票报价数据

3.3 利用 Pandas 分析实时股票报价数据 熟悉一项软件的最好方法就是通过示例来亲自使用它.这里将会通过分析苹果公司 2015 年 8 月 3 日秒级股票价格的数据来熟悉 Pandas 的用法.建议通过Python 笔记本或交互式窗口的方法来进行下面的操作. 首先,需要导入相关的模块,在导入Pandas模块的同时,我们还用到了Datetime模块.Datetime模块的主要功能是对时间.日期等数据进行处理,导入命令如下: import pandas as pd from datetime