初识Ansible 01

自动化运维工具有很多,从实现的功能、维护的成本、使用的系统来选择,几种常用运维工具比较:

Puppet基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱

SaltStack基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配置脚本更简单

Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用YAML 及 Jinja2模板语言,更强的远程命令执行操作。

so. Ansible!


Ansible介绍与特点

ansible是一款自动化运维工具,基于Python开发,可以实现批量系统设置、批量程序部署、批量执行命令等功能。

特点如下:

Ansible完全基于Python开发,要求python的版本为2.6以上。

Ansible丰富的内置模块,近600个模块完全满足日常功能所需

Ansible默认通过SSH协议管理机器,因此,客户端无需任何配置,管理端配置好后即可使用

Ansible的应用环境:

应用代码自动化部署

系统管理配置自动化

支持持续交付自动化

支持云计算,大数据平台环境

批量任务执行可以写成脚本,不用分发到远程就可以执行

支持非root用户管理操作,支持sudo

使用python编写,维护更简单

Ansible基本架构

  • ansible 核心
  • core modules 核心模块:是ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。
  • custom modeles 扩展模块:如果核心模块不足以完成某种功能,可以添加扩展模块。
  • plugins 插件:完成较小型的任务。辅助模块来完成某个功能。
  • playbooks 批量任务配置文件:ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行。例如安装一个nginx服务,那么我们可以把这拆分为几个任务放到一个playbook中。例如:第一步需要下载nginx的安装包。第二步我可能考虑需要做的就是将我事先写好的nginx.conf的配置文件下发的目标服务器上。第三步,我们需要把服务启动起来。第四步,我们可能需要检查端口是否正常开启。那么这些步骤可以通过playbook来进行整合,然后通过inventory来下发到想要执行剧本的主机上。
  • host inventory 主机群组 定义多种主机:ansible基于连接插件连接到各个主机上,默认是基于SSH连接到目标机器上执行操作的,但是它还支持其他的连接方法,所以需要有连接插件,管理端支持local 、ssh、 paramiko三种方式连接被管理端。
  • connection plugins 连接插件 连接远程主机部分:定义ansible管理主机的策略,一般小型环境下只需要在host文件中写入主机的IP地址即可,但是到了中大型环境就需要使用静态inventory或者动态主机清单来生所需要执行的目标主机。

Ansible的任务执行流程

任务执行流程:

按上往下顺序执行:

1)       读取配置:读取ansible的配置文件

2)       抓取被管理的所有机器或分组列表:从主机列表清单(对应hosts文件)

3)       使用host-pattern过滤机器列表:过滤哪些机器做什么操作

4)       根据参数设置执行模块和配置:从modules目录下动态读取或模块,根据模块功能执行对远端主机的操作

5)       Runner执行并返回:具体分为两步:Connection环节-定义连接方式、Action阶段-给出机器列表,然后对变量/文件等资源获取

6)       输出,结束:把执行结果反馈会管理端

工作原理:

管理端对远端主机管理(执行命令或脚本),远端主机将执行结果反馈管理端

具体:

首先管理端需要安装ansible工具;

其次配置ansible配置文件(/etc/ansible/ ansible.cfg)和定义被控制的主机或分组列表(/etc/ansible/hosts)并对相关主机变量进行定义;

然后ansible执行模块,将管理端本地执行路径(~/.ansible/tmp)将操作执行(命令或脚本),通过local/ssh/paramiko方式传到远端主机用户目录下(~/.ansible/tmp)并执行;

最后将执行结果反馈至管理端

原文地址:https://www.cnblogs.com/liuxc83/p/12382075.html