Ansible 基础原理及特性

Ansible概念:
       
              Ansible是一种自动化运维工具,基于Python语言编写,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.是借助于 SSH实现远程管理的工具(这只是其中所借助的协议之一,SSH为默认),而ansible还可以借助于其他的连接方式来实现。
 
Ansible  特性:

a.模块化:调用特定的模块,完成特定任务;
                                                                                                      
            ansible本身只是一个管理框架,我们在远程主机上安装ansible以后,它自身并不执行任何管理操作,我们的目标主机被管理时,要想实现某个功能,就需要在ansible之上启用或者激活某个模块,来借助于模块实现。比如:要安装程序包,就会有专门安装程序包的模块,安装程序包,对不同的系统和不同的管理器也是不同的。如:yum、rpm等管理器;启动服务是一个模块、复制文件又是另一模块等;而ansible基于SSH连接着目标主机,通过ssh命令的方式发送给目标主机,也就是说把SSHA的协议接口封装成另一种接口而已)

b.基于Python语言实现,由Paramiko, PyYAML和Jinja2三个关键模块来构建ansible;

           Paramiko是一个SSH的配置,它连接目标主机,使用这个模块,可以一次性使ansible同时连接多个主机,PyYAML是我们ansible管理员能配置自己计划定义的配置目标的编程接口,比如:我们要定义某个主机装某个服务,需要通过PyYAML的格式定义在PyYAML的配置文件中;Jinja2为Python的模板编程语言,把这个编程语言结合PyYAML来实现,就会实现非常强大的编程配置或者把整个配置接口变成编程接口,可以非常灵活的定义配置目标

c.部署简单:agentless;
        
          是指每个被管理主机不需要安装任何东西,只要SSH服务在运行就可以

d.支持自定义模块;
     
         用户使用任何语言自定义模块,包括shell 

e.支持playbook;


除此之外还有一个重要概念 **幂等性:**任何配置系统、配置工具都应该具有幂等性的特征。幂等性是指一种操作执行一遍和执行n遍的结果是一致的;如:给某个主机安装nginx程序包,yum install一次,在yum install一次,无非就是装上nginx的程序包。但有一些命令是无法幂等的,有些命令执行本身是不具有幂等性的,要想能够基于所谓的配置管理工具来使用这个功能,我们就必须把它定义为幂等的。如:追加条件即可,创建一个目录,在创建一次就错了,我们可以加一个执行条件。


Ansible除了高度模块化之外,还是插件化设计的,如下图为ansible的架构图:

ansible架构图讲解:
             Ansible连接着每一个目标主机执行管理时,需要通过连接插件(plugins)来实现,默认使用Paramiko这种方式来通过SSH连接着目标主机,其实我们使用连接插件,如果能开发出其他连接方式的话,可以完全不使用SSH,那ansible要管理哪些主机呢?Ansible当中定义各种各样的服务器配置,如果来一个主机是mysql,那么把mysql的配置都导出来给ansible,那么可能会泄露一些重要信息,因此,ansible不是随意管理任意主机的,我们会有一个主机清单(host inventory),里面定义了哪些主机是我们的目标管理对象,只有被定义在清单中的主机才能纳入到被管控的目标中,对于每一个主机,我们都可以借助模块(core modules对它施加某种管理操作,比如:安装程序包,配置文件等),安装完成以后需不需要要通知用户已经安装成功呢?如果有必要email插件可以用来发送通知、logging插件用来记录日志等;但是作为模块来讲,所有的管理功能都需要借助于模块来实现,为此ansible自带了很多核心模块,作为用户来讲我们可以装入第三方模块或者自定义开发模块,这种称之为custom modules。但是,假如我们现在管理主机有10台,每一台主机平均要执行十项管理操作,这就意味着有100条操作要执行,这100条操作就需要在命令行一次一次的执行,过两天如果需要,还得在重新来一遍,这样就导致我们的工作量加大。
我们的管理任务,如果在命令行直接执行的话,无法在复现,除非重来一次,这样我们可以把管理操作写在文件当中,随后,ansible读的时候,让它读文件,而不是命令行,这种文件统称为playbook,又叫做剧本,playbook是一个yaml格式的文件,这个文件把我们本来命令行当中的命令转化成yaml格式放在文件中,随后就可以一遍遍复现了。

           因此我们学习ansible需要先去了解核心模块当中主流模块的每一个模块在命令行中的用法,习惯了解他的功能,理解它的运作逻辑以后,我们在把它转成playbook。当然,通过这种简单的方式,写在playbook中还需要借助 jinja2叫配置编程接口,把它用编程接口语言的逻辑用做配置会更好一些,这就是接下来所学的ansible的核心,为两部分:一,核心模块中主流常用模块的使用方法法,二,把它们转成playbook。当然,如果我们每次自己去写playbook也比较麻烦,有一些日程管理任务,大家可能都会遇到,因此就有人把playbook放到互联网,然后就可以公开访问,就有一个playbook hub就是集线器,直接下载即可,只不过对于ansible来讲他不叫hub,而叫galaxy。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值