久闻ansible大名,今天终于有机会来试用一番…
ansible简介
ansible是一款基于python开发的开源软件,它实现了软件依赖,配置管理和程序部署的自动化.ansible的最大特点是无客户端,它通过SSH,远程PowerShell或其他远程API与其他节点交互
ansible安装
ansible是工具类应用程序,不需要添加一个数据库,也没有一个守护进程
节点要求
控制节点要求:Python2.6+ or 3.5+,类UNIX系统(不支持Windows)
被管理节点要求:ssh(默认使用sftp,如果不可用可切换至scp),同样需要Python
安装方式
ansible可以使用包管理器安装,pip安装,以及源码安装
ansible已被主流Linux发行版收录,因此基本上可以使用各自的包管理器安装
Centos:
]# yum install -y ansible
ansible组件
ansible包含有多个组件.如inventory,ad-hoc command,playbook等等
inventory(仓库)
inventory存放了ansible管理主机的清单.更准确的说,inventory定义了所有被管理节点的连接方式.如连接ip,连接端口,主机名,ssh用户名和密码,python解释器路径等等都可以在这里定义
inventory默认存放在/etc/ansible/hosts
文件中.也可以通过在命令中添加-i <path>
参数选择不同的inventory文件
hosts文件示例:
1 | mail.example.com |
hosts文件除了默认的ini格式外,也可以使用yaml,json格式
hosts中有一个默认的主机组all
,用于匹配所有主机
Ad-Hoc Commands(临时命令)
ad-hoc命令指那些一次性执行的命令.如果需要执行速度快的,单行的指令的话,那么就应该使用ad-hoc命令了
ad-hoc命令示例
ping命令:
1 | [root@host1 ~]# ansible all -m ping |
这是ad-hoc最常用的ping命令,其中:
- 使用的主机组为all,即默认的所有主机
- 使用了ping模块
发送shell命令:
1 | [root@host1 ansible]# ansible hosts -a 'echo hello' -f 2 |
- 在hosts主机组运行
echo hello
命令 - 使用两个并行fork
除这些以外,通过ansible的各种模块,ad-hoc命令可以实现文件传输,包管理,用户名用户组管理,源代码部署,服务管理等丰富的操作
playbook(剧本)
playbook是ansible的配置,部署和服务编排语言.它定义了ansible连接至被管理节点后需要做的任务
与ad-hoc命令相对,playbook是一组预定义的操作
the true power of Ansible lies in playbooks
,playbook是ansible的核心组件
基础层面上,playbook可以用于管理远程机器的配置与部署.在更高的层面,它可以序列化滚动更新的多重部署
playbook示例
playbook使用YAML格式表达.下面是有两个剧本的playbook:
1 |
|
基础
- hosts:一个或多个主机组.组间使用冒号分隔,这是一种通配符,具体参见官网文档https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
- remote_user USER:远程用户的名称,也可在每个task中定义
- become yes|no:须事先定义remote_user,表示使用提权(默认sudo)
任务列表
每个剧本都包含一个任务列表.任务同一时间按顺序执行,如果有节点执行失败,那么它将从整个playbook中移除
每个任务的目标都是使用指定的参数,变量去执行一个模块.模块应具备幂等性,如果一个playbook中所有的模块都具备幂等性,那么这个playbook就可以说是幂等的
name: DESCRIBE:用于描述此任务
module: options:选择使用的模块,以及参数.其中module可以是service,command,shell,copy,template等等
ignore_errors: True|False:是否忽略错误
notify:列表形式,包含一组命令,当做任务完成后的触发器
执行playbook
可以使用简单的指令去执行playbook:
]# ansible-playbook playbook.yml -f 10
小结
不得不说ansible是一个很强大的工具…以往复杂繁琐的运维流程基本上都可以通过ansible来简化
这篇是我对ansible的粗浅了解,以后如果有需要ansible工作的话,我会进一步的深入它