运维自动化工具 ansible 知识点总结
1.Ansible 基础
1.1 Ansible简介
Ansible 是一个开源软件,提供配置管理和应用程序部署等项目通用的管理功能。它主要运行在类 Unix 系统上,通过特性语言来描述各种资源对象,进而管理类 Unix 系统和 Microsoft Windows 系统等系统资源。
官网: https :// www.ansible.com /
官方文档: https :// docs.ansible.com /
功能网站: https :// galaxy.ansible.com /
源码网站: https :// github.com / ansible
1.2 Ansible的工作特性
基础属性
开发 基于 Python 语言实现
部署 基于 Python 和 SSH 、 agentless 实现简单部署
安全 基于 OpenSSH 加密方式来传输,无序代理不依赖 PKI ,命令执行 幂等性(即 无论执行多少遍跟第一遍一样)
功能属性
设计 基于插件化方式实现定制的功能
关键 三大关键模块: Paramiko 、 PyYAML 、 Jinja2
定制 支持自定义功能模块,编程语言格式无所谓
注意: ansible 的每一个模块的使用方法就类似于一条专用的命令
进阶属性
格式 YAML 格式,支持丰富的数据结构
编排 支持 playbook 自动化方式编排任务
分层 基于角色特性实现多层解决方案
劣势
由于基于 ssh 方式来通信,所以受 ssh 的限制比较多,因为 ssh 不是专门为 ansible 做准备的,所以由于性能损耗方面的原因,特别是主机量比较多的场景,效率是相当的低,解决该办法就是通过专用的代理或者客户端的方式来解决这种大环境下的低效。
1.3 ansible架构描述
三层结构 用户端、控制端、被控端
控制端: 管理方式 如下
Ad-Hoc : 使用命令行方式来管理各种目标主机,适用于小中型、简单的、临时的业务场景。
playbook : 使用 playbook 方式来管理各种目标主机,适用于中大型、复杂的、规划好的业务场景。
被控端: windows 、 Linux 、路由器、交换机等
1.4 工作流程解析
1 用户基于命令或者 playbook 方式,向 ansible 的控制端发起用户请求
2 ansible 根据用户请求目标,到控制端的主机列表中验证目标是否存在
3 若目标主机存在,然后基于连接插件与被控端处于连接状态
4 根据用户请求指令,结合相应的功能模块,指定目标主机执行相应的功能
5 目标主机执行完毕后,会将相应的状态结果返回给控制端。
6 控制端在处理过程中,还会通过插件工具实现日志、邮件等辅助功能
2 软件部署
通用环境需求 : 准备 ssh 环境
控制端专用需求:支持类 unix 系统,不支持 Windows系统 ,准备 python2 .7 + 或 python3 .5 + 的环境
被控端专用需求: Python 版本小于 2.4 ,需要安装 python-simplejson
如 开启 SELinux 需要安装 libselinux-python
windows 只能做为被控制端
安装方式 主要有四种: 官方软件源、源码方式、 Git 方式、 Pip 方式
2.1 工作环境准备

主机名定制 每个主机上都得操作
编写 / etc / hosts 文件
# vim /etc/hosts
10.0.0.12 rocky9-12
10.0.0.13 ubuntu24-13
10.0.0.15 rocky9-15
(1)ubuntu 安装 ansible-二进制 (安装的是最新的软件源,若直接apt安装可能版本过旧 )
apt update # 更新软件源
apt install -y software-properties-common #安装soft...mon(用于管理软件源)
add-apt-repository --yes --update ppa:ansible/ansible # 安装 ansible 的专用软件源
apt-cache madison ansible # 查看 ansible 的软件版本信息
apt-cache madison ansible-core # 查看 ansible-core 核心软件版本
apt install -y ansible # 安装 ansible 软件
dpkg -l ansible # 检测安装的软件包
ansible --version # 查看安装的 ansible 的版本
安装 ansible-pip 方式来安装ansible
注意:默认情况下,无法在 root 用户下,使用 pip 方式安装 ansible ,需要借助于 python 虚拟环境才可以实现。
apt install python3 python3-venv python3-pip -y 准备 pip 环境
mkdir my_project && cd my_project 准备工作目录
python3 -m venv venv 创建 python 虚拟环境 venv
source venv/bin/activate 加载虚拟环境 注意: 结果中(venv) 表示进入到了虚拟环境
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ansible 使用 pip 安装 ansible
ansible --version # 查看安装的 ansible 的版本
安装 ansible-git方式来安装ansible
mkdir / data / codes && cd / data / codes
git clone https :// githubfast.com / ansible / ansible.git
cd . / ansible
source . / hacking / env-setup
ll bin/ 查看文件的样式
python3 bin/ansible --version 使用 python3 检测 ansible 的版本效果
注意: 这种方式受环境功能约束较多,需要定制安装各种功能模块
(2)Rocky 安装 ansible- 二进制
yum install epel-release # 安装依赖软件源
yum install ansible # 安装 ansible 软件
rpm -q ansible # 检测软件安装包效果
ansible --version # 检测 ansible 的版本信息
2.2 软件环境与文件解析
命令文件解析 ll /usr/bin/ | grep ansible
/ usr / bin / ansible # ansible 主命令
/ usr / bin / ansible-config # ansible 配置管理命令
/ usr / bin / ansible-console # ansible 交互式命令
/ usr / bin / ansible-doc # ansible 模块帮助命令
/ usr / bin / ansible-galaxy # ansible 扩展命令,用于获取别人的优秀的角色模板文件
/ usr / bin / ansible-playbook # ansible 任务管理工具
/ usr / bin / ansible-pull # ansible 反模式工作命令
/ usr / bin / ansible-vault # ansible 文件专用加密工具
利用 ansible 实现管理的主要方式:
Ad-Hoc 即利用 ansible 命令,主要用于临时命令使用场景
Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程
ansible -h 帮助命令
结果显示:
通用格式: ansible < 目标主机 > 参数
专用格式: ansible < 目标主机 > - m 模块 - a 模块参数
命令方式:在命令行执行 ansible 的方式叫 "Ad-Hoc" , 肯定还有其他执行方式。
主要功能: ansible 的主要功能都是通过各种各样的插件模块来实现特有功能的。
拓展内容: ansible 的默认模块叫 command
注意: Ansible 中的 Ad-Hoc 命令允许用户快速地在远程主机上执行单个任务或命令,而无需创建复杂的剧本( Playbook )。
配置文件解析
tree /etc/ansible/

/etc/ansible/ ansible.cfg
主配置文件,配置 ansible 工作特性 , 也可以在项目的目录中创建此文件 , 当前目录下如果也有
ansible.cfg, 则此文件优先生效 , 建议每个项目目录下 , 创建独有的 ansible.cfg 文件
/etc/ansible/ hosts 主机清单文件
/etc/ansible/roles / 存放角色的目录
Ansible 的配置文件可以放在多个不同地方 , 表示作用范围的不同,优先级从高到低顺序如下
ANSIBLE_CONFIG 环境变量
. / ansible.cfg 当前目录下的 ansible.cfg
~ / .ansible.cfg 当前用户家目录下的 .ansible.cfg
/ etc / ansible / ansible.cfg 系统默认配置文件
ansible --version | grep cfg 查看默认生效的配置文件
主配置文件
Ansible 的配置文件 /etc/ansible/ansible.cfg ,从 ansible 2.12 开始,可以 用工具生成主配置文件
生成主配置文件
ansible-config init --help 查看命令帮助文件
按照全格式方式生成配置文件
ansible-config init -t all --disabled > ansible_all.cfg
ansible-config init --disabled > ansible_default.cfg
2.3 简单实践
command 模块
ansible 的默认模块叫 command
由于是默认的,不需要 - m 来指定模块,可以对目标主机使用 "-a" 传入一个命令参数,来执行查看本机上的信息,命令格式如下: ansible < 目标主机 > - a 模块参数
查看当前主机的网卡信息
apt install net-tools -y # 否则没有 ifconfig 命令
ansible localhost -a "ifconfig ens33"

ansible 操作是通过一个 "provided hosts" 的形式来检查的目标主机,只有找到主机后才执行
主机属性:默认的主机列表有两个属性:
all 默认表示所有主机列表
localhost 默认表示本机
主机列表文件是 / etc / ansible / hosts
- 绿色:执行成功且不需要做改变的操作
- 黄色:执行成功且对目标主机做变更
-紫色:执行出现报警warning
- 红色:执行失败
ping 模块
ansible localhost - m ping #测试当前主机的存活性

ansible localhost -m ping -o # 单行显示
ansible localhost -m ping -vv # 显示更多信息, - vv 或者 - vvv
ansible-doc 命令
ansible-doc -h 查看帮助信息