Ansible权威指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-25 13:54:01

点击下载

作者:李松涛,魏巍,甘捷

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Ansible权威指南

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群。更为幸运和开心的是,在坚持的过程中也遇到了一批自动化工具爱好者。http://www.ansible.com.cn/将Ansible官网中大家日常常用的部分功能翻译成中文,所以起名为Ansible中文权威指南。而后Google、Baidu的关键字搜索结果仅次于官网,这使得我们的信心大增。这里要特别感谢马哥Linux团队成员的薛定谔的章鱼、guli、以马内利、黄博文、coocla、云中鹤、stanley,这些朋友们历经数月,辛勤翻译多达5万字文档。

在一次和朋友聊天中,朋友问到你们Ansible已经应用这么久,同时也有自己独立开发的界面,现在国内Ansible的势头虽高,但文档和书籍欠缺,何不把你们的经验总结出来分享给更多朋友呢。我当时一怔,但也有担心:一方面精力不支,另一方面老婆怀孕,我担心生活工作不能兼顾。后来在老婆的鼓励下,经肖力和黄博文兄的引荐认识了华章公司的高编辑,正式开始书籍的编写之旅。在这个过程中,很高兴又有新的伙伴骑行牛人魏巍和Python能力出众的甘捷陆续加入,也使得个人的压力和精力有更多的释放,书籍的内容也有更完整、丰富的互补。在整个写书过程中我们也在成立的运维部落、Ansible公众号和QQ群,定期分享书籍内容,收集用户反馈和体验。到目前为止,QQ群近1300人,公众号也有2000多人在关注。群中也专门请行业应用经验丰富的专员来解答Ansible的技术类问题,同时成立专门的QA站点,收集用户QQ群问题处理方案,并对积极回答问题勇于分享的朋友定期寄送礼品以示鼓励。团队很高兴也很幸运能通过这样的方式为国内Ansible的发展贡献自己的力量。本书特色

从技术层面讲,运维自动化理论及思想在国内日趋成熟,自动化工具更是遍地开花。现在运维不再纠结于没有工具可用,而是惆怅于选择何种工具。而Ansible正是在这样的大环境下产生,并且迅速脱颖而出。Ansible去中心化思想和“简单就是一切”的原则也使其在运维圈快速流行。但正如所有事物一样,入门简单并不代表深入简单,这也正是本书的意义所在。

从适合读者阅读和掌握知识的结构安排上讲,本书分为“基础入门篇”“高级进阶篇”“Web自动化开发篇”。本书在介绍新技术应用的同时更注重读者对技术的消化和接受程度,整个过程都秉承原理→练习→实战的思路,让读者轻松逐步深入,不会有生硬和突兀感。在介绍Ansible的核心技术应用Playbook章节更是不惜用50页左右的篇幅,通过企业实际案例讲解分析Playbook的使用技巧和经验心得。在Ansible企业应用实战相关章节,详细介绍Ansible与现今流行技术的结合使用,以及如何自我发展、自我完善技能。

在由浅入深介绍Ansible的同时,本书所有的应用案例按章节顺序全部上传至GitHub,附带自研的Web自动化页面,也全部开源至GitHub(同时本书写作团队收入的20%将捐赠给开源组织,捐赠金额和去向也会通过公众号和网站的方式对外公开)。读者对象

·IT网络运维工程师

·业务运维工程师

·DevOps技术人员

·中小型企业无运维岗但需运维服务器的开发人员

·虚拟化技术人员

·对自动化理念感兴趣的技术人员如何阅读本书

本书分为三篇,共14章,其中第1~3、6、8~10由李松涛编写,第4、5、7、11由魏巍编写,第8、12~14章由甘捷编写。

第一篇为基础入门篇(第1~5章),该篇着重介绍Ansible发展史,工作原理,基础元素组成,Playbook入门。该部分内容虽简单,却是掌握Ansible高级技巧的基石,如没有接触过相关自动化工具和Ansible,还需认真阅读。

第二篇为高级进阶篇(第6~11章),该篇也是本书内容的最大构成部分,着重结合企业实际需求场景,以大量的实际案例拓展介绍Ansible的高级语法进阶和实际应用技巧,涉及的技术点有Roles、Inventory、Jinja2、Galaxy等。结合的行业主流技术包括(但不限)Zabbix、Except、MemCache、Inotify、Logio、GitLab、Docker、LNMP、Redis、MySQL、Node.js等,并提供丰富的实战案例供大家参考学习。

