自动化运维工具 Ansible

Ansible 是一款轻量级的开源自动化运维工具,基于 Python 开发,核心用于批量管理服务器、自动化执行运维任务,无需在目标主机安装代理程序,是企业级运维的常用工具之一。

一、Ansible 的核心特点

  1. 无代理架构目标主机无需安装客户端,通过 SSH(Linux 主机默认)或 WinRM(Windows 主机)与控制节点通信,部署成本极低。
  2. 简单易用 用 YAML 编写Playbook(自动化脚本),语法接近自然语言,非专业开发人员也能快速上手。
  3. 模块化 内置数千个功能模块(如command执行命令、yum安装软件、copy传输文件等),覆盖运维常见场景,也支持自定义模块。
  4. 幂等性重复执行相同任务不会导致异常(例如重复执行 "安装 Nginx" 的任务,只会在未安装时执行,已安装则跳过)。

二、Ansible 的核心组件

  1. 控制节点安装 Ansible 的机器,负责发起自动化任务、管理配置。
  2. 被管理节点需要被自动化操作的服务器。
  3. Inventory(主机清单) 即/etc/ansible/hosts文件,用于定义被管理节点的分组、IP / 主机名等信息。
  4. PlaybookYAML 格式的自动化脚本,按 "任务集" 编排运维操作(比如 "先装依赖→再部署代码→最后启动服务")。
  5. 模块 Ansible 执行具体操作的最小单元,每个模块对应一个功能(如ping模块测连通性、file模块管理文件)。

三、Ansible 的典型应用场景

  1. 批量执行命令:比如批量查看所有主机的 CPU 负载、磁盘使用率。
  2. 配置管理:批量同步配置文件(如 Nginx、MySQL 的配置)、统一系统参数。
  3. 应用部署:批量安装、启动 / 重启服务(如 Nginx、Tomcat),或部署代码包。
  4. 系统初始化:新机器批量配置主机名、防火墙、用户、SSH 密钥等。
  5. 任务编排:按依赖顺序执行多步骤任务(比如先初始化环境→再部署中间件→最后部署应用)。

Ansible工作机制

Ansible 的工作机制核心是:控制机以 "无代理" 方式(SSH/WinRM)向被管理节点批量下发任务,通过模块化脚本执行操作,执行完自动清理临时文件,最终汇总返回结果。整个过程无需在被管理节点安装任何 Ansible 代理,轻量化且易维护,

Ansible 的 Role(角色) 是对 Playbook 的模块化、结构化封装------ 把零散的运维任务(如安装软件、配置文件、启动服务)按固定目录结构拆分,形成可复用、易维护的 "功能模块"。

简单说:如果把 Playbook 比作 "一份完整的运维操作手册",Role 就是手册里 "拆分成独立章节的标准化流程"(比如 "部署 Nginx" 一章、"配置 MySQL" 一章),可以单独维护、重复调用,解决了大 Playbook 杂乱、复用性差的问题。

四,安装与操作

管理端安装****Ansible:
yum install -y epel-release
yum install -y ansible
配置主机清单:
配置免密SSH登录:

复制代码
ssh-keygen -t rsa  # 生成密钥(和示例一样)
sshpass -p '你服务器的实际密码' ssh-copy-id root@192.168.10.4
sshpass -p '你服务器的实际密码' ssh-copy-id root@192.168.10.5

ssh root@192.168.10.50 首次登录注册密钥

sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.10.50

推送密钥并免密登录

Ansible****基础命令

格式: ansible <组名> -m <模块> -a <参数>

常用模块:
command 模块:远程执行命令,不支持管道**/重定向


**shell 模块:支持管道和
shell**特性**

cron 模块:
在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移 除。
ansible-doc -s cron # 按 q 退出

Ansible 默认输出配色逻辑

Ansible 会根据任务执行的状态,自动给输出内容分配颜色(无需手动配置),核心对应关系:

  • 黄色 :对应CHANGED状态 → 表示任务对目标主机的配置产生了实际变更(比如这次是 "新增了定时任务",主机的 crontab 内容被修改);
  • 绿色 :对应SUCCESS状态 → 表示任务执行成功,但主机配置无变更(比如重复执行相同的定时任务,任务已存在,不会修改配置);
  • 红色 :对应FAILED/UNREACHABLE状态 → 表示任务执行失败(比如参数错误)或主机无法连接。
    copy 模块:
    /用于复制指定主机文件到远程主机的
    ansible-doc -s copy
    ping****模块 :
    测试主机联通性
    yum****模块
    管理软件包
    setup****模块:
    收集节点信息
    Inventory支持对主机进行分组:
    Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机
    组内。
相关推荐
XiaoMaqqqq5 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
huainingning6 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘6 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项6 小时前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
Lsetea7 小时前
OpenSSL verify报unhandled critical extension:error 34与关键扩展排查
运维·https·ssl证书·openssl·证书链
guo_wen_qiang7 小时前
docker的备份与迁移
运维·docker·容器
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(一):物理内存初始化 — memblock 怎么把内存交给 buddy
linux·运维·服务器
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_max调用流程与实战(五十九)
linux·运维·服务器·gstreamer音视频·音视频进阶·gstreamer音视频进阶
忆挽篱笙歌10 小时前
makefil
linux·运维·服务器
程序员老赵10 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端