ansible入门一(Ansible介绍及安装部署)
本节内容:
- 运维工具
- Ansible特性
- Ansible架构图和核心组件
- 安装Ansible
- 演示使用示例
一、运维工具
作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够熟练运用这些工具去解决一些手动重复的劳动,一方面是避免人工操作失误,另一方面也可以提高工作效率。同时还能将自己从这些重复的工作中解放出来,以便研究更新和更深的技术。
运维工具大体上可以分为3类:
- OS Provisioning:提供操作系统安装的。PXE,Cobbler(repository,distritution,profile)。
- OS Config:cfengine、puppet、saltstack、chef、func、Task Excute工具(fabric、func、saltstack)
- Deployment:capistranoc、fabric
而Ansible是一款较新的工具,可以实现OS Config、Task Excute和Deployment。
运维工具实现远程管理的两种方式:
- 有agent:puppet、saltstack、func
- agentless:ansible、fabric
二、Ansible特性
- 学习曲线平缓;
- 不需要agent;
- 没有有线状态图,没有次序,我们自己定义动作间的依赖关系就行,任何一个任务出错会很快出错,你可以立即进行修改;
- 没有代理;
- 没有服务端;
- 依赖ssh来工作,无需ssl,也就无需证书等功能;
- 模块可以使用任何编程语言来编写,包括shell脚本;
- 默认使用ssh工作;
- 支持多级的解决方案。
三、Ansible架构图和核心组件
架构图:
ansible是Python编写的,Python有一个模块叫paramiko,paramiko组件能够实现并行地基于ssh协议远程连接至各主机的库。ansible就是用了paramiko。
核心组件:
- ansible core:ansible核心。
- host inventory:主机池,或叫主机列表,主机归档文件。
- core modules:ansible核心模块。
- custom modules:用户可以自定义模块
- playbook:将多个任务写在一个yaml格式的配置文件中。支持使用Python的jinjia2来定义模板。同一个playbook应用带同一台主机上,无论你应用多少次,他们的结果都是相等的,不会重复执行。这种特性我们称为幂等性。
- connect plugins:连接插件
- plugins:其他的一些插件,比如email、logging等等。
四、安装Ansible
可以选择源码编译安装或者yum安装。ansible的rpm包在epel源中,事先安装好epel源。我这里实验环境是CentOS 7。
安装:
# yum install ansible -y
查看安装的rpm包里有哪些文件:
# rpm -ql ansible | more
ansible配置文件:/etc/ansible/ansible.cfg
inventory文件:/etc/ansible/hosts
五、演示使用示例
1.环境信息
主机名 | 操作系统版本 | IP地址 | 安装软件 |
node1 | CentOS 7.0 | 172.16.7.151 | ansible-noarh-2.2.0.0-4.el7 |
node2 | CentOS 7.0 | 172.16.7.152 | 无 |
node3 | CentOS 7.0 | 172.16.7.153 | 无 |
2.配置Ansible主机登录其他主机使用密钥登录
由于Ansible默认使用ssh管理主机,所以首先需要配置Ansible所在主机登录其他被管理主机不需要输入密码。在node1主机上执行如下命令:
[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.7.151
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.7.152
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.7.153
3.定义主机
每一个主机可以使用主机名,也可以使用ip地址。也可以把多个主机定义到一个组里。比如:
[root@node1 ~]# vim /etc/ansible/hosts
4.使用模块
Ansible是依赖模块进行工作的,里面有大量的模块帮助我们去完成任务。比如使用command模块:
[root@node1 ~]# ansible 172.16.7.152 -m command -a "date"
如上,在执行任务时,可以指定IP,也可以指定组名,ansible有个默认的组叫all,代表/etc/ansible/hosts文件里的所有主机。
列出当前主机可以使用的ansible模块:
[root@node1 ~]# ansible-doc -l
常用的模块有:user、yum、copy、command等。如果想知道某个模块怎么使用的,比如想知道yum怎么用:
[root@node1 ~]# ansible-doc -s yum
最新文章
- iReport 开发和运行所用版本不一致导致设置字体大小不起作用
- SOCKet 编程 简介
- [python]WindowsError的错误代码详解
- block与函数指针有什么区别
- Spring小结
- Parallel WebDriver executions using TestNG
- pyqt一个小例子
- 十大算法 pagerank 傅里叶变换
- Listener与Filter
- java多线程创建-Thread,Runnable,callable和threadpool
- CentOS 7.x上gitlab搭建教程(https可用,邮件可用)
- webpack学习笔记——项目引入zepto及tap事件失效的解决
- docker 容器跑一个应用
- WEB实现单元格合并
- 现在有两个变量,分别是a = 3, b = 4,那么我们不用第三个变量来调换a和b的值。
- 移动web、webApp、混合APP、原生APP、androd H5混合开发 当无网络下,android怎么加载H5界面
- C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)
- C#中使用 SendMessage 向非顶端窗体发送组合键
- vue-9-动画
- 如何杀死oracle死锁进程
热门文章
- 持续(集成-->;交付-->;部署)
- spoj1811 LCS - Longest Common Substring
- CodeForces - 662C Binary Table (FWT)
- windows下Qt5.4.2 for android开发环境配置
- iOS开发之JSONKit
- Python笔记 #02# Inner workings of lists
- PHP秒杀系统全方位设计分析(二)
- addEventListener、onclick和jquery的bind()、click()
- 20145329 《Java程序设计》第七周学习总结
- zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件