特性

  • 模块化:调用指定的模块,完成指定的任务
  • 幂等性:执行一次和执行N次的结果一样,不会因为重复执行带来意外的情况
  • 有Paramiko,PyYAML,Jinja2 三个关键模块
  • 基于Python语言实现
  • 部署简单,Python和SSH(默认已安装),agentless
  • 安全,基于OpenSSH
  • 支持Playbook编排任务
  • 不需要代理,不依赖PKI(无需SSL)
  • 支持自定义模块,可使用多种编程语言写模块

工作原理

用户通过Ansible去管理各个主机,那么Ansible就是主控端,被控制的机器为被控端

  1. 被控端如何定义?

由Ansible 的Host inventory(主机清单)记录,告诉Ansible可以控制哪些机器

  1. 如何管理被控端?
    • 单一的命令实现
    • 使用Playbook实现

单一的命令模式是直接采用不同的模块进行管理,适用于一些临时性的任务,例如测试主控端与被控端之间连通性的”ping”模块
例行性和经常性的操作,就应该使用Playbook,Playbook类似于将命令写入脚本中,将多个模块按一定的逻辑关系进行排列组合

主要组成部分

  • Inventory:管理主机的清单,/etc/ansible/hosts
  • Modules:执行命令的功能模块
  • Plugins:模块功能的补充
  • API:第三方程序调用的接口
  • Ansible:整合前面部分的整体,Ansible的命令工具,是核心执行工具
  • Ansible Playbook:任务剧本,编排定义Ansible任务集的配置文件,由Ansible顺序执行,Yaml文件