第三篇为Web自动化开发篇(第12~14章),该篇内容主要针对不想购买Tower产品,但又有Web全自动化发布界面需求的人而专门撰写。该部分内容使用当前最流行成熟的Python,并结合Django前后端技术,通过Ansible celery管理后台任务队列。虽该部分内容从零基础部分开始介绍,逐步引导上手,但考虑时间和精力成本,建议具备一定的Python、Django、前端基础后进行学习。

本书前11章,各章没有强关联,如觉得内容已掌握可跳跃式阅读,遇到不理解的地方回头再看也问题不大。从第12章开始为Web化自动开发章节,需要循序渐进地学习,建议按顺序阅读。勘误和支持

Ansible的发展非常快,当我们开始着手写这本书的时候Ansible的版本还是1.9.4,但没过多久2.0稳定版本就更新出来,但1.9版本分支还一直在维护,随后又陆续更新了1.9.5和1.9.6的稳定版,这对我们的写作也造成一定的困扰。当时多数公司使用的还是1.9版本的分支,2.0分支也陆续收到朋友们反馈各类问题。所以本书的写作过程总体还是基于1.9分支的基础,1.9和2.0的差别主要在于API接口和页面开发上,后者功能模块更加完善丰富,但对于普通使用者整体差别不大,有差别的地方书中均会提到。

由于笔者的水平有限,编写时间仓促,所有的写作过程都在深夜和周末,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果您有更多的宝贵意见,欢迎您关注我们的公众号linux178,或加入我们的QQ群:Ansible中文权威-2号群(486022616),或访问我们的问答平台http://www.178linux.com/qa,我们会尽量提供最满意的解答。期待能够得到你们的真挚反馈,在技术之路上互勉共进。我想和作者聊聊

微信公众号:

linux178

或扫以下二维码

QA公共平台:

http://www.178linux.com/qa

普通用户请加群:

Ansible中文权威-2号群486022616

书籍读者请加群:

中文权威读者群577479881致谢

感谢翻译团队在Ansible官网文档翻译过程中的无私付出。

感谢魏巍、甘捷两位“笔友”在我狂轰滥炸的“淫威”下坚持写作,并持续输出高质量的内容。感谢机械工业出版社华章公司的策划编辑高婧雅,在近一年的时间中始终支持我的写作。你们的鼓励和帮助引导我们顺利完成全部书稿。特别致谢

最后,我要特别感谢我的太太yolanda,为写作这本书,我牺牲了很多陪伴她的时间,但也正因为有了她的付出与支持,我才能坚持写下去。

同时,也要郑重感谢马哥教育在我写作的过程中提供不遗余力的资源支持,让我们得以放开手脚无所束缚地完成写作工作。

谨以此书献给我最亲爱的家人,以及众多热爱开源技术的朋友们!李松涛(stanley)2016年8月第一篇基础入门篇

·第1章 Ansible基础入门

·第2章 Ansible基础元素介绍

·第3章 Ansible Ad-Hoc命令集

·第4章 Playbook快速入门

·第5章 Ansible Playbook拓展第1章Ansible基础入门“未来主体是传统行业利用互联网技术,以云端用人工智能的方式处理大数据”,在腾讯“云+未来”技术峰会上,马化腾这样形容未来。15年前,电脑还只是少数人的专属,那时的网吧还很火,还没人知道“网咖”是什么。而现在人手一部智能手机,物联网更是让日常生活中的普通家电也能在互联网占据一席之地。这一切都推动着互联网如火如荼发展,IT技术的发展更是日新月异,IT工种的分类日益精细专业化。

从早期All In One(所有应用部署在一台服务器上)的简单应用,到后期集群、高可用、缓存、消息队列、配置中心、主从分离、负载均衡、大数据存储等尖端技术的复杂应用,对运维的技术专业度和综合技能要求越来越高,运维的交付标准不再以周或天为单位,而是以分钟为单位。在现在是如此,在未来更是如此。运维不再如早期一样,手动一台台地登录服务器、部署应用配置环境、手动交付(诸如亚马逊、Google等巨型企业早已实现自动扩缩容,配置应用自动化,流程自动交付等功能)。该方式耗时耗力,很难避免人为因素的错误,最主要的是这些重复手工劳动无法让运维有更大的价值释放,这一切都是不合理的,需要有更好的解决方式。

