本文共 3133 字,大约阅读时间需要 10 分钟。
一、简介
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 流程架构:
ansible如何工作:
Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过 paramiko 来实现的。 对Ansible底层工作机制感兴趣的可以参考这个:ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。
图片来源于:
ansible有如下优点:
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;批量任务执行可以写成脚本,而且不用分发到远程就可以执行;使用python编写,维护更简单;使用push方式,控制节点向其他节点推方式,可先测试变更,方便控制管理。支持sudo缺点:基于ssh,串行,故超过500台主机效率较低;1.4ansible安装
1.4.1、源码安装源码地址: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文件设置的参数官方给出的:
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.00keepalived2 | 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 –l2.查看某一个模块的用法[root@localhost ~]# ansible-doc –h[root@localhost ~]# ansible-doc -s yum //查看yum的用法3.ansible-playbook该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。参考文档:
#授信ansible-shell #常用模块官网地址: playbook架构原理
ansible配置文件详解#ansible中文文档
转载于:https://blog.51cto.com/firephoenix/2140737