Ansible学习笔记--Ansible安装及使用方法
2017-10-22 21:03
507 查看
Ansible是一个简单高效的自动化运维管理工具,用Python开发,集合了众多运维工具(puppet, chef等)的优点,可用于管理大批量机器,实现并发地在多台机器上部署应用、安装软件、执行命令、配置和编排任务。
- 比较轻量级,而且无需在被管理节点上安装agent,也无需在管理节点上启动服务;
- 配置简单,默认使用ssh协议对节点进行管理;
- 可将批量任务写成脚本执行,而且不用提前分发到远程节点上;
- 支持API及自定义模块,可通过Python轻松扩展
![](https://i.imgur.com/mEbJdzF.jpg)
Ansible包含如下核心组件:
1. Connection Plugins: 用于与其他主机进行通信。
2. Host Inventory: 记录了由ansible管理的主机信息,包括IP端口,登录用账号密码等等。
3. Modules(Core/Custom): 用于执行具体的任务。Ansible只作为框架,执行任务并不是由自己完成,而是由modules来完成,modules分为Core和自定义模块。
4. Playbooks: 剧本,yaml格式的文件,用于定义批量任务。
![](https://i.imgur.com/iQ4RkVt.png)
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的主机信息,如下:
然后运行ping模块,测试机器联通性,此时需要手动输入server1的密码。这里可以使用-i选项指定特定的inventory文件,不指定则默认使用hosts文件。
我们也可以通过提前运行ssh-copy-id命令将server0的公钥拷贝到server1上实现免密码登录,或者在inventory中提前配置好账号密码,这样就不用每次手动输入了,配置信息如下:
然后使用如下命令进行访问。
- command, script, shell: 远程命令模块
- copy: 用于拷贝文件到目标机器
- stat: 获取远程文件状态信息
- get_url: 用于在远程主机上下载指定url到本地
- apt, yum: 执行linux平台软件包管理操作
- cron: 配置远程主机crontab任务
- file: 设置文件属性
- service: 远程主机服务管理
完整的模块列表可以参考官方文档。
安装
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核心组件
![](https://i.imgur.com/mEbJdzF.jpg)
Ansible包含如下核心组件:
1. Connection Plugins: 用于与其他主机进行通信。
2. Host Inventory: 记录了由ansible管理的主机信息,包括IP端口,登录用账号密码等等。
3. Modules(Core/Custom): 用于执行具体的任务。Ansible只作为框架,执行任务并不是由自己完成,而是由modules来完成,modules分为Core和自定义模块。
4. Playbooks: 剧本,yaml格式的文件,用于定义批量任务。
Ansible执行过程
![](https://i.imgur.com/iQ4RkVt.png)
使用样例
这里我们的机器拓扑如下,在测试之前我们需要在每一个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: 远程主机服务管理
完整的模块列表可以参考官方文档。
相关文章推荐
- Vue学习笔记进阶篇之vue-router安装及使用方法
- [ASP.NET学习笔记之四]数据集的使用方法和技巧
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- 【原创】Asp.net MVC 学习笔记之-为什么使用Html.TextBox方法会出现异常?
- [学习笔记]java web ServletContext.getRealPath(String str)方法的使用
- MINIGUI学习笔记之安装使用
- Mars Android视频学习笔记——01_16_SQLite使用方法
- selenium学习笔记- selnium.RunScript(string script) 方法的使用 及有关自动化测试文本编辑器未解决的问题
- 学习笔记: Struts2中使用validate框架对Action的不同方法进行验证
- [ADO学习笔记] Recordset 对象中的updateBatch函数的使用方法
- Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- APIDemo学习笔记——Android上几种简单的Animation使用方法(二)
- FreeBSD学习笔记12-pureftpd使用详解(1)-安装、配置、实现匿名登录
- MySQL安装笔记和一些使用方法
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- APIDemo学习笔记——Android上几种简单的Animation使用方法(三)——3D Transition
- C++/GDI+ 学习笔记(一)——安装、配置&使用