相信看到这里,大家都明白,我们需要一套自动化管理工具来帮助运维更高质量、更有效地完成手头工作,以证明运维能创造的价值不止于此,况且生活不止眼前的苟且,还有诗和远方,不是吗?但当下SaltStack、Puppet、Fabric、Chef等自动化工具遍地开花,为什么还要推荐Ansible呢?读完本章你会有些许想法,未来已来,只是尚未流行。1.1 Ansible是什么

随着移动互联、物联网、互联网+、大数据、云计算等大规模应用的催生推动,以及人们日常生活的互联网化,互联网的蓬勃发展不仅冲击影响着整个经济体,更对人们的生活理念影响深远。在体验到互联网带来的便利和舒适的同时,人们也不再满足于“可以用”,而是要“用得爽”,在政策、需求、利益、趋势等原因的刺激下,互联网的发展速度可想而知。众所周知,智能的背后意味着复杂,这一现象在互联网的发展中体现得淋漓尽致。在互联网迅猛发展的同时,运维这个工种也从默默无闻的后台逐步走向公众视野,被更多的人所知晓。早期公司业务有数十台、上百台服务器已经是非常庞大的规模,每个运维同时操作10~20台机器,忙碌地奔波于各电脑之间配置重启服务,数十人摩肩接踵的场面是何等壮观。只是每个人都在数十台机器上做同样的修改、配置、操作,如何保证每台机器的操作都完全一样呢?又如何保证其他所有人的操作都能准确无误、没有遗漏过失呢?更何况,随着互联网的迅猛发展,一个公司拥有几十台上百台机器早已不是稀奇事,巨型公司数以万计的机器都不在话下,再沿用老一套办法一台台地人工修改配置已然不现实,这该怎么办呢?相信此时你已然明白运维自动化具体是什么了。简单来讲,运维自动化就是将日常重复性的工作通过规则设定使其遵循预先既定规则,在指定的范围时间内自动化运行,但整个过程无需人工参与。而Ansible正是帮助运维人员实现自动化的工具之一。

Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮忙运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率,常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。它丰富的内置模块(如acl、command、shell、cron、yum、copy、file、user等,[1][2][3]多达569个)和开放的API接口,同时任何遵循GPL协议的企业或个人都可以随意修改和发布自己的版本。

Ansible在其官网上定义如下:Ansible is a radically simple IT automation engine。即Ansible是一款极其简单的IT自动化工具。这里特别使用了radically simple来形容Ansible的简单程度,在0.X版本的Ansible官网中,更“过分”地使用Stupid Simple来形容Ansible是“令人发指的简单”。在Ansible官网的通篇文档中也不时使用Incredibly Simples、Keep It Simple、Power+Simplicity等字眼,可见Ansible这款自动化工具的设计非常注重Simple的理念。但Ansible的功能却非常不简单,完全没有因为使用方式上的简单而缩水,其自身内置模块的数量达500多个,而且还在快速地增加新模块,以下是这些模块的覆盖面的大致分类。

·系统层:支持的系统有Linux、Windows、AIX等,对应的模块有acl、cron、pip、easy_install、yum、authorized_key等大量的内置模块;

·知名第三方平台支持:支持的云平台有AWS、Azure、Cloudflare、Openstack、Google、Linode、Digital Ocean等,对应的模块有ec2、azure_rm_deployment、cloudflare_dns、clc_aa_policy、glance_image、gc_storage、digital_ocean等;

·虚拟化:VMware、Docker、Cloudstack、LXC、Openstack等,对应的模块有vmware_vmkernel、docker、cs_account、lxc_container、glance_image等;

·商业化硬件:F5、ASA、Citrix、Eos等,对应的模块有bigip_facts、asa_acl、netscaler、eos_command等;

·系统应用层:Apache、Zabbix、Rabbitmq、SVN、GIT等,对应的模块有apache2_module、zabbix_group、rabbitmq_binding、subversion、git等。

