1.2 Ansible架构模式

Ansible维护模式通常由控制机和被管机组成。控制机是用来安装Ansible工具软件、执行维护指令的服务器或工作站,是Ansible维护的核心。被管机是运行业务服务的服务器,由控制机通过SSH来进行管理。

1.2.1 Ansible管理方式

Ansible是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用SSH进行远程连接。无需在被管节点上安装附加软件,可使用各种编程语言进行扩展。

Ansible总体系统构成如图1-2所示。Ansible管理系统由控制主机和一组被管节点组成。控制主机直接通过SSH控制被管节点,被管节点通过Ansible的资源清 单(inventory)来进行分组管理。

图1-2 Ansible总体系统构成

Ansible如何进行配置管理呢?图1-3给出了实例,这是Ansible用剧本(playbook)方式对3台运行Nginx服务的Ubuntu服务器进行配置管理。她编写一个叫webservers. yml的Ansible脚本。在Ansible中,这个脚本称为playbook。在playbook中描述了包含被管节点的hosts和对这些hosts按照顺序执行的任务列表(task)。

图1-3 运行Ansible的playbook对3台Web服务器进行配置

在此例子中,hosts包括web1、web2、web3,任务列表包括如下过程:

·安装Nginx(Install Nginx)。

·创建Nginx配置文件(/etc/nginx/nginx.conf)。

·基于安全证书SSH方式拷贝配置文件,重启Nginx服务。

·确保Nginx服务处于启动状态。

然后在Ansible系统的控制主机上执行:

        $ ansible-playbook webservers.yml

Ansible将会通过SSH连接并行地在web1、web2、web3上面安装、配置、运行Nginx服务。

本书后面的章节将会对这里涉及如何编写playbook,以及webservers.yml中各个字段的含义、工作内容做深入的讲解。

1.2.2 Ansible系统架构

Ansible集合了众多优秀运维工具(Puppet、Cfengine、Chef、Func、Fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。Ansible的基本架构见图1-4,用户通过Ansible编排引擎操作公有云/私有云或CMDB(配置管理数据库)中的主机。

从图1-4可以看到,Ansible由以下各部分组成:

图1-4 Ansible基本架构

·核心引擎:即Ansible。

·核心模块(core modules):这些都是Ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。Ansible遵循“batteries included“哲学,所以你可以有各种各样任务的核心模块。这意味着模块是最新的,你不需要寻找一个在你平台上工作的实现。你可能认为模块库的工具箱里充满了有用的系统管理工具,和playbook一起构建自动化运维系统的基础源材料。

·自定义模块(custom modules):如果核心模块不足以完成某种功能,可以添加自定义模块。

·插件(plugins):完成模块功能的补充,借助于插件完成记录日志、邮件等功能。

·剧本(playbook):定义Ansible任务的配置文件,可以将多个任务定义在一个剧本中,由Ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。

·playbook是Ansible的配置、部署和编排语言,可以描述一个你想要的远程系统执行策略,或一组步骤的一般过程。如果Ansible模块作为你的工作室工具,playbook是你的设计方案。在基本层面上,剧本可用于管理配置和部署远程机器。在更高级的应用中,可以序列多层应用及滚动更新,并可以把动作委托给其他主机,与监控服务器和负载平衡器交互。

·连接插件(connectior plugins):Ansible基于连接插件连接到各个主机上,负责和被管节点实现通信。虽然Ansible是使用SSH连接到各被管节点,但它还支持其他的连接方法,所以需要有连接插件。

·主机清单(host inventory):定义Ansible管理的主机策略,默认是在Ansible的hosts配置文件中定义被管节点,同时也支持自定义动态主机清单和指定配置文件的位置。

Ansible采用paramiko协议库(Fabric也使用这个),通过SSH或者ZeroMQ等连接主机。Ansible在控制主机将Ansible模块通过SSH协议(或者Kerberos、LDAP)推送到被管节点执行,执行完之后自动删除,可以使用SⅤN等来管理自定义模块及编排。从图1-4可以了解到,控制主机与被管节点之间支持local、SSH、ZeroMQ三种连接方式,默认使用基于SSH的连接。在规模较大的情况下使用ZeroMQ连接方式会明显改善执行速度。

Ansible-galaxy分享平台

Ansible提供了一个在线playbook分享平台,地址:https://galaxy.ansible.com/,该平台汇聚了各类常用功能的角色(Role),当前分为web、system、packaging、networking、monitoring、development、database:sql、database:nosql、database、clustering、cloud:rax、cloud:gce、cloud:ec2、cloud共14类,已经超过4000个功能角色。

根据需要找到适合你的角色后,只需要使用命令“ansible-galaxy install+作者ID.角色包名称”就可以安装到本地,比如想安装debops提供的Nginx安装与配置的角色,直接运行“ansible-galaxy install debops.nginx”即可安装到本地,该角色的详细地址为:https://galaxy.ansible.com/list#/roles/1580

1.2.3 任务执行模式

Ansible系统由控制主机对被管节点的操作方式可分为两类,即ad-hoc和playbook:

·ad-hoc模式使用单个模块,支持批量执行单条命令。

·playbook模式是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

在Ansible系统内部又是如何执行的呢?Ansible执行过程如图1-5所示。

图1-5 Ansible执行过程