01 ansible的基本介绍
1、现有的企业服务器环境
在现在的企业中,特别是互联网公司,他们的业务量众多;比如负载均衡服务器、web服务器、动态解析(php)服务器、数据库(mysql)服务器以及网站缓存服务器,等等;
例如:一个hadoop集群就有上前台的服务器;这样的话,如何批量管理这些服务器是一个很大的问题;
第二个问题,为了提高管理效率,必须把服务器的基础环境设施配置好,就好像高速公路一样,如果不平,则汽车的速度也无法提起来;
所以,我们首先需要一个批量化管理系统程序,其次,系统的硬件设备不能相差太大;
2、运维工作基本介绍
想要做批量化管理,我们首先就要知道,那些事情需要进行批量操作;基本上,很多的运维工作都是需要进行,或者说都是可以进行批量化操作的;
总体来说,运维人员包括的基本工作有:
1、系统安装(包括物理机和虚拟机)
2、程序包的安装
对程序进行配置,满足使用者的需求,然后需要启动服务,保证服务正常运行;
3、程序发布
这里的程序一般指的是开发人员开发的程序代码,运维人员需要将其在生产环境下面进行部署与配置;现在程序更新、且现在都是以敏捷模式开发,每周都需要更新一次,并部署到生产环境下;
同样的web页面、游戏的代码也是如此,且游戏代码更新较为频繁,且更多的是在晚上进行代码部署,这个时候的流量会比较小,相对的影响也会比较小一点;
4、监控
这里的监控操作就较为复杂,除了系统的正常运行以外;我们还需要去监控服务的正常运行;服务器CPU、内存的使用情况;网络设备的运行情况;带宽流量的占用情况等等;
同时,如果监控中出现了错误,我们需要对应的做出一些对应的操作!
基于以上四点,我们大致将运维工作氛围三个层面:
在系统操作层面上(OS Provisioning),我们需要安装好操作系统;对于物理机器,我们可以使用PXE、Cobbler、kickstack来实现服务器的批量部署;而对于虚拟机实例,我们则使用各种云管理工具(云stack)来实现批量安装,通过定制glance,或者说是image templates通过镜像文件来启动虚拟机;
服务操作层面上(configration),我们使用puppet工具(ruby开发的一款自动化运维工具)、saltstack(python开发一款自动换运维工具)、chef、cfengine等软件程序来实现服务安装、服务配置与服务启动;
批量操作层面(command and control),fabric(python研发的一个命令行工具)。在规模稍大的公司里面,都会自己研发批量管理工具,其中蓝鲸就是腾讯自己的自动化运维工具;
3、ansible的基本介绍
3.1、ansible的历史
Ansible的第一个版本是0.0.1,发布于2012年3月9日,其作者兼创始人是Michael DeHaan。Michael DeHaan曾经供职于Puppet Labs、RedHat、Michael,在配置管理和架构设计方面有丰富的经验。
其在RedHat任职期间主要开发了Cobble,经历了各种系统简化、自动化基础架构操作的失败和痛苦,在尝试了Puppet、Chef、Cfengine、Capistrano、Fabric、Function、Plain SSH等各式工具后,决定自己打造一款能结合众多工具优点的自动化工具,Ansible由此诞生。
3.2、ansible的特点
1、平缓的入门曲线,ansible简单易学;
2、无需要bootstrapping(这是一种重复抽样的算法)功能;
3、ansible使用模式是一种非有效的无环图的形式;
4、无代理端(no agents);
5、没有服务端,不是C/S架构的,直接装上ansible服务,就可以对服务器进行控制;
6、不依赖额外的PKI机制;
7、ansible是一种模块化的结构,需要什么功能,插入或者调用什么模块即可;
8、使用YAML模板语言文件;YAML可以用来编写playbook,通过playbook来实现各种功能,如果功能较为负载,需要多个playbook来协调完成,则需要使用roles来指定各个playbook之间的关系;
9、默认使用ssh来进行服务器之间的互通;
10、强大的任务编排工具,类似于kubernetes;
3.3、ansible的工作原理
ansible包含了众多自动化工具的优点;
其中,在系统层面上有红帽的卫星服务,需要购买(很少有人使用),还有cobbler、func实现系统的统一安装与管理;
其次,在配置层面上面具有cfengin和puppet,以及chef的配置功能;
ansible又凭什么来接受自动化平台管理呢?其实,在系统管理上有两种方式,以一种是有agent端的,一种是没有agent端的;
有agent端的:例如puppet、func都是需要安装agent进行管理,这种管理方式相对而言比较麻烦,但是比较稳定;
无agent端的(agentless):例如ansible、fabirc,无agent端的管理程序可以通过ssh来进行程序管理,这时候就存在一个问题,我们需要拥有root权限,如果没有root权限就需要通过sudo来提权,从而才能达到对其他服务器进行管理的目的;
相对而言,有agent端的程序更加安全,这一点agentless是不具备的;所以,ansible的管理工具对安全提出了一定的挑战,客户端需要有服务器端的秘钥,这样如果服务器端被人攻破,则所有的服务器都会很危险;
所以,ansible使用ssh密码登录的方式来进行管理,这样如果被管理端没有获取公钥,则就无法被加入到被管理的服务器群中来,也不会被攻破了;
3.4、ansible的架构
ansible属于一种模块化架构;所有的模块都与ansible主模块相连,如下图:
除了主核心模块--ansible外,还包括一些其他的模块,例如:core modules(核心模块)、costome modules(自定义模块)、plugins(第三方插件)、connection plugins(链接插件)、host inventory(主机清单)、playbooks(剧本);
其中core modules和costome modules指定了一系列的操作动作;
playbooks则是通过YAML语言将模块调用起来,进行编排,按照一定的顺序来执行相应的操作;
而host inventory则指定了清单列表,指示了什么机器要被进行playbook的操作;
connection plugins则用来关联被管理的主机;
4、ansible的安装与基本用法
yum install ansible -y
ansible的主配置文件
/etc/ansible/ansible.cfg
/etc/ansible/hosts
ssh的无秘钥认证
ansible-doc的基本用法