GitHub上有众多开源爱好者为Ansible贡献功能模块,这些模块完全可以满足日常工作所需。官方对模块也从使用者角度进行详细分类,如Cloud Modules(云主机模块)、Clustering Modules(集群模块)、Commands Modules(命令模块)、Database Modules(数据库模块)等。详细的模块分类可参考官方模块列表:http://docs.ansible.com/ansible/modules_by_category.html,该网址内容的更新速度非常快,如果公司在使用Ansible,建议最少两周关注一次。

Ansible名字其实是来源于其作者喜欢的一本书——奥森·斯科特·卡特的《安德的游戏》,该书中Ansible是一种能跨越时空的即时通信工具,使用Ansible可以在相距数光年的距离远程实时控制前线的舰队战斗。Michael DeHaan希望借这个名词比喻控制远端大量的服务器,因此便将自己的这款产品命名为Ansible。

Web界面是一款功能完善的管理工具的必备功能,Tower是Ansible的Web化管理界面,但免费版的容量只有10台主机,付费版则无容量限制。基于此原因,本书的第12~14章会介绍搭建属于自己的Web化管理界面的方法,并代码全开源,具体地址大家可从GitHub[4]上下载,同时读者遇到的问题都可以通过QQ群“Ansible中文权威”

[5][6]咨询,或在微信公众号“运维部落”留言。

更多信息请参考:

·Ansible官方地址:https://docs.ansible.com/;

·GitHub地址:https://github.com/ansible/ansible/blob/devel/docsite/rst/index.rst;

·Ansible中文权威地址:http://www.ansible.com.cn/。[1] 命令ansible-doc–l可列出所有支持的模块,Ansible发展非常快,模块新增速度也非常快,该数据的更新时间为2016年8月21日。[2] API接口:http://docs.ansible.com/ansible/developing.html。[3] GPL/GNU GPN:GNU通用公共协议,维基百科地址如下。https://zh.wikipedia.org/wiki/GNU%E9%80%9%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81[4] https://github.com/stanleylst/ansibleUI[5] QQ1群:372011984(满)QQ2群:486022616[6] 微信公众号ID:linux1781.2 Ansible发展史

Ansible的第一个版本是0.0.1,发布于2012年3月9日,其作者兼创始人是Michael DeHaan。Michael DeHaan曾经供职于Puppet Labs、RedHat、Michael,在配置管理和架构设计方面有丰富的经验。其在RedHat任职期间主要开发了Cobble,经历了各种系统简化、自动化基础架构操作的失败和痛苦,在尝试了Puppet、Chef、Cfengine、Capistrano、Fabric、Function、Plain SSH等各式工具后,决定自己打造一款能结合众多工具优点的自动化工具,Ansible由此诞生。

其第一个版本号被非常谨慎地定义为0.01。到目前为止共发布107个版本,最新稳定版是Stable2.1.1.0-1,最新Beat版Beat2.1.1.0-0.1.rc1。值得一提的是,作为自动化工具新秀,Ansibe已被RedHat官方收购,在GitHub上被关注的势头也极为迅猛,Star和Fork数是当下红极一时的SaltStack的2倍多。同类自动化工具GitHub关注程度如表1-1所示。从表可以看出Ansible的受欢迎度。被RedHat收购后,其未来发展潜力更是不可估量。表1-1 同类自动化工具GitHub关注程度(2016-07-10)

Ansible版本更新速度非常快,有时会一天推出多个Dev版本,7天推出一个稳定版本。所以使用Ansible的过程中也需多留意官网的更新。1.3 为什么选择Ansible

Ansible自2012年发布以来,没多久便在美国开始流行。快速被IT人员接受的原因较大方面得益于Michael DeHaan在美国IT圈的名气和影响力。随后它逐步在各国流行。而笔者选择Ansible的原因主要有如下几个方面:

·Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发;

·Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,近600个模块完全可以满足日常功能所需;

·在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移;

·Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人。在第10章会介绍如何部署配置Windows系统的主机端,用后会有深切的感受。

