Ansible

1, Ansible 发展史

1.1 Ansible

  • 创始人,Michael DeHaan(Cobbler 与 Func 的作者)
  • 2012-03-09,发布 0.0.1 版,红帽收购
  • 2015-10-17,Red Hat 宣布收购

1.2 同类自动化工具 GitHub 关注程度(2016-07-10)

2,Ansible 特性

  • 模块化:调用特定的模块,完成特定任务
  • 有 Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块
  • 基于 Python 语言实现
  • 部署简单,局域 Python 和 SSH (默认已安装),agentless
  • 安全,基于 OpenSSH
  • 支持 Playbook 编排任务
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来以外情况
  • 无需代理不依赖PKI(无需ssl)
  • 可使用任何编程语言写模块
  • YAML 格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案

3,ansible 架构

4,Ansible 工作原理

5,Ansible 主要组成部分

  • ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义 Ansible 任务集的配置文件,有 Ansible 顺序依次执行,通常是 JSON 格式的 YML 文件
  • INVEVTORY:Ansible 管理主机的清单 /etc/ansible/hosts
  • MODULES:Ansible 执行命令的功能模块,多数为内置核心模块,也可自定义
  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
  • API:供第三方程序调用的程序编程接口
  • ANSIBLE:组合 INVENTORY、API、MODULES、PLUGINS 的绿框,可以理解为 ansible 命令工具,气味核心执行工具

5.1 Ansible 命令执行来源:

  • USER,普通用户,即 SYSTEM ADMINISTRATOR
  • CMDB(配置管理数据库)API调用
  • PUBLIC/PRIVATE CLOUD API 调用
  • USER -> Ansible Playbook -> Ansible

5.2 利用 ansible 实现管理的方式

  • Ad-Hoc 即 ansible 命令,主要用于临时命令使用场景
  • Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有提前的规划

5.3 Ansible-playbook (剧本)执行过程

  • 将已有编排好的任务集写入 Ansible-Playbook
  • 通过ansible-playbook 命令分拆任务集逐条 ansible 命令,按预定规则逐条执行

5.4 Ansible 主要操作对象:

  • HOSTS 主机
  • NETWORKING 网络设备

5.5 注意事项

  • 执行 ansible 的主机一般称为主控端,中控,master 或堡垒机
  • 主控端 Python 版本需要 2.6 及以上
  • 被控端 Python 版本小于 2.4 需要安装 Python-simplejson
  • 被控端如开启 SELinux 需要安装 libselinux-python
  • windows 不能做为主控端

6,安装

  • yum 安装信息
# yum info ansible
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Packages
Name        : ansible
Arch        : noarch
Version     : 2.7.7
Release     : 1.el7
Size        : 60 M
Repo        : installed
From repo   : epel
Summary     : SSH-based configuration management, deployment, and task execution system
URL         : http://ansible.com
License     : GPLv3+
Description : Ansible is a radically simple model-driven configuration management,
            : multi-node deployment, and remote task execution system. Ansible works
            : over SSH and does not require any software or daemons to be installed
            : on remote nodes. Extension modules can be written in any language and
            : are transferred to managed machines automatically.
  • rpm 包安装: EPEL 源
yum install -y ansible
  • 确认安装
# ansible --version
ansible 2.7.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

7, 相关文件

7.1 配置文件

/etc/ansible/ansible.cfg    # 主配置文件,配置 ansible 工作特性
/etc/ansible/hosts    # 主机清单
/etc/ansible/roles/    # 存放角色的目录

7.2 程序

/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 界面与用户交互的执行工具

8,主机清单 inventory

  • Inventory 主机清单
    • ansible 的主要功能用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file 中将其分组命名
  • 默认的 inventory file 为 /etc/ansible/hosts
  • inventory file 可以有多个,且也可以通过 Dynamic Inventory 来动态生成
  • /etc/ansible/hosts 文件格式
  • inventory 文件遵循 INI 文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口来表明
ntp.example.com

[webservers]
www1.example.com:222
www2.example.com

[dbservers]
db1.example.com
db2.example.com

[servers]
192.168.1.100
192.168.1.111
  • 如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
[webservs]
www[01:100].example.com

[dbsrvs]
db-[a:f].example.com

[srvs]
192.168.1.10[0:1]

9, Ansible 配置文件

  • Ansible 配置文件 /etc/ansible/ansible.cfg (一般保持默认)
  • [defaults]
# inventory    = /etc/ansible/hosts    # 主机列表配置文件
# library    = /usr/share/my_modules/   # 库文件存放目录
# remote_tmp    = $HOME/.ansible/tmp    # 临时py命令文件存放远程主机目录
# loacl_tmp    = $HOME/.ansible/tmp    # 本机的临时命令执行目录
# forks    = 5    # 默认并发数
# sudo_user    = root    # 默认 sudo 用户
# ask_sudo_pass     =  True    # 每次执行 ansible 命令是否询问 ssh 密码
# ask_pass    = True
# remote_port     = 22
# host_key_checking    = False   # 检查对应服务器的host_key,建议取消注释
# log_path    = /var/log/ansible.log    # 日志文件
原文地址:https://www.cnblogs.com/xiaoqshuo/p/10468850.html