文章目录
1. Ansible简介
1.1 ansible是什么
- Ansible是近几年越来越火的一款运维自动化工具,其主要功能是帮助实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率
- 常用语于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等
- 常见的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric
- Ansible发布于2012年,其作者兼创始人是Michael Dehaan
- 红帽2015收购了Ansible母公司
1.2 为什么选择ansible
- Angible完全基于Python开发,而DevOps在国内已然是一种趋势, Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。
- Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。
- 在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。
- Agentless (无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人。
1.3 Ansible是如何工作的
- Ansible没有客户端,因此底层通信依赖于系统软件, Linux系统下基于OpenSSH通信, Windows系统下基于PowerShell,管理端必须是Linux系统。
- 根据Ansible使用过程中的不同角色,将其分为:
- 使用者
- Ansible工具集
- 作用对象
- Ansible使用者来源于多种维度,分为以下几种方式:
- CMDB存储和管理着 企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
- 基于PUBLIC (公有云) /PRIVATE (私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口: PHP、Python等。
- 直接使用Ad-Hoc临时命令集调用Ansible工具集来完成任务执行。
- 通过执行Playbooks中预先编排好的任务集按序完成任务执行。
- Ansible工具集(ansible命令 是Ansible的核心工具,总指挥)
- INVENTORY:命令执行的目标对象配置文件
- API:供第三方程序调用的应用程序编程接口
- MODULES:丰富的内置模块
- PLUGINS:内置和可自定义的插件
- 作用对象
- Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。
- Ansible的作用对象,不仅仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公有云/私有云,商业和非商业设备的网络设施。
1.4 Ansible通信机制
- Ansible主推的卖点是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接。
- 无客户端,只需安装SSH、Python即可。
- 基于OpenSSH通信,底层基于SSH协议(Windows基 于PowerShell)。
- 支持密码和SSH认证,建议使用公私钥方式认证,因为密码认证方式的密码需明文写配置文件,虽然配置文件可加密,但会增加Ansible使用的复杂度。
- 支持Windows, 但仅支持客户端,服务端必须是Linux系统。
1.5 Ansible应用场景
- 应用部署
- Ansible内置网络、应用、系统、第三方云平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类工作,即使对跨平台或知名的商业硬件也同样支持。
- 配置管理
- Ansible内置File、 Template,结合Jinja、Lineinfile等内置模块,同时无缝结合GitHub、GitLab、Git、 SVN、 Jenkins等主流版本控制和CI持续集成工具,助力配置管理自动化。
- 任务流编排
- 有效保证Tasks任务流按既定规则和顺序完成事先制订的目标和计划,同时Roles编排方式又能在一定程度上从书写习惯和代码层编排上保证整体项目的可架构性和规范性,协助控制项目维护成本不致过高。
- 适用于网络管理员、系统运维、应用运维、桌面运维、DevOps、基础架构运维等多领域运维行业,
上手快,效率高。
2. Ansible安装与配置
2.1 安装
- 官网:https://docs.ansible.com/
- 管理主机需安装python2.6/2.7版本
添加epel源
(为了速度,选择用阿里云的epel源,若有其他epel源,可进入阿里云官网查看备份方法:阿里云官网epel源备份方法)
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
:使用Aliyun的epel源sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
安装Ansible
yum repolist
yum list ansible
yum install ansible -y
:安装
2.2 Ansible 配置文件
配置文件:/etc/ansible/ansible.cfg
执行文件目录:/usr/bin/
默认主机清单文件:/etc/ansible/hosts
定义方式:
- 直接指明主机地址或主机名
- 定义一个主机组[组名]把地址或主机名加进去(组成员可以使用通配符来匹配)
示例1:直接写IP地址
[zy]
172.25.17.2
[web]
172.25.17.3
[webserver:children]
zy
web
示例2:当端口号不是默认22时,加上端口号
[组名]
主机名 ansible_port=端口号 ansible_host=IP地址
[zy]
server2 ansible_port=22 ansible_host=172.25.17.2
#或
#IP地址:端口 ssh远程主机的用户 密码
172.25.17.2:22 ansible_ssh_user=root ansible_ssh_pass='123'
示例3:[]表示一个组,也可以表示一个范围
[组名]
主机名
[zy]
www[1:10].example.com
db-[a:f].example.com
- Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
- Help文档目录:/usr/share/doc/ansible-X.X.X/
- Man文档目录:/usr/share/man/man1/
3. Ansible 任务执行
3.1 Ansible 任务执行模式
ad-hoc模式(点对点模式)
- 使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
playbook模式(剧本模式)
- 是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。
3.2 Ansible 命令执行过程
- 加载自己的配置文件,默认 /etc/ansible/ansible.cfg;
- 查找对应的主机配置文件,找到要执行的主机或者组;
- 加载自己对应的模块文件,如 command;
- 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
- 对应执行用户的家目录的 .ansible/tmp/XXX/XXX.PY文件;
- 给文件 +x 执行权限;
- 执行并返回结果;
- 删除临时py文件,sleep 0 退出
3.3 Ansible 执行状态
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且多目标主机做出更改
- 红色:执行失败