运维自动化工具之Ansible
Posted 纵享山河万里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维自动化工具之Ansible相关的知识,希望对你有一定的参考价值。
一.简介
1.什么是ansible?
ansible的官方标题为:"Ansible is Simple IT Automation",也就是说ansible是一种简单的自动化IT工具.
工具目标:1.自动化部署APP 2.自动化管理配置项 3.自动化的持续交付 4.自动化的云服务管理
2.ansible特性
模块化:调用特定的模块,完成特定的任务
Paramiko (Python对ssh的实现),PyYaml,Jinja2(模板语言)三个关键模块
支持自定义模块,可使用任何编程语言写模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖
KPI(无需SSL) 安全,
基于OpenSSH 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案role
二.安装
1. 方法一(推荐):yum安装 :
yum -y install epel-release
yum install ansible -y
2. 方法二:编译安装:
yum -y install python-jinja2 PyYAML python-paramiko python-babel
python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
还有git方法安装和pip安装,在这里我就不赘述了,上述两种办法安装即可,更推荐使用yum安装.
ansible --version:结果如下图所示即为成功
三.相关文件
/etc/ansible/ansible.cfg 主配置文件
/etc/ansible/hosts 主机清单
/etc/ansible/roles 存放角色的目录
前两个比较重要,需要着重记忆.
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载或者上传优秀代码
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-consolr 基于console界面与用户交互的执行工具
四.配置
1. /etc/ansible/host文件的详解:文件遵循INI文件风格,中括号中的字符为组名。 可以将同一个主机同时归并到多个不同的组中, 此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明.需要用哪个组就往哪个组加.
如图所示我只在webservers上添加了两台服务器.
2./etc/ansible/ansible.cfg
我这里是将最下面三行的注释取消掉了.
五.相关命令详解
1.ping模块:探测网络中被管理主机是否能够真常使用,走ssh协议,如果对方主机网络正常则返回pong.有两种书写方法,第一种是要输入密码的,第二种是免密登录:
免密登录需要提前实现key验证,具体操作如下:
ssh-copy-id root@192.168.204.138
注意:这里的IP地址为需要执行免密登录服务器的IP地址!!!!!!!
另外补充一条:ansible all --list 列出所有主机
2.setup模块:主要用于获取主机信息
(第一个箭头所指为主机组,第二个箭头所指为模块名.第三个箭头所指的为网卡名称)
3.file模块:主要用于远程主机上的文件操作
group:定义文件或目录的属组
mode:定义文件或目录的权限
owner:定义文件或目录的属主
path:必选项,定义文件或者目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径
dest:要被链接到的路径
state: directory:如果目录不存在,创建目录
link:创建软连接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新文件,如果文件已存在,则更新其最后修改时间
absent:删除目录,文件或者取消链接文件
例:将目录下的hello.txt文件从root目录下软连接到/tmp目录下
ansible webservers -m file -a "src=/root/hello.txt dest=/tmp/hello.txt state=link"
如上命令就用到了前面所说的参数,用法十分明显
(使用shell模块我们可以看到文件已经变为软连接了,后面会为大家讲到shell模块)
4.copy模块:复制文件到远程主机
backup:在覆盖之前将原文件备份,有两个选项 yes| no
剩下的参数和file模块的差不多,在这里我就不一一赘述了.
例:将本机的file.txt文件传输到远程主机的/tmp目录下:
ansible webservers -m copy -a "src=/root/file.txt dest=/tmp/"
我们计数复制文件时加/和不加/是有区别的
例:ansible webservers -m copy -a "src=/tmp dest=/"
这个的意思是将/tmp目录及目录下文件复制到/目录下
:ansible webservers -m copy -a "src=/tmp/ dest=/"
这个的意思是将/tmp目录下文件复制到/目录下,二者是不一样的
5.yum模块:使用yum包管理器来管理软件包
config_file:yum的配置文件
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态
present:安装
absent:删除
latest:安装最新的
例:安装最新版的tree
ansible webservers -m yum -a "name=tree state=latest"
6.cron模块:添加、删除、更新操作系统的定时任务
name:任务计划名称
cron_file:替换客户端该用户的任务计划的文件
minute:分(0-59, * ,*/2)
hour:时(0-23, * ,*/2)
day:日(1-31, * ,*/2)
month:月(1-12, * , */2)
weekday:周(0-6或1-7, *)
job:任何计划执行的命令
backup:是否备份之前的任务计划
user:新建任务计划的用户
state:指定任务计划present、absent
例:
ansible webservers -m cron -a "minute=*/2 day=2 name=touchfile job='touch /tmp/xiaoqiang.txt'"
意思为每个月2号每隔两分钟在/tmp/创建一个xiaoqiang.txt的文件
7.service模块:实现远程管理服务的生命周期
enabled #开机启动 yes|no
name #服务名称,必选项
runlevel #运行级别
state: started开启 stopped停止 restarted重启
例:
ansible webservers -m service -a "name=httpd state=started"
启动apache服务
ansible webservers -m service -a "name=keepalived enabled=yes"
将keepalived设置为开启自启
8.user模块:创建用户
group 属组
groups 附加组
home 设置家目录
name 用户名
remove 删除用户并删除用户的家目录
shell 用户登录后的
shell system 系统用户
uid 用户的id
state 创建或删除
shell 制定用户shell环境
例:
ansible webservers -m user -a "name=alex home=/opt/alex uid=3000 group=root“
意为创建一个名为alex的用户并指定家目录为/opt/alex uid=3000 属组为root
9.command模块:通过-a直接执行命令
creates:一个文件名,当该文件存在,则该命令不执行
chdir:在执行指令之前,先切换到该指定目录
removes:删除一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行命令.执行路径必须为一个绝对路径
例:
ansible webservers -a "ls"
10.shell模块:用法和command一样,不过shell模块可以执行任何命令,就像在本机执行一样.
ansible webservers -m shell -a "ls -l | grep -E .*.txt"
过滤/root/目录下所有以.txt结尾的文件
ansble的基础常见模块大概就这么多,整理不易,希望对大家的学习有所帮助,后续还会继续更新ansible-playbook的具体内容.
以上是关于运维自动化工具之Ansible的主要内容,如果未能解决你的问题,请参考以下文章