Linux 运维工具---Ansible
转载: http://blog.51cto.com/1992tao/1871264
Ansible
=============================================================================
概述:
本章我们将介绍Linux工具中的Ansible,具体内容如下:
-
ansible工具的介绍
·架构,特性,优点和任务执行流程;
-
ansible的安装配置及基础使用;
-
ansible的常用模块详解;
-
yaml格式说明及ansibe-playbook的定义和使用;
==============================================================================
Ansible介绍
★运维工具的分类:
gent:基于专用的agent程序完成管理功能,puppet, func, zabbix, ...
agentless:基于ssh服务完成管理,ansible, fabric, ...
★ansible属于Configuration、Command and Control工具
☉简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
☉架构
连接插件(connection plugins):负责和被监控端实现通信;
host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
各种模块核心模块、command模块、自定义模块;
借助于插件完成记录日志邮件等功能;
playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
附图:
架构图
☉特性:
模块化:调用特定的模块,完成特定的任务;
基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实现;
部署简单:agentless;
支持自定义模块,使用任意编程语言;
强大的playbook机制;
幂等性;
☉优点
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
使用python编写,维护更简单,ruby语法过于复杂;
支持sudo。
☉任务执行流程
说明:
以上内容大多是基于他人分享的基础上总结而来,学习借鉴之用;
本次安装基于 CentOS 7.2 系统环境。
Ansible安装配置及使用
1.安装及程序环境:
★安装:
# yum install ansible -y (epel仓库中)
★程序:
ansible
ansible-playbook //唱剧本
ansible-doc //获取帮助文档
★配置文件
/etc/ansible/ansible.cfg //核心配置文件
★主机清单:
/etc/ansible/hosts
★插件目录:
/usr/share/ansible_plugins/
2.基本使用入门
★ansible命令
☉语法格式(Usage):
ansible <host-pattern> [options]
☉选项:
-m MOD_NAME(指明调用的模块名称)
-a MOD_ARGS(指明调用模块的参数)
★配置Host Inventory(主机清单)
☉文件路径:
/etc/ansible/hosts
☉格式:
★模块:
获取模块列表:ansible-doc -l
获取指定模块的使用帮助:ansible-doc -s MOD_NAME
实验:
1.演示环境(以下所有命令演示和实验的环境)
-
准备四台虚拟主机,这里我有3台CentOS 7和1台CentOS 6;
-
ip为10.1.252.153的CentOS 7主机模拟ansible的管理端,其余的CentOS 7和6模拟为被管理端;
演示过程如下:
1.首先进到/etc/ansible的配置文件中,做备份,然后配置主机清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
2.获取模块列表和使用帮助
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3.配置好基于秘钥认证连接被管控主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
4.把生成的**对传给其他被管控端(比较安全的做法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Ansible常用模块详解
★ping:
作用:探测目标主机是否存活;
演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
★command:
作用:在远程主机执行命令;
演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
★shell:
☉作用:
在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 ;
注意:
command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”格式;
演示:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
★copy:
☉作用:
复制ansible主机上的文件到远程控制主机;
☉用法:
演示:
1.复制源文件到目标文件,可以给定权限等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
2.给定内容生成文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
★file:
☉作用:设置文件属性;
☉用法:
演示:
1)修改文件属主
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2)删除文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
3)创建目录文件
1 2 3 4 5 6 7 8 9 10 11 12 |
|
4)创建链接文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
★fetch
作用:从远程主机拉取文件到本地 (同scp命令)
★cron
☉作用:管理crontab周期性任务
☉可用参数
演示:
1)管理远程主机创建计划任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
2)删除周期性计划任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
★hostname
☉作用:设定主机名
☉必给参数:name=
演示:
1 2 3 4 5 6 7 8 9 10 11 |
|
★yum
☉作用:yum包管理器,完成程序包管理
☉常用选项
注意:
安装的前提是个远程节点要配置好yum仓库。
演示:
1 2 3 4 5 6 7 8 9 10 11 |
|
★service:
☉作用:控制服务是启动、停止、开机自启等
☉参数:
演示:
1 2 3 4 5 6 7 8 9 10 |
|
★group
☉作用:添加或者删除组
☉参数:
★user:
☉作用:管理用户账户;
☉参数:
★setup
☉作用:搜集远程主机各设置信息,包括CPU等
演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
YAML及PlayBook:
1.YAML
★YAML是一种数据序列化的语言格式;
★数据结构:
☉键值对:
key:value
☉列表:
- item1
- item2
- item3
☉字典:
{name:jreey,age:21}
2.PlayBook:
★核心元素:
Tasks:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色;
★playbook的基础组件:
☉Hosts:运行指定任务的目标主机;
☉remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
☉tasks:任务列表
◆组成:模块,模块参数:
◆格式:
action: module arguments
module: arguments
★运行playbook,使用ansible-playbook命令
☉检测语法
ansible-playbook --syntax-check /path/to/playbook.yaml
☉测试运行
ansible-playbook -C /path/to/playbook.yaml
--list-hosts //列出影响的远程主机
--list-tasks //列出任务列表
--list-tags //列出任务的标签
☉运行
ansible-playbook /path/to/playbook.yaml
◆选项:
-t TAGS, --tags=TAGS //只运行标记的任务
--skip-tags=SKIP_TAGS //跳过指定标签标记的任务
--start-at-task=START_AT //从某个任务开始向后运行
演示:
1.首先定义yaml格式的列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
2.检测语法,测试运行playbook,没问题后运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|