Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
安装
Pip 安装最新发布版本
pip install ansible |
管理主机的要求
- Python 2.6 及以上版本
- 主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD 的各种版本,等等.
自 2.0 版本开始,ansible 使用了更多句柄来管理它的子进程,对于 OS X 系统,你需要增加 ulimit 值才能使用 15 个以上子进程,方法 sudo launchctl limit maxfiles 1024 2048,否则你可能会看见”Too many open file”的错误提示.
托管节点的要求
- ssh
- python2.4 及以上
如果版本低于 Python 2.5 ,还需要额外安装一个模块:
python-simplejson
基本架构
组成
- 核心:ansible
- 核心模块(Core Modules):这些都是 ansible 自带的模块
- 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
- 插件(Plugins):完成模块功能的补充
- 剧本(Playbooks):ansible 的任务配置文件,将多个任务定义在剧本中,由 ansible 自动执行
- 连接插件(Connectior Plugins):ansible 基于连接插件连接到各个主机上,虽然 ansible 是使用 ssh 连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
- 主机群(Host Inventory):定义 ansible 管理的主机
架构
1、管理端支持 local 、ssh、zeromq 三种方式连接被管理端,默认使用基于 ssh 的连接---这部分对应基本架构图中的连接模块;
2、可以按应用类型等方式进行 Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为 ad-hoc;
3、管理节点可以通过 playbooks 实现多个 task 的集合实现一类功能,如 web 服务的安装部署、数据库服务器的批量备份等。playbooks 我们可以简单的理解为,系统通过组合多条 ad-hoc 操作的配置文件
Ansible 命令
ansible 是指令核心部分,其主要用于执行 ad-hoc 命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是 command 模块。
ansible <host-pattern> [options] |
host-pattern 是 Inventory 中定义的主机或主机组,可以为 ip、hostname、Inventory 中的 group 组名、具有.、*、:
等通配符字符串
options 参数
-a 'Arguments', --args='Arguments' 命令行参数 |
Inventory 与 Patterns
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置.
默认的文件路径为 /etc/ansible/hosts
文件 INI 格式配置
主机与组
[group] |
- 中括号中的名字代表组名
- 主机(hosts)部分可以使用域名、主机名、IP 地址表示;当然使用前两者时,也需要主机能反解析到相应的 IP 地址,一般此类配置中多使用 IP 地址;
- 如果某些主机的 SSH 运行在自定义的端口上,ansible 使用 Paramiko 进行 ssh 连接时,不会使用你 SSH 配置文件中列出的端口,但是如果修改 ansible 使用 openssh 进行 ssh 连接时将会使用
- 也可给某些 Host 设置别名, 或者指定范围
主机变量
[targets] |
主机常用变量
ansible_ssh_host # 要连接的主机名 |
组的变量
[atlanta] |
子组成员
[atlanta] |
其他命令
ansible-doc 命令
用于查看模块信息
ansible-doc [options] [module...] |
常用参数
列出所有已安装的模块 |
ansible-lint 命令
playbook 的语法检查工具
ansible-lint playbook.yml |
ansible-galaxy 命令
用于方便的从 https://galaxy.ansible.com/ 站点下载第三方扩展模块
# 安装模块 |
ansible-vault 命令
用于配置文件中含有敏感信息,又不希望他能被人看到,vault 可以帮你加密/解密这个配置文件
# 加密playbook |
参考: