Ansible是一个简单高效的自动化运维管理工具,用Python开发,集合了众多运维工具(puppet, chef等)的优点,可用于管理大批量机器,实现并发地在多台机器上部署应用、安装软件、执行命令、配置和编排任务。
安装
Ansible官方文档中提供了不同环境下的安装方法,这里的是Ubuntu下使用apt进行最新版本的安装,当然也可以使用源码进行安装。
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
优势
Ansible虽然很简单,但是相比其他运维工具仍然具有很多优势,比如:
- 比较轻量级,而且无需在被管理节点上安装agent,也无需在管理节点上启动服务;
- 配置简单,默认使用ssh协议对节点进行管理;
- 可将批量任务写成脚本执行,而且不用提前分发到远程节点上;
- 支持API及自定义模块,可通过Python轻松扩展
Ansible核心组件
Ansible包含如下核心组件:
1. Connection Plugins: 用于与其他主机进行通信。
2. Host Inventory: 记录了由ansible管理的主机信息,包括IP端口,登录用账号密码等等。
3. Modules(Core/Custom): 用于执行具体的任务。Ansible只作为框架,执行任务并不是由自己完成,而是由modules来完成,modules分为Core和自定义模块。
4. Playbooks: 剧本,yaml格式的文件,用于定义批量任务。
Ansible执行过程
使用样例
这里我们的机器拓扑如下,在测试之前我们需要在每一个Linux节点上启动ssh服务。
- 192.168.1.6 server0 管理节点
- 192.168.1.8 server1 被管理的linux节点
- 192.168.1.7 win1 被管理的windows节点
在管理节点192.168.1.6上面完成Ansible的安装之后,会自动创建/etc/ansible文件夹,该文件夹下的ansible.cfg为ansible配置文件,hosts为默认的inventory。
我们在hosts文件中增加server1的主机信息,如下:
[server1]
192.168.1.8
然后运行ping模块,测试机器联通性,此时需要手动输入server1的密码。这里可以使用-i选项指定特定的inventory文件,不指定则默认使用hosts文件。
$ ansible server1 -u root -k -m ping
SSH password:
192.168.1.8 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
我们也可以通过提前运行ssh-copy-id命令将server0的公钥拷贝到server1上实现免密码登录,或者在inventory中提前配置好账号密码,这样就不用每次手动输入了,配置信息如下:
[server1]
192.168.1.8 ansible_ssh_user="root" ansible_ssh_pass="admin123"
然后使用如下命令进行访问。
$ ansible server1 -m ping
192.168.1.8 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
常用模块
管理Linux节点的常用模块有:
- command, script, shell: 远程命令模块
- copy: 用于拷贝文件到目标机器
- stat: 获取远程文件状态信息
- get_url: 用于在远程主机上下载指定url到本地
- apt, yum: 执行linux平台软件包管理操作
- cron: 配置远程主机crontab任务
- file: 设置文件属性
- service: 远程主机服务管理
完整的模块列表可以参考官方文档。