一、简介
Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)。主版本大概每2个月发布一次。
Ansible与Saltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置:相同点是都具备功能强大、灵活的系统管理、状态配置,两者都提供丰富的模板及API,对云计算平台、大数据都有很好的支持。
二、特点
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
默认使用SSH协议对设备进行管理;
主从集中化管理;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
对云计算平台、大数据都有很好的支持;
提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
幂等性:一种操作重复多次结果相同
三、Ansible架构图
Ansible核心组件说明:
Ansible:Ansible的核心程序
Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
Connection Plugins:连接插件,Ansible和Host通信使用
ansible得配置文件:
vim /etc/ansible/ansible.cfg
修改:host_key_checking = False
设置成默认不需要SSH协议的指纹验证
同时存在多个Ansible服务主配置文件时,具体优先级顺序:
主机清单:
/etc/ansible/hosts
插件目录:
/usr/share/ansible_plugins/
1.ansible命令的使用说明
常用选项
ansible -m MOD_NAME -a MOD_ARGS
表示调用什么模块,使用模块的那些参数
ansible中得ansible-doc得用法:
一般用法:
ansible-doc -l 获取模块信息
ansible-doc -s MOD_NAME 获取指定模块的使用帮助
四、ansible使用 之一 “命令管理方式”
command:在远程主机执行命令;不支持|管道命令
ping:探测目标主机是否存活;
shell:在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 ;
注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”格式;
copy:复制文件到远程主机,可以改权限等
例:
ansible huimin99 -m copy -a 'src=/root/5.txt dest=/tmp/test mode=640'
ansible huimin99 -m copy -a "content='hello world' dest=/tmp/test mode=640"
cpoy得相关选项:
file设置文件属性:
可以用ansible-doc -s file 查看用法参数
用法:
1)创建目录
-a "path=... state=directory"
ansible huimin99 -m file -a "path=/tmp/www state=directory"
2)创建链接文件
-a "src=.... dest= state=link"
ansible huimin99 -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
3)删除文件
-a "path=.... state=absent"
ansible huimin99 -m file -a "path=/opt/test state=absent"
如果文件不存在可以远程创建
ansible 192.168.174.132 -m file -a "path=/tmp/test state=touch"
cron模块:管理cron计划任务
ansible huimin99 -m cron -a "name='sync time' job='/usr/sbin/ntpdate time.windows.com' minute=*/3"
yum模块:yum安装软件
ansible 192.168.174.133 -m yum -a "name=gcc state=present"
service: 服务程序管理
ansible huimin99 -m service -a "name=httpd enabled=true"
stat:获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid等信息
ansible huimin99 -m stat -a "path=/etc/sysctl.conf"
get_url:实现在远程主机下载指定url到本地,支持sha256sum文件校验
ansible huimin99 -m get_url -a "url=http://www.baidu.com dest=/opt/ mode=0440 force= yes"