快乐学习
前程无忧、中华英才非你莫属!

Day92-自动化运维篇-HelloWorld

前言

极为易用;任何人可以在几分钟之内学会并使用,这就是Ansible。

Ansible只依赖SSH,无需在远程机器上安装代理,极为容易上手。Hacker News上有人称之为shell scripting++,很到位。

第1章 Ansible架构及特点

IT行业的工作变得越来越有趣了,我们不再是把软件交付给客户,然后安装在单独的服务器上运行,我们都慢慢地变成了系统工程师。

我们现在部署应用软件的方式是通过服务串联起来,运行在一系列分布式的计算资源上并用各种不同的网络协议进行通信。常见的应用包括Web服务、应用服务、基于内存的缓存服务系统、任务队列、消息队列、SQL数据库、NoSQL数据存储、负载均衡等。

我们也需要确保采用合适的冗余,当故障发生时软件系统能够很好地处理、适应这些故障。另外有些辅助的服务需要部署、维护,例如日志管理、监控系统、分析系统,需要与第三方服务交互,如通过与IaaS接口交互来管理虚拟主机实例

你可以用手动方式来搭建这些服务:安装服务器操作系统,SSH登录每一台,安装软件包,编辑配置文件,等等。这种方式耗费大量时间还经常出错,特别是在做了3~4次之后,这枯燥重复的手工劳动是令人非常痛苦的。对于更复杂的任务,比如在你应用环境中搭建一个OpenStack云环境,由手工来操作会让人发疯。应有更好的方法。

如果你读到这里,你可能已经有了配置管理的思想,并考虑采用Ansible做为你的配置管理工具。无论你是一个开发人员想要把代码部署到生产环境,还是一个系统管理员寻找更好的自动化方法。我觉得Ansible对于这些问题都是很好的解决方案。

1.1 Ansible软件及公司

