学习不迷茫:Ansible要如何学至精通

曾经有个Linux运维,后来他累了

在真正开始聊Ansible之前,我想先给各位讲个假故事。

小安很早以前就是一名Linux运维工程师,他的基础很扎实,常用工具和公司涉及的服务以及公司的运维流程都比较熟悉,比如他能熟练地使用Shell脚本去做一些日常的运维管理,Shell脚本不方便的时候也能写写PHP和Perl脚本来给自己的工作添一点色彩。由于这时公司环境比较小,小安管理的资源也比较少,所以那时候的运维工作对于小安来说,绝大多数时候就是打开远程连接工具(比如Xshell),点开他需要维护的几台主机的ssh连接,在这几个窗口上敲敲命令就可以了,工作还是蛮顺利的。

后来公司扩张了,小安要管理的主机逐渐变多,小安仍然用着老方法去运维,期间倒也没有出什么问题,公司的业务仍然是正常的。但是,现在的小安已经累觉不爱了,每次拿到新主机,无论是测试机还是生产机都要上去初始化配置一番,每次版本发布时也要点点点、敲敲敲,此外还有很多很简单但却没法省略的操作。如果只是几台主机,并不会有什么枯燥的感觉,但是小安面对的是多批主机,每批主机上执行同一类操作,他经常需要在大量主机之间切换,这种日子他看不到尽头,而且小安已经意识到公司扩张之后再也抽不出时间来学习新技能,他不想将有限的时间花在这些无谓的操作上,他不想收到HR的辞退消息,他不想......

小安觉得很累,累的原因并不是运维工作的内容有多难、背锅的次数是不是在增加等等,真正打败他的是单调和枯燥。单调和枯燥不仅打败了小安,还打败了小明、小白、小难过、小伤心等大批大批的优秀运维同胞们。这些简单但却无聊的部署和维护,小安和各位同胞们都只想做一次,对此他们有共同的呼声:"曾经体验好过终生陪伴,否则就珍爱生命远离运维"。

后来,配置管理工具出现了,小安看到了未来,终于不用每次都切换到各个主机上去做这些无聊、简单又不可省略的重复配置和管理操作了。

小安比较了几个比较出名的配置管理工具,他决定选择Ansible,他觉得Ansible是一个集大成者,使用方便又简单——他又爱了。

三分钟内我要Ansible的所有资料

我赶紧去百度上Google了一下Ansible的资料,对它做个简介。

Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。

Ansible能批量配置、部署、管理一大堆的主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。

例如,下面的操作(看不懂没关系)表示将Ansible所在主机上的/etc/my.cnf文件拷贝到mysql主机组内的所有主机的/etc/目录下,mysql主机组可以是单台主机,也可以是很多台主机,这可以由用户自己来定义。

$ ansible mysql -m copy -a "src=/etc/my.cnf dest=/etc/"

其实,固定在一台主机上去控制其它主机,通过ssh工具或一些基于ssh二次开发的简单工具也能实现,但Ansible吸引人的地方在于它提供的playbook能批量整合不同主机上执行的不同任务,同时还提供一些额外的机制让用户可以去协调这些任务的执行策略。

Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块,比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。这有点像Shell,Shell自身提供的操作是很有限的,但是它提供了一个很友好的平台让实现各种功能的命令得以执行。Ansible自身可以类比于Shell自身,Ansible的各种模块可以类比于Shell下各种命令。

Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。

Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行不影响结果。比如算术运算时数值加0是幂等的,无论加多少次结果都不会改变,而数值加1是非幂等的,每次加1结果都会改变。再比如执行systemctl stop xxx命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的。Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

如何学习并学好Ansible

Ansible作为一个自动化管理工具,它的用法可以非常简单,只需学几个基本的模块,就像ssh命令一样去使用,就能完成一些简单的批量配置管理功能。

