Ansible简介
Ansible是什么?
Ansible 简单的说是一个配置管理
系统(ConfiGuration Management System)。你只需要可以使用ssh
访问你的服务器或设备。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上!
Ansible能做什么?
ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。
比如:将某个文件一次性拷贝到100台服务器上。
比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。
这些场景中我们都可以使用到ansible。
Ansible 与 SaltStack的区别:
最大的区别是 Ansible 无需在被监控主机部署任何客户端代理,默认通过 SSH 通道进行远程命令执行或下发配置。
相同点是都具备功能强大、灵活的系统管理、状态配置,都使用 YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。
Ansible特性
ansible软件服务端(管理端):不需要启动任何服务 默认服务端不需要任何的配置
ansible软件客户端(受控端):没有客户端软件安装
1、模块化:调用特定的模块,完成特定任务
2、有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
3、支持自定义模块
4、基于Python语言实现
5、部署简单,基于python和SSH(默认已安装),agentless
6、安全,基于OpenSSH
7、支持playbook编排任务
8、幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
9、无需代理不依赖PKI(无需ssl)
10、可使用任何编程语言写模块
11、YAML格式,编排任务,支持丰富的数据结构
12、较强大的多层解决方案
Ansible架构
- 连接插件connectior plugins用于连接主机 用来连接被管理端
- 核心模块 core modules 连接主机实现操作, 它依赖于具体的模块来做具体的事情
- 自定义模块 custom modules,根据自己的需求编写具体的模块
- 插件 plugins,完成模块功能的补充
- 剧本 playbooks,ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
- 主机清单 inventor,定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
Ansible与其它服务器的关系:
Ansible功能详解
/etc/ansible/ansible.cfg
主配置文件,配置ansible工作特性
/etc/ansible/hosts
主机清单
/etc/ansible/roles/
存放角色的目录
/usr/bin/ansible
主程序,临时命令执行工具
/usr/bin/ansible-doc
查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy
下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook
定制自动化任务,编排剧本工具
/usr/bin/ansible-pull
远程执行命令的工具
/usr/bin/ansible-vault
文件加密工具
/usr/bin/ansible-console
基于Console界面与用户交互的执行工具
Ansible命令参数
ansible | sa | -m | command | -a | "hostname" |
---|---|---|---|---|---|
指令 | 主机组模块名 | 指定模块参数 | 模块名称 | 指定利用模块执行的动作参数 | 批量执行操作动作 |
--version 显示版本
-a 模块参数(如果有)
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写--list
-k, --ask-pass 提示连接密码,默认Key验证
-K,--ask-become-pass 提示使用sudo密码
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-U, SUDO_USER, --sudo-user 指定sudu用户
-b, --become 代替旧版的sudo 切换
ansible-doc: 显示模块帮助
ansible-doc [options] [module...]
-a 显示所有模块的文档
-l, --list 列出可用模块
-s, --snippet 显示指定模块的简要说明