一、ansible介绍
1、简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、架构图
ansible相关模块
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
主机群(Host Inventory):定义ansible管理的主机
特点:
1).不需要代理,不需要客户端
2).没有服务器端,使用时直接运行命令
3).不基于pki工作
4).基于模块工作
5).支持YAML定义剧本
6).默认基于ssh工作
7).可以实现多级指挥
二、工作原理
以上是从网上找到的两张ansible工作原理图,两张图基本都是在架构图的基本上进行的拓展。从上面的图上可以了解到:
1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;
2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;
3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。
三、安装部署
1、安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。
- ansible
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。 - ansible-doc
该指令用于查看模块信息,常用参数有两个-l 和 -s - ansible-galaxy
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
ansible-galaxy install aeriscloud.docker
- downloading role 'docker', owned by aeriscloud
- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.0.0.tar.gz
- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker
- aeriscloud.docker was installed successfully
- ansible-lint
ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作ansible-pull
该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装ansible-vault
ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。
2、安装
1.源码安装
下载地址:https://github.com/ansible/ansible/archive/devel.zip
1.1先解决依赖关系
[root@localhost ~]# yum install python-jinja2 PyYAML python-paramiko
python-babel python-crypto python-setuptools
1.2编译安装
[root@localhost ~]# unzip ansible-devel.zip
[root@localhost ~]# cd ansible-devel
[root@localhost ansible-devel]# python setup.py build
[root@localhost ansible-devel]# python setup.py install
遇到错误:error: Setup script exited with error: command ‘gcc’ failed with exit status 1
解决办法:
yum install -y python-devel
再次python setup.py install后安装成功;
1.3然后创建ansible目录并将配置文件复制到该目录中:
[root@localhost ansible-devel]# mkdir /etc/ansible
[root@localhost ansible-devel]# cp -r examples/* /etc/ansible/
[root@localhost ansible-devel]# ls /etc/ansible/
ansible.cfg hosts
3、配置ansible
1.修改/etc/ansible/hosts文件为
[root@localhost ansible]# cat hosts
[webservers]
node1.a.com
node2.a.com
hosts文件定义了所能识别的所有主机,其内容:
1.1可以将所有主机写入此文件,那么此后所做的操作就会影响所有写入的主机;
1.2可以以[主机组名]的方式定义属于同一组的所有主机,如定义[webservers]段,将所有的web主机的IP或者主机名写入段中,此后就可以用ansible实施诸如servicehttpdstatus等仅对web主机所做的操作了,而其他主机则不会受影响,当然一个组中的主机也可以在其他组中出现,不一定每个组中的主机都不相同;
1.3可以用通配符的方式定义,如node[1:3].a.com,表示定义了node1.a.com node2..a.com和node3.a.com三台主机;
1.4可以直接写入主机IP,也可以写入主机名,但是必须保证能解析这些主机名;
2.配置主机互信
控制台主机是通过SSH区联系被控制主机的,那么就需要实现主机互信使控制台主机的命令送到被控端去执行,避免每一次都要输入密码;
[root@localhost ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ”
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub node1
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub node2
这里因为/etc/hosts文件所以能解析:
[root@localhost ~]# cat /etc/hosts
192.168.85.144 node1.a.com node1
192.168.85.145 node2.a.com node2
3.测试ansible能否执行
如查看所有主机时间是否一致:
[root@localhost ~]# ansible all -a ‘date’
node2.a.com | success | rc=0 >>
Sat Nov 28 20:28:21 CST 2015
node1.a.com | success | rc=0 >>
Sat Nov 28 20:28:21 CST 2015