跳转至

1. Ansible 介绍

  Ansible 是2012年推出的一种通用自动化工具,可用于配置管理或工作流程自动化。配置管理是一种" 基础架构代码 "实践,它将事物编码,例如应该在系统上安装什么包和版本,或者应该运行什么守护进程。工作流自动化可能是从配置基础架构到部署软件的任何事情。Ansible 在2015年时被Redhat公司收购。

  Ansible是用Python编写的,它使用SSH在不同的机器上执行命令。Ansible是无代理的,这使得入手更容易。您只需要在相关机器上安装SSH和Python。Ansible使用声明式YAML语言"playbook"将一组主机("hosts")映射到定义明确的角色。声明性用于指示Ansible如何设置或更改事物,Ansible才进行必要的更改。

Ansible 的目标

一切自动化

Ansible的使用范围

  • 自动化部署应用
  • 自动化管理配置
  • 自动化的持续交付
  • 自动化的云服务管理
  • 自动化网络设备管理

Ansible是怎么工作的

从上图可以看出,运行ansible的先决条件是,安装ansible到管理节点,定义主机清单,并有一些playbooks定义。

简要的步骤

  1. 在控制节点上安装ansible
  2. 配置主机清单: 将被控节点的连接信息配置到主机清单中。
  3. 定义playbook: 指定运行主机和执行任务

可以用动图说明下此次过程。

对管理主机的要求

  目前,只要机器上安装了 Python 2(版本2.6或2.7)或Python 3(版本3.5及更高版本)都可以运行Ansible 【windows系统不可以做管理主机】 管理主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本。

对节点主机的要求

  通常我们使用 ssh 与节点通信,默认使用 sftp. 如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式. 在节点上也需要安装Python 2(2.6或更高版本)或Python 3(3.5或更高版本)

Ansible命令执行来源

    1> USER,普通用户,即SYSTEM ADMINISTRATOR
    2> CMDB(配置管理数据库) API 调用
    3> PUBLIC/PRIVATE CLOUD API调用  (公有私有云的API接口调用)
    4> USER-> Ansible Playbook -> Ansibile

Ansible 概念

控制节点(Control node):

  任何装有Ansible的机器可称为 控制节点 。 您可以从任何控制节点运行命令和剧本,并调用/usr/bin/ansible/usr/bin/ansible-playbook。 您可以将任何安装了Python的计算机用作控制节点,笔记本电脑,共享桌面和服务器都可以运行Ansible。 但是,不能将Windows计算机用作控制节点。您也可以有多个控制节点。

管理节点(Managed nodes):

  使用Ansible管理的网络设备或服务器可称为 管理节点。 受管节点有时也称为 主机 。 受管节点上是不需要安装Ansible的。

主机清单(Inventory):

  托管节点的列表。库存文件有时也称为主机文件。您的目录可以为每个托管节点指定诸如IP地址之类的信息。库存还可以组织托管节点,创建和嵌套组,以便于扩展。要了解更多关于库存的信息。

模块(Modules):

  Ansible执行的具体代码。每个模块都有特定的用途,从管理特定类型数据库的用户到管理特定类型网络设备上的VLAN接口。您可以使用任务调用单个模块,也可以调用剧本中的几个不同模块。要了解Ansible包含多少个模块。

任务(Tasks):

  Ansible的行动单位。tasks包含一组由module组成的任务列表, 您可以使用特别的命令一次性执行单个任务。

剧本(Playbooks):

  保存了已排序的任务列表,因此可以按此顺序重复运行这些任务。剧本可以包括变量和任务。剧本是用 YAML 编写的,易于阅读、编写、共享和理解。要了解更多关于剧本的信息。

Ansible 特性

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

Ansible 注意事项

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

社区活跃

统计时间: 2022年04月20日

  • Ansible releases 441

  • Ansible modules 3387

  • Galaxy Roles 30,862

  • Github Starts 528,000

  • Github Fork 218,000

Ansible项目

  • Ansible Galaxy是一个用于查找,共享,使用Ansible role的在线社区。https://galaxy.ansible.com/

  • Ansible Container是一个开源项目,旨在实现整个容器构建,部署和管理过程的自动化。https://github.com/ansible/ansible-container

  • Ansible tower 商业项目,使用可视化仪表板,基于角色的访问控制,作业调度,集成通知和图形库存管理来集中和控制IT基础架构。https://www.ansible.com/products/tower

Ansible 与其它配置管理的对比

笔者选择了目前几款主流的与 Ansible 功能类似的配置管理软件chef、 Puppet、Saltstack,这里所做的对比不针对各个软件的性能作比较,只是对各个软件的特性做个对比。

Ansible Chef Puppet SaltStack
程序语言 Python Ruby,Erlang C++, Clojure Python2
配置文件语言 YAML,JSON Ruby Propfietary YAML
数据库 PostgreSQL PuppetDB
传输方式 Ssh RabbitMQ Mcollective ZeroMQ
发布方式 Push Pull Pull Push
管理节点 A,B,L,O,S Linux Linux L,B
客户端 A,B,L,O,S,W A,B,L,O,S,W A,B,L,O,S,W
无代理
公有云版本 AM AM/AZ/PR
公有云管理 AM/AZ/OS/GCP Fog driver AM/AZ/VM/GCP salt Cloud
架构 Server server/client server/client server/client
逐步部署
企业版UI Ansible Tower opscode Manage Puppet Enterprise SaltStack Enterprise
开源版UI Semaphore Chef Manage Foreman Slatpad,Saltshaker
企业版本
创建时间 2012年3月6日 2009年1月16日 2010年9月15日 2011年2月21日
Github Starts 42,547 6,198 5,710 10,747
Github Forks 18,764 2,417 2,138 4,815
Contributors 4,955 586 536 2,078
Commits 49,775 26,017 31,751 106,129

统计时间: 2020年04月06日

资源

  • 源码:https://github.com/ansible/ansible
  • 官方文档: http://docs.ansible.com/
  • Jinja2 中文文档: http://docs.jinkan.org/docs/jinja2/
  • yaml语法: http://www.yaml.org/
  • ansible 电子书: https://www.ansible.com/resources/ebooks
  • 白皮书: https://www.ansible.com/resources/whitepapers
  • 用户案例: https://www.ansible.com/resources/case-studies