什么是 Ansible
Ansible 是基于 python 的配置管理和应用部署工具。官方给的 title是 “Ansible is Simple IT Automation” —简单的自动化IT工具。
架构图
工作原理
- 管理端支持 local、 ssh、zeromq 三种方式连接被控端,默认使用 ssh
- 可以按照一定规则进行 inventory,管理节点通过模块实现对应操作–ad-hoc
- 管理节点可以通过 playbook 实现对多个 task 的集合实现一类功能
安装 Ansible
- 源码安装
源码安装需要 python2.6 以上版本,依赖 paramiko, PyYAML, Jinja2, simplejsion、 pycrypto模块,可以通过 pip 来安装
- 常用 Linux 发行版
|
|
- 通过 pip 安装最新版
Ansible 可以通过pip
安装,同时也会安装 paramiko、PyYAML、jinja2 等 Python 依赖库。
|
|
运行 Ansible
添加被控远程主机清单
已经安装好了 Ansible ,先在就可以运行 Ansible 了。 首先要在 /etc/ansible/hosts
文件中加入一个或者多个远程 ip 或者 domain。
|
|
配置基于 SSH key 方式 连接
|
|
运行 Ansible
|
|
配置 inventory
Ansible 可以同时操纵属于一个组的多台主机,主机和组的关系是通过 inventory 文件来配置即/etc/ansible/hosts
。
inventory可以通过 IP、Domain 来指定,未分组的机器要保留在 host 文件顶部,通过[]
来配置分组信息。
主机与组
|
|
变量
|
|
分文件定义 Host 和 group 变量
在 inventory 文件中保存的所有变量并不是最佳方式,还可以保存在独立的文件中, 这些文件与 inventory 关联,要求使用 YAML
语法。host 和 gourp 变量 要求存储在与 host 和 group 相同的目录名中
还可以在组变量目录下创建多个文件,设置不同类型的变量
inventory 参数说明
|
|
Patterns
在 ansible 中, patterns 是指如何确定有那些主机或组被管理,在 playbook 中,它是指对应主机应用特定的配置或执行特定进程。
ansible
|
|
简单的说, pattern 是一个主机筛选器,支持正则匹配。
|
|
playbook
在 playbook 中,通过使用 -e
参数可以实现通过变量来确定 group
|
|
简单执行命令
|
|
可用该命令选项:
- -i:指定 inventory 文件,使用当前目录下的 hosts
- all:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式
- -m:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器
- -u:指定远端机器的用户
|
|
Ad-Hoc
执行 Ad-Hoc 跟在 Linux 执行命令差不多, 用来快速完成简单的任务。
语法
|
|
实例
- 执行安装程序, 安装
python-simplejson
|
|
- 重启 web 服务
假如 web_server 是一个组, 这里组里面有很多webserver,先在需要在 web_server 组上的左右机器执行 reboot 命令, -f 参数会 fork 出 10 个子进程,以并行的方式执行 reboot,即每次重启 10 台
|
|
在执行时,默认是以当前用户身份去执行该命令,如果需要执行执行用户,添加 -u username
,或者需要使用 sudo 去执行,添加 -u username --sudo [--ask-sudo-pass]
。如果不是以 passwordless 的模式执行 sudo,应加上 –ask-sudo-pass (-K)选项,加上之后会提示你输入 密码.使用 passwordless 模式的 sudo, 更容易实现自动化,但不要求一定要使用 passwordless sudo.
- 文件传输
ansible 的另外一种用法就是可以以并行的方式同时 scp 大量的文件到多台主机。
|
|
如果是用 playbook,择可以利用 template 模块来实现更高级操作。
使用 file 模块 可以修改文件的属主和权限
使用 file 模块还可以创建、删除目录和文件
更多详见copy模块说明
- 包管理
ansible 提供了对 yum 和 apt 的支持
在不同的发行版的软件包管理软件, ansible 有其对应的模块, 如果没有,你可以使用 command 模块去安装软件。
更多详见package模块说明
- 用户和组管理
|
|
更多参数详见user模块说明
- 服务管理
|
|
- 系统自身变量获取
ansible 可以通过 setup 模块来获取客户端自身的以便固有信息,叫做 facts