ansible安装部署,ansible部署


一、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

相关内容

    暂无相关文章