它的用法也可以非常难,需要学习大量Ansible自身的知识,而且还需要学习Ansible中涉及到的额外知识。比较悲催的是Ansible的知识体系比较庞大,它的知识板块也比较零散,想要构建一个比较完善的Ansible知识体系确实稍有难度,这也往往会让我们对深入Ansible无处下手甚至产生迷茫感,相信不少学习过Ansible的人对此应该都有所体会。

其实,Ansible的知识虽多,但这些知识点本身是死的,需要什么功能学什么功能就可以,总有一天可以吞下绝大多数的知识点。但这并不够,实际的环境是非常灵活且复杂的,使用Ansible去管理配置时,需要关注很多任务流程和逻辑,如果编写的任务没有逻辑,使用Ansible很可能会让你知道一口大锅从天而降是一种什么样的体验,所以需要去协调Ansible中的各个任务,协调各个任务是Ansible的另一难点。

最后一个难点,我个人认为是写出适合自己公司环境的可复用(即一次编写多次使用)的playbook或role。这要求熟悉如何应对各种需求和逻辑,对知识点也了然于心,这需要很强的综合能力。

所以要掌握Ansible,需要:

1. 系统性地学习Ansible,从而构建自己的Ansible知识体系
- (1).学基本用法和常用模块
- (2).学Ansible涉及到的额外知识,如YAML和JinJa2
- (3).学习零散但却重要的边角知识点,比如`delegate_to`、`run_once`
- (4).了解一些高级玩法或很少用的上的功能  
2. 真实应用Ansible去配置管理各类服务并协调好任务逻辑,保证Ansible的执行逻辑不会影响业务

总结起来,就是一句在座的各位听了估计会很想打人的废话:理论和实践相结合

虽然确实是废话,但却是真理,学习总是离不开理论和实践的,缺了任何一环,都会遇到难点和瓶颈。对Ansible的学习也如此,想要通过Ansible来释放自己,并让Ansible完美地执行各个任务,不仅要求Ansible的功力要达到一定层次,还需要实际的经验来理解任务逻辑。

为了达到理论和实践相结合的目标,需要你我双方共同的努力。

对于我而言,为了让各位不打我,我会尽最大的努力,安排好本专栏中知识点的出场顺序(正如人生的出场顺序,知识点的出场顺序也很重要),同时辅以一些我精心挑选的经典案例来解释用法、适用场景并为大家详细解说任务之间的逻辑,从而让各位循序渐进地逐步掌握Ansible的知识点,最终让大家系统性地掌握Ansible,并熟悉Ansible的正确使用姿势。

对于各位而言,要深入掌握Ansible,需要自己去练习、测试、并记下属于自己的笔记(杜绝完全拷贝粘贴),我能提供给各位的是知识的展现和引导,缺少了各位自己的练习自己的笔记,这一切都是空话。

最后,感谢各位的支持和订阅,也祝各位能够学有所成,能升职加薪,还有,能吃得起猪肉。
专栏《一步到位玩儿转Ansible》正式上线,抢200个早鸟优惠名额>>>https://blog.51cto.com/cloumn/detail/83

原文地址:https://blog.51cto.com/51ctoblog/2463777

时间: 2024-10-05 03:10:14

学习不迷茫:Ansible要如何学至精通的相关文章

干货 | 学习大数据为什么要先学Java?

计算机编程语言有很多,目前用的多一点的就是Java,C++,Python等等. 目前大多数学习大数据的人都是选择学习Java,那Java到底好在哪呢?为什么学大数据之前要先学Java呢?我们今天就来分析一下. 不少想学习大数据的零基础学员都知道,学大数据部分课程之前要先学习一种计算机编程语言.大数据开发需要编程语言的基础,因为大数据的开发基于一些常用的高级语言,比如Java和.Net. 不论是hadoop,还是数据挖掘,都需要有高级编程语言的基础.因此,如果想学习大数据开发,还是需要至少精通一门

大数据学习路线×××?大数据需要学什么