IT自动化配置管理最近20年获得了迅猛的发展,特别最近几年在移动互联、云计算、大数据、互联网+等大规模应用平台的需求推动下,涌现出一批成熟的大规模自动化运维工具。维基百科里列出了二十多个,其中Puppet、Chef和Salt,以及CFEngine、Vagrant和NixOS,大家都可能耳熟能详了。不过后起之秀Ansible(http://www.ansible.com/)的人气更高,已经是当今最常用的管理基础架构的开源管理工具之一。

从开源仓库GitHub上受到使用者、开发者的关注度、加星、贡献、评论(见表1-1)可以看出,Ansible的受欢迎程度的数据已经远远超过Puppet、Chef、CFEngine、SaltStack。

Ansible使用Python作为开发语言,巧妙地设计、实现了简单易用、功能强大的自动化管理工具。Ansible由Michael DeHaan发起、开发、创建,他同时也是著名工具软件Cobbler与Func的开发者。Ansible的第一个版本发布于2012年2月,目前下载量已经超过了100万。当前在GitHub上,它是排名前10位的Python项目,可以预见Ansible的发展不可限量。

Ansible已经广泛应用于各种规模、各个领域的企业,包括Rackspace、Twitter、Evernote、NASA、GoPro、Atlassian等知名企业。

1.1.1 Ansible应用领域

Ansible的编排引擎可以出色地完成配置管理、流程控制、资源部署等多方面工作。与其他IT自动化产品相比较,Ansible为你提供一种不需要安装客户端软件、管理简便、功能强大的基础架构配置、维护工具。

Ansible基于Python语言实现,由Paramiko和PyYAML两个关键模块构建。Ansible具有独特的设计理念:

·安装部署过程特别简单,学习曲线很平坦。

·管理主机便捷,支持多台主机并行管理。

·避免在被管理主机上安装客户代理,打开额外端口,采用无代理方式,只是利用现有的SSH后台进程。

·用于描述基础架构的语言无论对机器还是对人都是友好的。

·关注安全,很容易对执行的内容进行审计、评估、重写。

·能够立即管理远程被管理主机,不需要预先安装任何软件。

·不仅仅支持Python,可运行使用任何动态语言开发模块。

·非root账户也可以使用。

·成为最简单、易用的IT自动化系统。

在云计算时代的浪潮中,基础架构必须满足按需自动伸缩、按使用量计费的基本特性,IT自动化运维软件就是最重要的必备工具之一

Ansible能够非常完美地完成.配置管理、2.服务即时开通、应用部署、流程编排

通过使用Ansible,无论是系统管理员、运维团队、基础架构管理员、开发者,或者其他任何需要基础架构自动化者都可以从中受益。本书目的就是介绍如何构建健壮的IT基础架构自动化运维系统。

1.1.2.Ansible公司服务

1.Ansible健康检查服务

如果已经使用Ansible有段时间了,但你想要确保符合最佳实践标准;如果你的上线日期已经很近,想要在上线截至日期之前一切准备就绪,都可以寻求“健康检查服务”。服务团队将评估你Ansible和Ansible Tower管理的内容和配置,用Ansible最佳实践来验证你的系统,并为你将来的项目提供建议。有如下服务:

·审查你当前的Ansible配置是否遵循最佳实践。

·建议改进你Ansible的实现。

·对在审查过程中发现的问题将按照目标进行培训

2、协助重大迁移服务

发现Ansible是很易用的产品,但现在已经部署了Puppet、Chef、CFEngine或其他定制化的解决方案。要从现在的配置管理、部署方案、创建Ansible与之对应,这需要做重大迁移服务工作,这项工作包括:

·评估:与你原来使用工具的专家一起分析当前工具管理的内容,设计一个迁移计划。

·实现:根据评估的结果,按照推荐的方式进行实施,用Ansible工具创建相应的管理功能。

根据客户的需求,Anisble咨询团队将交付部分或全部迁移服务,使运行在Ansible维护工具中。

Ansible团队还将提供一份文档化的解决方案,一种可行的迁移方式,探寻“train the trainer”方式,让你的团队将来能够自己可以进行迁移。

3.推进IT自动化项目

推进自动服务是一项能够加快建立起自动化很好方法,这些协议将提供:

·为你的团队培训Ansible、Ansible Tower的基础使用和高级知识。

·安装、配置Ansible和Ansible Tower。

·Ansible导师将在你的流程中部署关键组件。

4.客户咨询服务

Ansible公司可以提供个性化客户服务,包括从项目启动、健康检查、重要迁移到最后完成设计目标过程中大大小小所有事情。

可能交付的内容包括:定制化模块、Jinja2模板、动态资产库脚本、角色和playbook,能够帮助你解决挑战的问题,加速任何Ansible项目的推进。

5.Ansible培训服务

Ansible官方网站已经提供了快速入门的视频短篇教程,帮助你了解Ansible。这个短篇介绍了Ansible作为一款强大的自动化IT运维、流程编排的工具,有哪些优势,这也是为你开始自动化项目提供必备的基础知识。

Ansible提供老师讲解的课程,包括动手学习环境、实际问题处理、现场建设性问题解答。也致力于根据你的个性需求开发特定裁剪的课程,个性化的培训也可以根据要达到的目标签订专业的服务协议。

1.2 Ansible架构模式

Ansible维护模式通常由控制机和被管机组成。控制机是用来安装Ansible工具软件、执行维护指令的服务器或工作站,是Ansible维护的核心。被管机是运行业务服务的服务器,由控制机通过SSH来进行管理。

1.2.1 Ansible管理方式

Ansible是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用SSH进行远程连接。无需在被管节点上安装附加软件,可使用各种编程语言进行扩展。

Ansible总体系统构成如图1-2所示。Ansible管理系统由控制主机和一组被管节点组成。控制主机直接通过SSH控制被管节点,被管节点通过Ansible的资源清单(inventory)来进行分组管理。

Ansible如何进行配置管理呢?图1-3给出了实例,这是Ansible用剧本(playbook)方式对3台运行Nginx服务的Ubuntu服务器进行配置管理。她编写一个叫webservers.yml的Ansible脚本。在Ansible中,这个脚本称为playbook。在playbook中描述了包含被管节点的hosts和对这些hosts按照顺序执行的任务列表(task)。

在此例子中,hosts包括web1、web2、web3,任务列表包括如下过程:

·安装Nginx(Install Nginx)。

·创建Nginx配置文件(/etc/nginx/nginx.conf)。

·基于安全证书SSH方式拷贝配置文件,重启Nginx服务。

·确保Nginx服务处于启动状态。

然后在Ansible系统的控制主机上执行:

$ ansible-playbook webservers.yml

Ansible将会通过SSH连接并行地在web1、web2、web3上面安装、配置、运行Nginx服务。

后面的章节将会对这里涉及如何编写playbook,以及webservers.yml中各个字段的含义、工作内容做深入的讲解。

1.2.2 Ansible系统架构

Ansible集合了众多优秀运维工具(Puppet、Cfengine、Chef、Func、Fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。Ansible的基本架构见图1-4,用户通过Ansible编排引擎操作公有云/私有云或CMDB(配置管理数据库)中的主机。

从图1-4可以看到,Ansible由以下各部分组成:

·核心引擎:即Ansible。

·核心模块(core modules):这些都是Ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。Ansible遵循“batteries included“哲学,所以你可以有各种各样任务的核心模块。这意味着模块是最新的,你不需要寻找一个在你平台上工作的实现。你可能认为模块库的工具箱里充满了有用的系统管理工具,和playbook一起构建自动化运维系统的基础源材料。

·自定义模块(custom modules):如果核心模块不足以完成某种功能,可以添加自定义模块。

·插件(plugins):完成模块功能的补充,借助于插件完成记录日志、邮件等功能。

·剧本(playbook):定义Ansible任务的配置文件,可以将多个任务定义在一个剧本中,由Ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。

·playbook是Ansible的配置、部署和编排语言,可以描述一个你想要的远程系统执行策略,或一组步骤的一般过程。如果Ansible模块作为你的工作室工具,playbook是你的设计方案。在基本层面上,剧本可用于管理配置和部署远程机器。在更高级的应用中,可以序列多层应用及滚动更新,并可以把动作委托给其他主机,与监控服务器和负载平衡器交互。

·连接插件(connectior plugins):Ansible基于连接插件连接到各个主机上,负责和被管节点实现通信。虽然Ansible是使用SSH连接到各被管节点,但它还支持其他的连接方法,所以需要有连接插件。

·主机清单(host inventory):定义Ansible管理的主机策略,默认是在Ansible的hosts配置文件中定义被管节点,同时也支持自定义动态主机清单和指定配置文件的位置。

Ansible采用paramiko协议库(Fabric也使用这个),通过SSH或者ZeroMQ等连接主机。

Ansible在控制主机将Ansible模块通过SSH协议(或者Kerberos、LDAP)推送到被管节点执行,执行完之后自动删除,可以使用SVN等来管理自定义模块及编排。从图1-4可以了解到,控制主机与被管节点之间支持local、SSH、ZeroMQ三种连接方式,默认使用基于SSH的连接。在规模较大的情况下使用ZeroMQ连接方式会明显改善执行速度。

Ansible-galaxy分享平台

Ansible提供了一个在线playbook分享平台,地址:https://galaxy.ansible.com/,该平台汇聚了各类常用功能的角色(Role),当前分为web、system、packaging、networking、monitoring、development、database:sql、database:nosql、database、clustering、cloud:rax、cloud:gce、cloud:ec2、cloud共14类,已经超过4000个功能角色。

根据需要找到适合你的角色后,只需要使用命令“ansible-galaxy install+作者ID.角色包名称”就可以安装到本地,比如想安装debops提供的Nginx安装与配置的角色,直接运行“ansible-galaxy install debops.nginx”即可安装到本地,该角色的详细地址为:https://galaxy.ansible.com/list#/roles/1580。

1.2.3 任务执行模式

Ansible系统由控制主机对被管节点的操作方式可分为两类,即ad-hoc和playbook:

·ad-hoc模式使用单个模块,支持批量执行单条命令。

·playbook模式是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

在Ansible系统内部又是如何执行的呢?

Ansible执行过程如图1-5所示。

1.2.4 Ansible与其他配置管理的对比

配置你的基础架构。它们各自的优缺点见表1-3。

这些自动化管理软件都具备强大的功能、灵活的系统管理和状态配置,都提供丰富的模板及API,对云计算平台、大数据都有很好的支持。

Puppet、Chef、SaltStack设置比较复杂,有代理和服务,有远程被管节点需要长期运行管理进程,而且很多术语和概念都是自己一套。Ansible相对于其他产品要简单得多,本质上混合了声明式和命令式。不仅适用于大规模的IT环境,而且对于一些规模较小的环境(20~50台机器)Ansible也是很实用的。

1.3 Ansible与DevOps

本节简要介绍下DevOps(Development和Operations的组合)。DevOps是一组过程、方法与系统的统称,用于促进软件开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合,如图1-6所示。

DevOps概念的引入能对产品交付、测试、功能开发和维护(包括常见的“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”,例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务人员的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。

需要频繁交付的单位更需要具有DevOps能力,大量互联网在线移动应用随时根据用户的反馈进行迭代开发,持续改进用户体验,这需要能够支撑业务部门每天可能都有几次、几十次部署的需求。这种能力也称为持续部署,并且经常与精益创业方法联系起来。下面几个因素促使引入DevOps:

·使用敏捷或其他软件开发过程与方法。

·业务负责人要求加快产品交付的速度。

·虚拟化和云计算基础设施日益普遍。

·数据中心自动化技术和配置管理工具的普及。

DevOps将使开发团队与运营团队之间更具协作性、更高效的关系。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。团队之间相互融合,运维从开发流程的计划阶段就参与进来,运维团队就能了解将要开发的产品,同时可以在让产品开发设计初期就考虑后期运维的需求。

DevOps成功的关键有如下因素:

·文化建设。首先要调动开发和运营部门之间的协作,鼓励运营人员采纳软件开发方法,利用云计算基础设施来完成测试和代码部署。其次在软件开发、测试、质量保障、集成、预生产和生产部署等方面必须打散小团队,更好地整合开发和运营人员。例如,在讨论运营解决方案或扰乱事后评估报告时应该邀请开发人员加入。相反地,应该邀请运营人员列席开发人员规划会议。让交叉组合的工作模式成为制度,可以让团队之间合作融洽,消除沟通不畅导致的延误或疏忽,使DevOps的推进更加有效。有时可以运用岗位轮换或者知识共享的方法。

·自动化工具支撑。要超越文化的影响,组织还必须依靠各种DevOps工具。例如,开发人员编写代码需要工具,QA测试人员需要用工具完成新版软件的部署,环境准备、将新代码在测试系统和生产系统之间迁移也必须用到云资源调度工具。

现在已经有了大量的自动化工具,但都是在某些领域或某个领域做得好。运营工具厂商有BMC、CA和XebiaLabs等公司,软件开发工具厂家有IBM、Electric Cloud、Serena Software等公司,工作流程、架构设计和软件发布工具的专业供应商包括Atlassian、CollabNet、Rally Software、ThoughtWorks、OpenMake等公司。评估供应商时,除了对基本功能考察之外,还需要考虑这些公司随时可能会被并购,其产品可用性和未来发展也会因此受影响。

尽管企业IT环境中的应用各种各样,但其操作系统、基础组件还是有很多共性的。手动安装操作系统的过程通常需要小时级才能交付。并且安装系统的可靠性完全依赖于管理人员的工作经验、技术能力、对复杂过程操作的精确程度。然后管理员需要对这些系统一遍又一遍地重复同样的过程,如图1-7所示。 

也可能让其他团队一起参与进来搭建系统,在应用交付团队能够工作之前,信息安全团队需要验证是否达到安全基线。需要接触系统的团队越多,实现的时间就越长,也就更加可能延时和增加错误方式。

服务器和系统还比较好理解、容易自动化。尽管你当前OS搭建过程有很多需要与基础环境交互,自动化搭建和配置过程将按照需要能够重复部署OS镜像、合适的工具,管理这些建好的系统将与创建一个新的一样简单,这样这些系统就会总是看起来差不多。

一旦操作系统的搭建和管理自动化之后,把这些自动化推广到其他团队就相对容易了。通常客户搭建一个OS,如研发、测试、QA团队运行他们的应用时,能够确保总是运行在配置合适的OS之上。

但是,仅仅搭建系统,就忽略了更困难部分的问题了:如何保持它们整个生命周期中处于更新状态,如何保证当前的基本需求是正确的?这再一次需要采用自动化工具来管理它们之间的差异。

过去传统虚拟机(VM)生命周期管理方法是一个主要问题,需要独立的流程来维护存在的虚拟机,许多交付工具都对在线运行系统的更新、变更缺乏有效手段。

幸运的是,借助服务器自动化搭建和维护过程,可大大减少或完全消除服务器手工交付的过程,使用Ansible作为自动化工具,使用相同的playbook来搭建系统,就能够保证创建出来的系统是一样的。

甚至在基础架构层应用,也可以自动创建、交付、管理,将节省大量的时间,为单位的扩展团队提供额外的好处。

1.5 本章小结

Ansible关键的想法是,开发一个好的自动化系统,能认识到计算机是一组而不只是一个个分开的机器,也就是所谓“多层编排”。建模过程与建模状态同样重要。不按传统配置管理依赖定制代理架构的思路,避免了证书交换,以及反向解析DNS和NTP的问题。默认可插拔,人人都可以很容易地贡献,因此Ansible获得了广泛的参与和采用。保持简单(用YAML等),制定计划并坚持,然后乐观其成。

第2章 Ansible安装与配置

2.1 Ansible环境准备

被管节点如果是Windows,则需要有PowerShell 3.0并授权远程管理。

管理开启SELinux环境

如果被管节点上启用了SElinux,需要安装libselinux-python,这样才可使用Ansible中与copy/file/template相关的函数。可以通过Ansible的yum模块在需要的托管节点上安装libselinux-python。

为了方便读者理解,笔者通过虚拟化环境部署了两组业务功能服务器来进行演示。笔者的操作系统版本为CentOS 7.0,自带Python 2.7.5,将采用下一节介绍的yum方式安装。相关服务器信息如表2-1所示(CPU核数及Web根目录的差异化便于演示生成动态配置)。

2.2 安装Ansible

1.yum安装方式

要使用yum方式安装,需要有合适的yum源。Fedora用户只要连接着因特网,就可以直接使用官方的yum源安装。但对于RHEL、CentOS的官方yum源中没有Ansible安装包,这就需要先安装支持第三方的yum仓库组件,最常用的有EPEL、Remi、RPMForge等。在国内速度较快的高质量yum源有中国科技大学(http://mirrors.ustc.edu.cn)、浙江大学(http://mirrors.zju.edu.cn/epel/)、上海交通大学(http://ftp.sjtu.edu.cn/fedora/epel/)、网易163(http://mirrors.163.com)、sohu镜像源(http://mirrors.sohu.com/fedora-epel/)等。

下面安装EPEL作为部署Ansible的默认yum源。

·RHEL(CentOS)5版本:

rpm –Uvh http://mirrors.zju.edu.cn/epel/6/i386/epel-release-5-4.noarch.rpm

rpm –Uvh http:// mirrors.zju.edu.cn/epel/5/x86_64/epel-release-5-4.noarch.rpm

·RHEL(CentOS)6版本:

rpm –Uvh http:// mirrors.zju.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm –Uvh http:// mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm

·RHEL(CentOS)7版本:

rpm –Uvh http:// mirrors.zju.edu.cn/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

准备好yum源之后,Ansible就可直接用yum命令安装了,命令如下:

$ sudo yum install ansible

2.3 配置运行环境

2.3.1 配置Ansible环境

Ansible配置文件是以ini格式存储配置数据的,在Ansible中,几乎所有的配置项都可以通过Ansible的playbook或环境变量来重新赋值。在运行Ansible命令时,命令将会按照预先设定的顺序查找配置文件,如下所示:

1)ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件。

2)./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件。

3)~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件。

4)/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件。