自Ansible发布后,也陆续被AWS、Google CloudPlatform、Microsoft Azure、Cisco、HP、VMware、Twitter等大公司接纳并投入使用。关于笔者个人与Ansible的一些故事,有兴趣的朋友可以参考本书前言。1.4 Ansible是如何工作的

Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统,使用者认证通过后在管理节点通过Ansible工具调用各应用模块将指令推送至被管理端执行,并在执行完毕后自动删除产生的临时文件。Ansible具体的工作机制官方有专栏介绍https://www.ansible.com/how-ansible-works,但整体稍过简略。我们参考从官网视频中的截图来详细了解下其工作方式,如图1-1所示。根据Ansible使用过程中的不同角色,我们将其分为:

·使用者

·Ansible工具集

·作用对象(1)使用者

如图1-1中Ansible工作机制所示,Ansible使用者来源于多种维度,图中为我们展示了4种方式:

第一种方式:CMDB(Configuration Management Database,配置管理数据库),CMDB存储和管理着企业IT架构中的各项配置信息,是构建ITIL项目的核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标;

第二种方式:PUBLIC/PRIVATE方式,Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP、Python、PERL等多种当下流行语言,基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行;

第三种方式:USERS直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行,Ad-Hoc将在第3章有详细介绍;

第四种方式:USERS预先编写好的ANSIBLE PLAYBOOKS,通过执行Playbooks中预先编排好的任务集按序完成任务执行。(2)Ansible工具集

ansible命令是Ansible的核心工具,ansible命令并非自身完成所有的功能集,其只是Ansible执行任务的调用入口,大家可心理解为“总指挥”,所有命令的执行通过其“调兵遣将”最终完成。ansible命令共有哪些兵将可供使唤呢?大家看中间绿色框中有INVENTORY(命令执行的目标对象配置文件)、API(供第三方程序调用的应用程序编程接口)、MODULES(丰富的内置模块)、PLUGINS(内置和可自定义的插件)这些可供调遣。(3)作用对象

Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机(HOSTS),同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。图1-1 Ansible工作机制

同样,如果我们按Ansible工具集的组成来讲,由图1-1可以看出Ansible主要由6部分组成。

·ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件;

·INVENTORY:Ansible管理主机的清单;

·MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义;

·PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。

·API:供第三方程序调用的应用程序编程接口;

·ANSIBLE:该部分图中表示的不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框大家可以理解为是Ansible命令工具,其为核心执行工具;

Ansible执行任务,这些组件相互调用关系如图1-2所示:图1-2 Ansible组件调用关系

使用者使用Ansible或Ansible-playbook(会额外读取Playbook文件)时,在服务器终端输入Ansible的Ad-Hoc命令集或Playbook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将Play组织成Ansible可识别的任务(Task),随后调用任务涉及的所有模块(Module)和插件(Plugin),根据Inventory中定义的主机列表通过SSH(Linux默认)将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。1.5 Ansible通信发展史

Ansible主推的卖点是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接。同时因为SSH是每台Linux主机系统必装的软件,所以Ansible无需在远程主机端安装任何额外进程,即可实现Agentless(无客户端),进而助力其实现去中心化的思想。尽管稳定、快速、安全的SSH连接是Ansible通信能力的核心,但SSH的连接效率一直被诟病,所以Ansible的通信方式和效率在过去的数年中也在不停地改变和提高。基于以上认识,我们先来了解Ansible SSH的工作机制,再来回顾其发展史。

1.Ansible SSH工作机制

Ansible执行命令时,通过其底层传输连接模块,将一个或数个文件,或者定义一个Play或Command命令传输到远程服务器/tmp目录的临时文件,并在远程执行这些Play/Comand命令,然后删除这些临时文件,同时回传整体命令执行结果。这一系列操作在未来的Ansible版本中会越来越简单、直接,同时快速、稳定、安全。通过了解其工作机制及其一直以来秉承的去中心化思想,我们可以总结,Ansible是非C/S架构,自身没有Client端,其主要特点如下。

·无客户端,只需安装SSH、Python即可,其中Python建议版本为2.6.6以上。

·基于OpenSSH通信,底层基于SSH协议(Windows基于PowerShell)。

·支持密码和SSH认证,因可通过系统账户密码认证或公私钥认证,所以整个过程简单、方便、安全。建议使用公私钥方式认证,因为密码认证方式的密码需明文写配置文件,虽然配置文件可加密,但会增加Ansible使用的复杂度。

