一、简介

1.1 基本概念:

ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排。它通过ssh协议来连接主机,去中心化,相对比puppet和saltstack无需安装客户即可实现文件传输、命令执行、应用部署、配置管理、任务编排等,显得更为简单与轻量。ansible只是提供一种框架,其基于模块工作的,本身没有批量部署。

1.2 核心组件:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

1.3 工具特性:

(1)、no agents:不需要在被管控主机上安装任何客户端;

(2)、no server:无服务器端,使用时直接运行命令即可;

(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;

(4)、yaml,not code:使用yaml语言定制剧本playbook;

(5)、ssh by default:基于SSH工作;

(6)、strong multi-tier solution:可实现多级指挥。

1.3.1 流程架构:

anisble

ansible如何工作:
Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过 paramiko 来实现的。
对Ansible底层工作机制感兴趣的可以参考这个:http://www.the5fire.com/explore-the-ansible.html

ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。

anisble

图片来源于:http://ju.outofmemory.cn/entry/67581

ansible有如下优点:
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
使用python编写,维护更简单;
使用push方式,控制节点向其他节点推方式,可先测试变更,方便控制管理。
支持sudo
缺点:
基于ssh,串行,故超过500台主机效率较低;

1.4ansible安装
1.4.1、源码安装
源码地址:https://pypi.python.org/packages/source/a/ansible/ansible-1.5.5.tar.gz
1.4.2、pip安装
1.4.2、yum安装
[root@ansible ~]#
[root@ansible ~]# rpm -qa | grep ansible # 检查是否安装
ansible-1.5.3-1.el6.noarch
[root@ansible ~]# yum install ansible -y # 没有安装的话,使用这个安装即可

1.5、ansible组成介绍
1.5.1、包含文件介绍
[root@ansible ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg # ansible的配置文件
└── hosts # ansible的主仓库 用来存储需要管理的远程主机的相关信息
0 directories, 2 files
[root@ansible ~]#

1.5.2、ansible其他组件介绍
ansible-doc 模块文档查看器,很有用,使用ansible -l 显示所有module列表,使用 ansible-doc <module_x> 来查看module_x的详细文档,这里不做太多介绍

ansible-playbook 传说中的配置管理工具,如果你用过puppet或者saltstack,这个可以不用介绍了,如果你没用过,也没关系,花费20分钟看下官方的Video。 掌握一件事情最好的办法就是使用它,你可以下载官方的example来学习

ansible-galaxy 和三星没关系,你可以把他理解成ansible的pip,可以从galaxy.ansible.com下载官方收录的playbooks

ansible-pull 支持直接从git下载playbook执行,需要遵循其规定的目录格式,用处不是特别大,可以不关注

ansible-vault 如果你的配置文件中含有敏感信息,你可能并不希望他能被人看到,vault可以帮你加密/解密这个配置文件,高级用法,请参照http://blog.ansibleworks.com/2014/02/19/ansible-vault/

1.5.3、ansible的Inventory介绍
ansible.cfg文件不用去管,我们只需要配置hosts文件即可,hosts文件也就是官方说的Inventory,

hosts文件配置的几种格式:
单纯的写主机名或ip,所属组为all
#blue.example.com
#192.168.100.1

定义一个组
#[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
组成员可以使用通配符来匹配 www[001:006].example.com

如果你没有使用公钥,想要使用密码,你也可以这样写(适用于第一次登陆控制)
格式:【主机名】 【主机地址】 【主机密码】 默认是root用户来进行的

[keepalived]
keepalived1 ansible_ssh_host=192.168.146.136 ansible_ssh_pass="test"
keepalived2 ansible_ssh_host=192.168.146.137 ansible_ssh_pass="test"

hosts文件设置的参数官方给出的:
anisble

1.6、ansible的简单使用

1.6.1、上传公钥到远程主机
定义好了仓库,那么我们就需要把控制端的公钥推送到远程主机上 (稍后会有讲到)

方法:1、使用expect+shell方式批量推送
方法:2、自己手动一个一个的推送

1.6.2、牛刀小试看看效果如何
好了,公钥都传到对方主机了,那么我们来简单的使用来试用下
[root@ansible ~]# ansible keepalived -a "uptime" # 默认使用command模块
keepalived1 | success | rc=0 >>
13:07:24 up 7:59, 1 user, load average: 0.00, 0.00, 0.00
keepalived2 | success | rc=0 >>
13:07:31 up 7:58, 1 user, load average: 0.00, 0.00, 0.00
[root@ansible ~]#

anisble帮助:
1.列出所有已安装的模块
[root@localhost ~]# ansible-doc –l
2.查看某一个模块的用法
[root@localhost ~]# ansible-doc –h
[root@localhost ~]# ansible-doc -s yum //查看yum的用法
3.ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。

参考文档:
https://www.cnblogs.com/amosli/p/6122908.html#ansibe批量授信
https://blog.51cto.com/mageedu/1412028 #授信ansible-shell
https://blog.51cto.com/nolinux/1607459 #常用模块
官网地址:http://docs.ansible.com/synchronize_module.html
https://blog.51cto.com/linuxg/1714381#ansible用户委派
https://blog.csdn.net/justheretobe/article/details/72775964#ansible playbook

https://www.linuxidc.com/Linux/2017-12/149671.htm 架构原理
https://www.cnblogs.com/f-ck-need-u/p/7553186.html?utm_source=debugrun&utm_medium=referral ansible配置文件详解

http://ansible-tran.readthedocs.io/en/latest/docs/intro_getting_started.html #ansible中文文档