1.使用环境变量方式来配置

大多数的Ansible参数可以通过设置带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母,如下配置项:

export ANSIBLE_SUDO_USER=root

设置了环境变量之后,ANSIBLE_SUDO_USER就可以在playbook中直接引用。

2.设置ansible.cfg配置参数

Ansible有很多配置参数,你也许不会都使用到。

下面列出常用的配置参数:

·inventory——这个参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表。在1.9版本之前有个类似功能的参数hostfile,但1.9版本之后就不建议再使用了。下一章将对资源清单做详细的讲解。这个参数的配置实例如下:

inventory = /etc/ansible/hosts

·library——Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录。

配置实例如下:

library = /usr/share/ansible

Ansible支持多个目录方式,只要用冒号(:)隔开就可以,同时也会检查当前执行playbook位置下的./library目录。

·forks——设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管节点的数量来确定,可能是50或100,默认值5是非常保守的设置。

配置实例如下:

forks = 5

·sudo_user——这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。

配置实例如下:

sudo_user = root

·remote_port——这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的。配置实例如下:

remote_port = 22

·host_key_checking——这是设置是否检查SSH主机的密钥。可以设置为True或False,下一节将详细介绍。配置实例如下:

host_key_checking = False

·timeout——这是设置SSH连接的超时间隔,单位是秒。配置实例如下:

timeout = 60

·log_path——Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path来指定一个存储Ansible日志的文件。配置实例如下:

log_path = /var/log/ansible.log

另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现在日志中的。

2.3.2 使用公钥认证

现在运维对安全要求都是比较重视的,一般会采用密钥验证方式来登录,Ansible 1.2.1之后的版本都默认启用公钥认证。

如果有台被管节点重新安装系统并在knownansible 1.9.2

configured module search path = None

_hosts中有了与之前不同的密钥信息,就会提示一个密钥不匹配的错误信息,直到被纠正为止。在使用Ansible时,如果有台被管节点没有在known_hosts中被初始化,将会在使用Ansible或定时执行Ansible时提示对key信息的确认。

如果你不想出现这种情况,并且你明白禁用此项行为的含义,只要修改home目录下~/.ansible.cfg或/etc/ansible/ansible.cfg的配置项:

[defaults]

host_key_checking = False

或者直接在控制主机的操作系统中设置环境变量,如下所示:

$export ANSIBLE_HOST_KEY_CHECKING=False

需要说明的是,在早期使用paramiko模式时,公钥认证速度相当慢,因此当使用密钥认证方式时建议采用SSH方式连接,这也是现在默认的连接方式。

2.3.3 配置Linux主机SSH无密码访问

略:可以参考