·支持Windows,但仅支持客户端,服务端必须是Linux系统。

如Ansible官方介绍,如上特性是希望实现以下最终目标:

·Clear(简易):YAML语法,Python语言编写,易于管理,API简单明了;

·Fast(敏捷):快速学习,设置简单,无需任何第三方软件;

·Complete(全面):配置管理、应用部署、任务编排等功能集于一身,丰富的内置模块满足日常功能所需;

·Efficient(高效):没有额外软件包消耗系统性能;

·Secure(安全):没有客户端,底层基于OpenSSH,保证通信的安全可靠性。

2.Ansible通信方式发展历程

Ansible底层基于安全可靠的SSH协议通信,但一直被人们诟病于其效率,通信功能作为Ansible最核心的功能之一,官方也一直在做改进。本节我们来了解Ansible通信发展史。(1)Paramiko通信模块[1]

最初,Ansible只使用Paramiko实现底层通信功能,但是Paramiko只是Python语法的一个第三方库,发展速度远不及[2]OpenSSH。同时,Paramiko的性能和安全性较OpenSSH稍逊一筹(在笔者眼里)。

在后续发布的新版本中,Ansible仍继续兼容Paramiko,甚至在[3]诸如RHEL5/6等不支持ControlPersist(只在OpenSSH5.6+版本中支持)的系统中封装其为默认通信模块。(2)OpenSSH

从Ansible1.3版本开始,Ansible默认使用OpenSSH连接实现各服务器间通信,以支持ControlPersist(持续管理)。Ansible从0.5版本起即支持OpenSSH功能,但直到1.3版本开始才将其设置为默认。

多数本地SSH配置参数,诸如Hosts、公私钥文件等是默认支持的,但如果希望通过非默认的22端口运行命令等操作,则需要在Inventory文件中配置ansible_ssh_port的值。OpenSSH相比Paramiko更快、更可靠。(3)加速模式

据官网介绍:开启加速模式后Ansible通信速度有质的提升,是开启ControlPersist后的SSH的2~6倍,是Paramiko通信速度的10倍。

尽管加速模式对Ad-Hoc命令不友好,但是Playbook通过加速模式会收到更高的性能。加速模式抛弃SSH多次连接的方式,通过SSH初始化后,带着AES key的初始化连接信息通过特定的端口(默认5099,但可配置)执行命令传输文件。使用加速模式唯一需要的额外包是python-keyczar,如此一来,几乎所有的常规模块OpenSSH/Paramiko均工作在加速模式,但如下使用sudo的情况例外:

1)sudoers文件需要关闭其中的requiretty功能,注释掉或者设置每个用户的默认值为username!requiretty。sudoers的man文档说明如下。requirettyIf set, sudo will only run when the user is logged in to a real tty. When this flag is set, sudo can only be run from a login session and not via other means such as cron(8) or cgi-bin scripts. This flag is off by default.

2)开启加速模块必须事先设置sudo文件NOPASSWD配置,禁用sudo后的PASSWORD交互认证过程。加速模式相对OpenSSH可以提供2~4倍的性能提升(尤其对于文件传输功能),在Playbook的应用中可以通过增加配置开关来实现。---- hosts: allaccelerate: trueaccelerate_port: 5099[...]

其中的端口也可以在ansible.cfg中单独配置。[accelerate]accelerate_port = 5099

加速模式是现在已经被废弃的Fireball模式的进化版,类似于Ansible加速通信方式,但需控制机事先安装ZeroMQ服务(这与Ansible简单、无依赖、无Daemon的理念是相违背的),并且一点也不支持sudo操作。(4)Faster OpenSSH in Ansible1.5+

Ansible1.5+版本中的OpenSSH有了非常大的改进,旧版本中实现方式是复制文件至远程服务器后运行,然后删除这些临时文件,而新版本的替代方案是通过OpenSSH发送执行命令,将所有操作附带在SSH连接过程中同步实现。该方式只在Ansible1.5+版本有效,且需在/etc/ansible/ansible.cfg的[ssh_connection]区域开启pipelining=True功能。

关于加速模式我们还需要关注如下内容:

·pipelining=True需结合sudo的requiretty配置方可生效,请确保/etc/sudoers的Defaults requiretty为注释状态。绝大多数现有流行系统默认开启该选项。

·在Mac OSX、Ubuntu、Windows的Cygwin或其他流行OS最好选择5.6以上的OpenSSH版本,这些版本对ControlPersist有更友好的支持。

·如Ansible运行的主机系统是RHEL或CentOS,然而希望升级当前OpenSSH到最新版本以支持Faster/Persistent连接模式,可以通过yum update openssh升级最新版本。

本节内容可以通过如图1-1所示的Ansible通信方式发展史鱼骨图来概括,从最开始的Paramiko,后来初步演变为OpenSSH,加速模式官方推荐Pipelining方式。图1-3 Ansible通信方式发展史

在了解Ansible通信原理及发展史后,我们进一步学习Ansible自身的发展史。要知道,在Chef、Puppet、SaltStack、Fabric等自动化工具群雄争霸的市场背景下,Ansible依然能够杀出重围,在GitHub取得如此惊人成就,并且被红帽官方收购,其发展史不得不让人刮目相看。[1] Paramiko是基于Pyhton语言通过SSH2的开源软件。[2] 基于标准SSH协议的实现的应用遍布开源界。[3] ControlPersist功能允许SSH连接在SSH Conf ig配置的过期时间内长期保持存活,以便使常用命令的执行不必每次都经过最初的握手过程。1.6 Ansible应用场景

Ansible底层基于Python,以简单著称,配置文件格式也以INI和YAML为主,与其他管理工具相比,学习成本较低,学习曲线也很平滑,无论是基础运维人员还是资深运维工程师都可以较快上手,稍加练习便可以熟练掌握。如果具备Dev基础,熟悉Python、PHP等主流语言,基于Ansible开放API接口做二次开发,可以灵活有效地发挥其价值。Ansible自身也包括非常丰富的内置模块,从Windows系统到开源Linux系统,从文件同步到命令执行,从软件的安全升级到配置的维护变更,从商业硬件A10、F5到公(私)有云AWS、Digital、VMware、Docker等,几乎囊括了运维日常所有的技术应用。系统下所有的操作可从运维操作角度划分为两类。

·文件传输:文件的本地传输和异地传输,所有文件的空间形态、时间形态变化均构成文件传输类操作。

·命令执行:终端所有操作对系统来讲都是指令的组成,最终转换为基础硬件可接受的电信号完成任务集。对运维操作的用户行为来讲,除文件传输以外的其他操作均可称为命令执行。

从自动化工作类型角度归类如下。(1)应用部署

现今的应用功能越来越强大,同步应用部署过程的依赖和规则也日趋复杂,但对应用运维的要求没有随之降低,有效快速正确平滑的应用部署需求日趋强烈。Ansible内置网络、应用、系统、第三方云平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类工作,即使对跨平台或知名的商业硬件也同样支持。(2)配置管理

配置管理(Configuration Management,CM)是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。在日益复杂的IT环境和用户需求下,Ansible内置File、Template,结合Jinja、Lineinfile等内置模块,同时无缝结合GitHub、GitLab、Git、SVN、Jenkins等主流版本控制和CI持续集成工具,助力配置管理自动化。(3)任务流编排

有效保证Tasks任务流按既定规则和顺序完成事先制订的目标和计划,同时Roles编排方式又能在一定程度上从书写习惯和代码层编排上保证整体项目的可架构性和规范性,协助控制项目维护成本不致过高。

如上场景适用于网络管理员、系统运维、应用运维、桌面运维、DevOps、基础架构运维等多领域运维行业,以及无运维岗但服务规模又需有一定精力投入维护的小型公司,开发人员经过简单的了解即可初步上手。同样也适用于中大型公司,可以投入人力、精力、财力对Ansible进行二次开发,使其更加适用。1.7 Ansible的安装部署

了解完Ansible是什么、通信原理及发展史、Ansible发展历程及其应用场景后,接下来为大家介绍Ansible的安装部署。

Ansible的安装部署非常简单,其仅依赖于Python和SSH,而系统[1]默认均已安装。除Windows外,RedHat、Debian、CentOS、OSX[2]均可作为管理节点部署Ansible。Ansible被RedHat红帽官方收购后,其安装源被收录在EPEL中,如已安装EPEL可直接YUM或APT安装,通过pip和easy_install的Python第三方包管理器也可以便捷安装Ansible,下面我们详细介绍部署方式。1.7.1 PIP方式

