本节内容:

  • 运维工具
  • 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。

运维工具实现远程管理的两种方式:

  1. 有agent:puppet、saltstack、func
  2. 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

最新文章

  1. 字节、字、bit、byte的关系
  2. java script 基础知识
  3. 安装使用Oracle OSWbb/OSWbba工具
  4. templatecolumn checkcolumn
  5. HTML -- 元素和属性
  6. git bash中避免在push时反复输入用户名和密码
  7. 快速使用shortcut,适配各种ROM
  8. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
  9. JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)
  10. CodeForces992E 二分 + 树状数组(线段树)
  11. easyui合并多个单元格
  12. 第一次使用zxxbox弹层经历
  13. Servlet的多线程和线程安全
  14. Nginx初探
  15. C++解析(26):函数模板与类模板
  16. mongodb rebo 3T 执行出错 failed to execute script 但是执行成功 171条
  17. 欧拉函数 and 大数欧拉 (初步)
  18. 一步一步使用webpack+react+scss脚手架重构项目
  19. (转载)git常用命令
  20. 仿联想商城laravel实战---4、验证(lavarel的表单验证如何使用)

热门文章

  1. 【题解】打地鼠 SDOI2011 模拟 行列无关
  2. Kubernetes 1.5集成heapster
  3. Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计
  4. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新
  5. 动态规划:树形DP-景点中心(树的带权重心)
  6. angular4 get,post请求(带参数,与不带参数)
  7. 基本控件文档-UIScrollView
  8. 【leetcode 简单】 第八十一题 4的幂
  9. G - Pandaland HDU - 6005 (找最小环)
  10. Java编程思想 4th 第3章 操作符