软件简介
Ansible 提供一种最简单的方式用于发布、管理和编排计算机系统的工具,你可在数分钟内搞定。
Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
一. ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
1.ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、ansible优缺点
优点:
- 轻量级,他不需要去客户端安装agent,更新时,只需要在操作机上进行一次更新即可
- 批量任务执行可以写成脚本,而且不用分发到远程就可以执行
- 使用python编写的,维护更简单
- 支持sudo
缺点
- 对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解。
3、ansible架构及工作原理
andible基本架构如下图所示
ansible core : ansible 自身核心模块
host inventory: 主机库,定义可管控的主机列表
connection plugins: 连接插件,一般默认基于 ssh 协议连接
modules:core modules ( 自带模块 ) 、 custom modules ( 自定义模块 )
playbooks :剧本,按照所设定编排的顺序执行完成安排任务
Ansible工作原理如下图:
1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;
2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为 ad-hoc;
3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系 统通过组合多条ad-hoc操作的配置文件 。
Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过 paramiko 来实现的。
ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。
二、部署安装
名称 |
IP |
操作系统 |
用途 |
ansible-server |
192.168.95.10/24 |
CentOS7.1 |
管理端 |
client-1 |
192.168.95.11/24 |
CentOS7.1 |
|
client-2 |
192.168.95.12/24 |
CentOS7.1 |
|
|
|
|
1、ansible安装方式有、源码、pip、yum。
1.1 源码安装
源码安装需要python2.6以上版本,其依赖模块paramiko、PyYAML、Jinja2、httplib2、simplejson、pycrypto模块,以上模块可以通过pip或easy_install 进行安装
1.2pip安装
pip是专门用来管理Python模块的工具,Ansible会将每次正式发布都更新到pip仓库中。所以通过pip安装或更新Ansible,会比较稳妥的拿到最新稳定版。
1.3 yum安装
1)安装epel源
yum install http://mirrors.163.com/centos/7.4.1708/extras/x86_64/Packages/epel-release-7-9.noarch.rpm
2)查看epel源并安装ansible
[root@node2 ~]ll /etc/yum.repos.d/epel*
[root@node2 ~]yum install ansible -y
3)查看ansible版本
ansible --version
2 ansible组成介绍
tree /etc/ansible/
/etc/ansible/
├── ansible.cfg # ansible的配置文件
├── hosts # ansible的主仓库 用来存储需要管理的远程主机的相关信息
└── roles
3、ansible七个命令
ansible
常用参数:-m 模块
-i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.
-a (arguments) 命令行参数
示例:ansible test1 -m copy -a "src=/tmp/test.txt dest=/tmp/test.txt "
ansible-doc
//列出所有已安装的模块
# ansible-doc -l
//查看具体某模块的用法,这里如查看command模块
# ansible-doc -s command
absible-galaxy
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
ansible-galaxy install aeriscloud.docker
ansible-link
ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。
ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作。
ansible-pull
适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。
ansible-vault
注意:重点是ansible和ansible-playbook
4、主机组(在hosts文件内配置)
[hangzhou]
host1
host2
[jiaxing]
host3
host4
5、ansible默认配置文件
Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg
ansible简单使用
[root@test ansible]# ansible test1 -m ping -k
SSH password:
192.168.147.101 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
报错处理办法:
在ansible.cfg配置文件中,也会找到如下部分:
# uncomment this to disable SSH key host checking
host_key_checking = False
默认host_key_checking部分是注释的,通过找开该行的注释,同样也可以实现跳过 ssh 首次连接提示验证部分。
可见采用密码方式比较麻烦,实际应用中采用ssh 互信方式。
配置ssh 互信时,只需要管理主机能ssh被管理机器不需要输入密码即可。
三、ansible常用模块
3.1、ping
ansible test1 -m ping
3.2、setuop
setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下:
#查看主机内存信息
[root@test ~]# ansible test1 -m setup -a 'filter=ansible_*_mb'
#查看网卡信息
[root@test ~]# ansible test1 -m setup -a 'filter=ansible_eth0'
#将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)
[root@test ~]# ansible all -m setup --tree /tmp/facts
3.3 file 模块
file模块主要用于远程主机上的文件操作。
(group、mode、owner):定义文件/目录
path:定义文件路径
recurse:递归的设置,只对目录有效。
src:要被链接的源文件路径,只应用于state=link的情况
dest:被连接的路径,只应用于state=link的情况
state:directory:如果目录不存在,创建目录
file:即使文件不存在,也不会创建
link:创建软连接
hard:创建硬链接
touch:文件不存在,则会创建。如果存在则会,则更新最后修改的时间。
absent:删除目录、文件或取消链接。
示例:
[root@test ~]# ansible test1 -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
[root@test ~]# ansible test1 -m file -a "path=/tmp/fstab state=absent"
[root@test ~]# ansible test1 -m file -a "path=/tmp/fstab state=touch"
3.4 cop模块
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。