http://www.ztloo.com/2017/03/21/小白也能玩转大数据集群/

2.4 Ansible小试身手

Ansible安装完成之后,我们也了解了基本配置方式,是不是已经急切要动手实践一下Ansible?下面我们将介绍主机连通性测试和远程执行命令两个小场景,体会一下Ansible的便捷、强大。

首先可以先查看一下安装的Ansible软件版本信息:

$ansible –version

ansible 1.9.2

configured module search path = None

2.4.1 主机连通性测试

为了使用Ansible,第一步需要修改主机与组配置,默认的文件在/etc/ansible/hosts了,格式为ini,添加两台主机的IP地址,同时定义一个webservers组包含这两个IP地址,内容如下:

/etc/Ansible/hosts

#web1.ansible.cn

#web2.ansible.cn

192.168.1.101

192.168.1.102

[webservers]

#web1.ansible.cn

#web2.ansible.cn

192.168.1.101

192.168.1.102

然后,用ping模块对单台主机进行ping操作,结果如下:

$ ansible 192.168.1.111 -m ping

192.168.1.111 | success >> {"changed": false,"ping": "pong"}

对webservers组进行ping操作,结果如下:

$ ansible webservers -m ping

192.168.1.111 | success >> {"changed": false,"ping": "pong"}

192.168.1.112 | success >> {"changed": false,"ping": "pong"}

