实验概述:
首先我们要了解为什么需要自动化?
我们将通过这个问题来引入今天的主题,通过运维工具或平台,实现IT基础设施及业务应用日常任务处理和运维流程的自动化,从而提高效率和降低风险,促进运维组织的成熟和各种能力的升级。
看到这里,你可能会说,我编写一些脚本,也能够满足上面的工作场景,为什么还要使用ansible呢?
虽然使用脚本也可以完成这些工作,不过还是推荐使用ansible。因为ansible支持一些优秀的特性,比如“幂等性”( ansible是“以结果为导向的”,我们指定了一个“目标状态”,ansible会自动判断,“当前状态”是否与“目标状态”一致,如果一致,则不进行任何操作,如果不一致,那么就将“当前状态”变成“目标状态”,这就是“幂等性”)
同时在本章我们也将了解Ansible的原理是什么、为什么要使用ansible而不选择别的工具?它又有哪些特性,是什么样的架构,以及怎么去安装使用。
现在市面上一些实现IT自动化的工具,对比 Puppet, Chef, Saltstack 等,Ansible 是一个相对比较新的工具。Ansible是一个IT自动化工具,它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。
Ansible用python编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如刚才说的Saltstack,Puppet,Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。让Ansible在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。
Puppet和Chef这样的工具使用的是master-agent 模式(或者说是拉模式)。在这种模式下,需要部署的节点上需要安装代理。这些代理会定期向主节点传送部署节点的状态信息。主节点再向部署节点发送命令,以保证状态的稳定。
但这样做有以下几个问题:
1. 定期确保状态使得状态的更改和应用的升级变得十分困难,弊大于利;
2. 主节点成为单点故障和系统瓶颈,不利于线性扩展。
Agentless:不需要在被管理节点上安装客户端,只要有sshd即可。
Serverless:在服务端不需要启动任何服务,只需要执行命令就行。
Modules in any language:基于模块工作,可以使用任意语言开发ansible模块。
YAML, not code:使用yaml语言定制playbook。
SSH by default:默认使用ssh控制各节点。
Strong multi-tier solution:可实现多级控制。
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块。
扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块。
插件(Plugins):完成模块功能的补充。
剧本(Playbooks):把需要完成的多个任务定义在剧本中。
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件。
主机清单(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作。
Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用版本控制系统(git/svn)来管理自定义模块及playbooks。
Ansible的安装方式有很多种,常用的安装方法是基于yum或者源码,如果不是基于yum安装,需要配置epel源。
1. 基于yum安装:
① :配置好包含ansible软件包的yum仓库:
② :直接使用yum -y install ansible命令安装即可。
2. 配置epel源安装:
① https://developer.aliyun.com/mirror/阿里云镜像站选择epel。
选择对应系统的版本epel(RHEL 8)方法进行配置。
② 按照方法进行配置
③ 最后都需要使用yum -y install ansible进行安装,安装完即可使用!
使用ansible --version命令查看当前版本、配置文件位置、配置的模块搜索路径、ansible python模块配置位置、以及python当前版本。