Ansible
在IT行业,工程师习惯于编写程序来解决所有的问题。当然,在软件发布、应用部署和机器扩容时,工程师也希望借助软件来消灭重复劳动力。因此,各种自动化部署工具应运而生。在机器扩容时,将一台新的服务器配置成一台应用服务器,这中间需要经历很多步骤,包括配置DNS、创建用户、配置防火墙、部署应用、部署监控、自动测试等一系列操作。
最开始的时候,工程师通过手动登陆服务器的方式来部署应用。这样不但费时费力,而且枯燥乏味,海特别容易出错。因此,当服务器的数量增大时,工程师一般会将命令写成脚本,通过SSH到远程服务器执行脚本的方式来简化部署工作。当服务器规模不大、应用也不复杂时,使用脚本半人工的方式进行部署是一种比较简单有效的手段。但是,当服务器规模进一步增大,通过SSH执行脚本的方式将会变的困难。而且,随着应用部署的依赖越来越多,需要使用的脚本也越来越多。如果部署一个应用需要依赖几十个脚本,那么,脚本将会变得无法管理。
在复杂的部署任务中,脚本部署也不是长久之计,我们需要更加强大的自动化工具。运维发展到今天,已经有了各种成熟的自动化部署工具,这些自动化部署工具能够有效解决手动部署和脚本部署的不足之处。在层出不穷的自动化运维工具中,Ansible是一颗冉冉升起的新星。最近几年,越来越多的公司和个人开始了解和使用Ansible。在Ansible出现之前,行业中已经有很多开源配置工具了,其中,使用最广泛、知名度最高的便是Puppet。甚至有一段时间,Puppet是配置管理的代名词。工程师 一提到配置管理、自动化部署,首先想到的就是Puppet。Puppet经过多年的发展,牢牢占据了市场第一的位置。但是,Puppet的功能越是强大,其缺点也越明显。Puppet最大的缺点就是大而全,大而全之后导致功能复杂,甚至可以说过于繁琐。运维自动化工具是用来简化运维工作的,如果工具本身比较复杂,就会增加使用者犯错的概率,也会增加使用和推广的难度。
Ansible依靠它的简单易用、无客户端依赖、功能强大等优点,逐渐获得了无数开发者和运维工程师的青睐。Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko、PyYAML和Jinja2(模板语言)两个关键模块构成,可用于自动化自动化部署应用、配置、编排taask(持续交付、无宕机更新等)。虽然Ansible相对于其他配置工具来说比较简单。但是,因为配置工具本身的复杂执行,所以会导致所占篇幅较多。
Ansible架构分析
Ansible在管理节点将Ansible模块通过SSH协议(或者kerberos,LDAP)推送到被管理端执行,执行完成后自动删除,可以使用SVN等来管理自定义模块及编排。
其中:
- Ansible:核心
- Core Modules:Ansible自带的核心模块
- Custom Modules:自定义模块
- Plugins:Ansible插件,包括邮件插件、日志插件、连接插件等
- Playbooks:剧本,Ansible配置、部署、编排语言,定义主机执行的task集合
- Host Inventory:Ansible管理远程主机和组之间的关系清单,记录主机ssh端口、账号密码等