出现上述结果表示Ansible正确工作,主机的连通性测试成功,没有对被管节点做任何变更。

提示
这里测试时在控制主机与被管节点之间配置了SSH证书信任。如果没有用证书认证,则需要在执行Ansible命令时添加-k参数,在提示“SSH password:”时输入root(默认)账号密码。实际生产环境中,大多数更倾向于使用Linux普通用户账户进行连接并通过sudo命令实现root权限,格式为:
ansible webservers -m ping -u ansible -sudo

2.4.2 在被管节点上批量执行命令

Ansible很方便进行运维自动化,是运维与研发合作的重要工具。我们借鉴学习开发语言的经典示范程序,也用Hello World程序作为自动化运维环境的测试、校验手段。

在用户home目录下创建一个资源清单文件inventory.cfg,内容如下:

$cat inventory.cfg

[webservers]

192.168.1.101

192.168.1.102

用Ansible的shell模块在webservers组的各服务器上显示“hello ansible!”,

命令如下:

$ ansible webservers -m shell -a '/bin/echo hello ansible!' -i inventory.cfg

192.168.1.111 | success | rc=0 >>hello ansible!

192.168.1.112 | success | rc=0 >>hello ansible!

也可以用command模块,得到类似的结果:

$ ansible webservers -m command -a '/bin/echo hello ansible!' -i inventory.cfg

192.168.1.111 | success | rc=0 >>hello ansible!

192.168.1.112 | success | rc=0 >>hello ansible!

这样简单的命令就可以完成批量服务器的管理。现在,你已经来到通往Ansible自动化运维的门口,但是真正巧妙、灵活、功能强大的Ansible等待着你深入学习、探索。



参考书籍:Ansible自动化运维:技术与最佳实践

作者:陈金窗、沈灿、刘政委



打赏

未经允许不得转载:同乐学堂 » Day92-自动化运维篇-HelloWorld

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:226134712
error: Sorry,暂时内容不可复制!