这几年来大数据非常的热门,到处都有大数据分析的演讲. 演讲内容通常是宣传各种大数据分析成功的案例. 但实际上大数据该怎么做呢? 大部份的讨论似乎都仅止于怎么搜集大量的数据, 然后用个工具(hadoop/spark)后就会马上变出商机和钱来.大数据技术最重要的核心在于如何设计可以高性能处理大量数据的程式 (highly scalable programs.) 学习大数据开发不能急于求成,要分阶段分步骤来一步步完成,大概可以分为四步: 第一个阶段:了解大数据的基本概念 首先,学习一门课程的时候,要对

软件测试为什么需要学习Linux的知识?Linux学到什么程度?-log5

软件测试为什么需要学习Linux的知识?学到什么程度?-log5 ---Dotest软件测试测试学堂-董浩--- 公司目前90%的服务器操作系统不是windows,而是linux(redhat.debin.centos):因此如果你想要定位一个问题或者迭代环境更新时,你就需要登录后台服务器去排查.操作.这时候你不会linux,怎么可以? 另外就算你在公司内用不到(因为后台服务器可能会限制),你会发现现在2019招聘软件测试,大部分都需要测试环境搭建.linux命令基础.shell脚本能力. 因此

小白学习之pytorch框架(2)-动手学深度学习(begin)

在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比较执着,想学pytorch,好,有个大神来了,把<动手学深度学习>整本书用pytorch代码重现了,其GitHub网址为:https://github.com/ShusenTang/Dive-into-DL-PyTorch   原书GitHub网址为:https://github.com/d2l-

女生不适合学习java吗?其实女生学java更有优势,更容易就业

女生适合学java吗?女生做IT怎么样首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说,我觉得这是一种偏见.不少人潜意识里认为女生不适合从事IT开发岗位的工作,因为他们觉得这些岗位对逻辑性的要求很好,而且要具备一定的操作水平,而女生在这方面比较薄弱.实际上,女生从Java的工作,很多时候能做得比男生更好.为什么说女生比男生更能学好java呢?1.女生往往比男生更细心,我认为女生可能在这个行业可以做得更好.首先因为女生比较踏实认真,代码的学习是一个长期,需要坚持的过程.

[ansible学习笔记]Error: ansible requires the stdlib json or simplejson module, neither was found!

1.执行ansible命令的时候客户端rhel56-192.168.209.133 出现以下错误: [[email protected] ansible]# ansible all -m command -a "python -V" -u reed SSH password: rhel56-192.168.209.133 | FAILED | rc=0 >> Error: ansible requires the stdlib json or simplejson modu

ansible学习记录之ansible安装

1. CentOS6.x x64 服务器端安装 # rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm    # yum -y install ansible 配置文件查看: [[email protected] ansible]# egrep -v "(#|^$)" /etc/ansible/ansible.cfg    [defaults]    hostf

机器学习是什么?深度学习DeepLeaning现实一些该怎么学?

作为刚入门的小白,刚刚以实验出真理的心态抱着大腿完成了一次图像分类达到top1-96的宝贵经历. 以下是对于前辈讲座理解以及这次实践后理解心得: 机器学习是什么? 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能.机器学习是对能通过经验(训练)自动改进的计算机算法的研究.机器学习是用数据或以往的经验,以此优化计算机程序的性能标准. 机器学习是机器能通过分析寻找有监督或者无监督数据(数据集)的特征与模式,对未知的数据进行预测,并达到一一定准确率

前端开发学习路线_零基础如何学web前端_从小白到大神进阶

下面给大家讲解一下前端需要掌握哪些技术和学习路线Web前端基础知识:一.前端相关概念建立主要内容:浏览器的概念介绍: 浏览器的作用.工作方式浏览器的概念介绍: 浏览器的作用.工作方式HTTP协议: 协议产生的原因.作用.及内容页面加载流程:当用户打开浏览器,输入地址栏并按下回车之后发生的事情二.HTML-CSS-JS基础-jQuery学习内容:HTML及HTML5:理解浏览器如何解析HTML.基本的语法规则.不同标签的使用方式.嵌套方式CSS:理解层叠式样式表的语法规则.各种盒模型及常用布局CS