Ansible底层也是基于Python编写,所以可以通过PIP方式安装Ansible。

步骤1:安装python-pip及python-devel程序包。安装程序包及// python-pippython-devel,–yum install python-pip python-devel y

返回类似如下结果则表示安装成功: Installing : python-devel-2.7.5-34.el7.x86_64 1/2 Installing : python-pip-7.1.0-1.el7.noarch 2/2 Verifying : python-pip-7.1.0-1.el7.noarch 1/2 Verifying : python-devel-2.7.5-34.el7.x86_64 2/2Installed: python-devel.x86_64 0:2.7.5-34.el7 python-pip.noarch 0:7.1.0-1.el7Complete!

步骤2:安装Ansible服务。安装请前确保服务器的、开发环境均已安装,系统几乎所有的软件包编译环境均基于,// gccglibcgcc如不确认可先执行如下命令:–yum install gcc glibc-devel zlib-devel rpm-build openssl-devel y升级本地至最新版本// PIPpip install --upgrade pip安装服务// Ansible–pip install ansible upgrade

执行命令ansible--version,有类似如下返回结果则表示Ansible安装成功并可正常使用。ansible 2.1.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides

如下其他验证安装是否成功的方式也一样,均可执行ansible--version验证,后面不一一列出。1.7.2 YUM方式

YUM(Yellow dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需烦琐地一次次下载、安装。YUM安装Ansible过程如下:需事先安装源后方可找到并安装// EPElAnsiblerpm -Uvh https:// dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm安装// Ansible–yum install ansible y(注:EPEL:EPEL(Extra Packages for Enterprise Linux,企业版Linux的额外软件包)是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供它们默认不提供的软件包。)

安装速度视网络情况而定,因为安装过程会安装非常多的依赖包,又因各系统环境的差异性,如返回类似如下结果则表示安装成功:Installed: ansible.noarch 0:2.1.1.0-1.el7Dependency Installed: PyYAML.x86_64 0:3.10-11.el7 libtomcrypt.x86_64 0:1.17-23.el7 libtommath.x86_64 0:0.42.0-4.el7 python-babel.noarch 0:0.9.6-8.el7 python-httplib2.noarch 0:0.7.7-3.el7 python-jinja2.noarch 0:2.7.2-2.el7 python-keyczar.noarch 0:0.71c-2.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-pyasn1.noarch 0:0.1.6-2.el7 python2-crypto.x86_64 0:2.6.1-9.el7 python2-ecdsa.noarch 0:0.13-4.el7 python2-paramiko.noarch 0:1.16.1-1.el7 sshpass.x86_64 0:1.05-5.el7Complete!1.7.3 Apt-get方式

Apt-get全称是Advanced Package Tool,是一款适用于UNIX和Linux系统的应用程序管理器,适用于Ubuntu、Debian等deb包管理式的操作系统,主要用于自动地从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。添加源// Ansibleapt-add-repository -y ppa:ansible/ansible升级库文件// apt-get update安装// Ansibleapt-get install -y ansible1.7.4 源码安装方式

源码安装本身就是一道很高的门槛,作为刚接触Linux的新手不建议使用该方式。

在什么情况下我们需要从源代码安装软件呢?其实源码安装是相对于二进制安装而言的,所谓的二进制安装即前言讲到的,PIP、YUM、Apt-get都是二进制的安装方式,一般当新软件推出了新的版本,而所用的发行版并没有及时跟进,这时候,想要“尝鲜”的话,就非得靠自己而不可使用源码编译安装;另一种情形是,不管是软件的开发者还是现用的系统都没有提供可直接使用的二进制包,而自己又非要使用该软件,那么也需源码安装才行。当然,还有其他的情形。总而言之,学会源码安装软件方式是一项非常重要的技能,但又因其编译环境准备起来复杂不堪,同时安装过程又需人工逐一解决安装过程中可能遇到的各项应用层依赖和系统库依赖,所以门槛较高,故不建议初学者使用该方式。不建议安装版// Beta

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载