Ansible作用及特点?

协调应用程序生命周期

  • 应用部署
  • 配置管理
  • 工作流程编排

无代理-可预测,可靠,安全

  • 无代理架构
  • 使用OpenSSH通信
  • 无代理维护成本

Ansible架构

USERS:管理员,有两种执行方式,可以通过Ansible执行管理命令批量操作远程主机,也可以通过playbook管理复杂的任务
INVENTORY:保存需要管理主机清单。包括:IP SSH端口 账号密码
API:提供调用接口
MODULES:功能模块,Ansible所有功能都是由模块提供
PLUGINS:插件,Ansible内部核心功能提供


Ansible使用要求

服务端使用要求:
Python 2.6/2.7/3.X
RedHat,Debian,CentOS等,不支持Windows

被管理端要求:
OpenSSH
Python 2.6/2.7/3.X

Ansible配置文件
vi /etc/ansible/ansible.cfg

[defaults]
# some basic default values...
#主机清单配置文件
inventory      = /etc/ansible/hosts
#library        = /usr/share/my_modules/
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp
#local_tmp      = ~/.ansible/tmp
执行任务时的并发数
forks          = 5
#poll_interval  = 15
#sudo_user      = root
#ask_sudo_pass = True
#ask_pass      = True
#transport      = smart
操作远程主机的默认端口
remote_port    = 22
#module_lang    = C
#module_set_locale = False
指纹检查
host_key_checking = False
密钥认证的私钥
private_key_file = /path/to/file

Ansible常用模块

command和shell:执行shell命令,command为默认模块(不支持管道等特殊命令)
copy和file:文件传输
yum:软件包管理
user:用户和组
git:从源代码管理系统中部署
service:管理服务
setup:收集目标主机信息


Playbook使用

Playbook使用YAML作为编排语言,适合配置管理和应用部署

YAML语法
缩进表示层级关系
不支持TAB缩进,使用空格缩进
通常开头缩进2个空格。字符后缩进一个空格,如冒号、逗号等
“---”表示YAML文件的开始,“#”表示注释
Playbook文件结构
gather_facts表示是否收集目标主机信息参数
一个name为一个动作(play)
tasks表示再Playbook中具体要做哪些工作
{{}}表示对变量的引用
notify表示在任务结束时触发
handlers表示由特定条件触发Tasks
tags表示任务控制
register表示注册变量
facts表示系统信息变量
when表示条件控制
Playbook文件调试
1.执行ansible-playbook时添加“--syntax-check”参数
2.debug: msg=
Playbook文件复用
include&import区别
include(动态):在运行时导入
不能使用notify触发来自include内处理程序名称(handlers)
“--list-tags”“--list-tasks”不会显示到输出
import(静态):在Playbook解析时预先导入
不能与循环一起使用
将变量用于目标文件或角色名称时,不能使用inventory中的变量

Roles角色

Roles目录结构

site.yml:统一入口
tasks:包含角色要执行主要任务列表
handlers:包含角色使用的处理程序
defaults:角色默认变量
vars:角色其他变量
files:角色部署时用到的文件
templates:角色部署时用到的模板
meta:角色定义的元数据