Ansible Playbook 自动化运维实战:从基础到批量管理服务器
一、什么是 Ansible Playbook学习 Ansible 时我们通常使用 Ad-Hoc 临时命令例如ansible all -i inventory.ini -m ping或者ansible k8s_cluster -i inventory.ini -m shell -a hostname这种方式适合执行简单、临时的操作比如快速验证某台服务器的连通性或者临时查看某个服务的运行状态。它的优点是输入方便、反馈直接适合在排查问题时随手使用。但是在真实运维工作中我们经常需要执行一系列固定操作例如安装软件修改配置文件启动服务配置防火墙创建用户分发文件重启服务批量部署Kubernetes如果每次都手动输入命令效率非常低。一方面命令一多就容易出错比如漏掉某个步骤、写错参数另一方面这些操作往往需要在多台服务器上重复执行手动操作不仅耗时而且难以保证每台机器的配置完全一致。这时候就需要使用Ansible Playbook。Playbook 本质上就是一个 YAML 格式的自动化脚本可以把多个运维操作写成一个完整的执行流程。它把“做什么”“在哪台机器上做”“以什么权限做”都清晰地描述出来形成一份可读、可复用、可版本管理的运维文档。例如我们要在一批服务器上完成 nginx 的部署手动操作需要依次执行以下步骤连接服务器 ↓ 安装 nginx ↓ 启动 nginx ↓ 设置开机自启 ↓ 检查 nginx 状态这些操作都可以通过一个 Playbook 自动完成。只要写好一次之后无论是对 3 台还是 30 台服务器都能一键批量执行并且每次执行的结果都是可预期的、一致的。简单来说Ad-Hoc 命令适合“临时、单次、简单”的操作而 Playbook 适合“固定、重复、复杂”的运维流程。掌握了 Playbook就相当于把日常运维工作从“手动敲命令”升级为“编写自动化脚本”这也是迈向自动化运维的第一步。二、Playbook 基本结构一个最简单的 Playbook--- - name: Test Ansible Playbook hosts: all become: yes tasks: - name: Show hostname command: hostname保存为test.yml执行ansible-playbook -i inventory.ini test.ymlPlaybook 结构说明--- - name: Test Ansible Playbook表示play的名称主要用于描述这个 Playbook 的作用。hosts: all表示在哪些主机上执行。例如hosts: all所有主机。hosts: k8s_cluster只在 Kubernetes 集群执行。hosts: web_servers只在 Web 服务器组执行。become: yes表示使用 sudo 提权。相当于sudo command例如普通用户连接服务器ubuntu但是安装软件需要 root 权限。那么become: yes就非常重要。tasks:表示任务列表。一个 Playbook 可以包含多个任务。例如tasks: name: Task 1 command: hostname name: Task 2 command: uptimeAnsible 会按照顺序执行。三、第一个 Playbook 实战进入 Ansible 工作目录cd /root/ansible-k8s创建文件nano test.yml写入--- - name: Test Playbook hosts: k8s_cluster become: yes tasks: - name: Show hostname command: hostname - name: Show system uptime command: uptime检查语法ansible-playbook -i inventory.ini test.yml --syntax-check如果正确playbook: test.yml执行ansible-playbook -i inventory.ini test.yml输出类似PLAY [Test Playbook] TASK [Gathering Facts] ok: [k8s-master] ok: [k8s-node01] ok: [k8s-node02] TASK [Show hostname] changed: [k8s-master] changed: [k8s-node01] changed: [k8s-node02] PLAY RECAP k8s-master k8s-node01 k8s-node02说明三个节点都成功执行任务。四、Playbook 与 Ad-Hoc 的区别Ad-Hoc例如ansible all -m shell -a systemctl restart nginx特点临时执行适合简单任务不方便保存不适合复杂流程Playbook例如tasks: name: Install nginx apt: name: nginx state: present name: Start nginx service: name: nginx state: started特点可以保存。可以重复执行支持多个任务支持变量支持条件判断支持循环支持自动化部署实际生产环境中大部分自动化运维工作都会使用 Playbook。五、Playbook 常用模块Ansible 的核心是模块。常见模块包括模块作用command执行命令shell执行 Shell 命令copy复制文件file管理文件aptUbuntu 软件管理yumCentOS 软件管理service管理服务systemd管理 systemd 服务user管理用户group管理用户组debug输出信息下面逐个介绍。六、command 模块创建--- - name: Command Test hosts: k8s_cluster tasks: - name: Show hostname command: hostname执行ansible-playbook -i inventory.ini command.yml等价于hostnamecommand 不支持 Shell 特性例如command: ls /tmp | grep nginx可能无法正常执行。因为|属于 Shell 管道。这时候需要使用shell:七、shell 模块例如--- - name: Shell Test hosts: k8s_cluster become: yes tasks: - name: Check nginx image shell: ctr -n k8s.io images list | grep nginx || true这里|是 Shell 管道。|| true表示即使 grep 没找到 nginx也不要让任务失败。command 与 shell 的区别commandcommand: hostname适合简单命令。shellshell: ps aux | grep nginx适合管道重定向变量Shell 语法八、debug 模块debug 用于输出信息。例如--- - name: Debug Test hosts: k8s_cluster tasks: - name: Show hostname command: hostname register: hostname_result - name: Print hostname debug: msg: {{ hostname_result.stdout }}执行后会输出k8s-master k8s-node01 k8s-node02九、register 注册变量Ansible 可以把任务执行结果保存到变量。例如- name: Check hostname command: hostname register: result这里result保存了命令执行结果。查看- name: Show result debug: var: result输出可能包含changed: true stdout: k8s-master stderr: rc: 0常用返回值stdout标准输出{{ result.stdout }}stdout_lines按行输出{{ result.stdout_lines }}rc返回值{{ result.rc }}例如0通常表示成功。十、copy 模块copy 用于复制文件。例如--- - name: Copy File hosts: k8s_cluster become: yes tasks: - name: Copy nginx config copy: src: nginx.conf dest: /etc/nginx/nginx.conf结构Ansible 控制节点 ↓ copy ↓ 远程服务器十一、file 模块file 模块可以管理文件目录权限软链接例如创建目录- name: Create directory file: path: /opt/test state: directory创建文件- name: Create file file: path: /opt/test/test.txt state: touch删除文件- name: Delete file file: path: /opt/test/test.txt state: absent十二、apt 模块Ubuntu 使用apt:安装 nginx--- - name: Install nginx hosts: k8s_cluster become: yes tasks: - name: Update apt cache apt: update_cache: yes - name: Install nginx apt: name: nginx state: present执行ansible-playbook -i inventory.ini install-nginx.yml十三、service 模块用于管理服务。启动 nginx- name: Start nginx service: name: nginx state: started停止- name: Stop nginx service: name: nginx state: stopped重启- name: Restart nginx service: name: nginx state: restarted开机自启- name: Enable nginx service: name: nginx enabled: yes十四、完整 Nginx 自动部署 Playbook下面是一个完整案例。创建nano nginx.yml内容--- - name: Install and Configure Nginx hosts: k8s_cluster become: yes tasks: - name: Update apt cache apt: update_cache: yes - name: Install nginx apt: name: nginx state: present - name: Start nginx service: name: nginx state: started enabled: yes - name: Check nginx status shell: systemctl is-active nginx register: nginx_status - name: Show nginx status debug: msg: Nginx status: {{ nginx_status.stdout }}执行ansible-playbook -i inventory.ini nginx.yml整个流程更新软件源 ↓ 安装 nginx ↓ 启动 nginx ↓ 设置开机自启 ↓ 检查 nginx 状态 ↓ 输出结果十五、when 条件判断when 可以实现条件执行。例如- name: Only run on master command: hostname when: inventory_hostname k8s-master那么只有k8s-master会执行。node01 和 node02 会跳过。Kubernetes 场景例如- name: Pull image on master command: ctr -n k8s.io images pull nginx:latest when: inventory_hostname k8s-master只有 Master 节点执行。十六、循环 loop例如批量安装软件- name: Install packages apt: name: {{ item }} state: present loop: - nginx - curl - vim相当于apt install nginx apt install curl apt install vim但是通过 Ansible 自动批量完成。十七、Playbook 幂等性这是 Ansible 最重要的特点之一。例如apt: name: nginx state: present第一次执行changed安装 nginx。第二次执行ok因为 nginx 已经存在。这叫幂等性意思是同一个 Playbook 执行多次最终结果保持一致。例如第一次执行 → 安装 nginx 第二次执行 → 不重复安装 第三次执行 → 不重复安装这非常适合自动化运维。十八、handlers配置改变后重启服务例如修改 nginx 配置- name: Copy nginx config copy: src: nginx.conf dest: /etc/nginx/nginx.conf notify: - Restart nginx然后handlers: name: Restart nginx service: name: nginx state: restarted完整结构--- - name: Configure nginx hosts: k8s_cluster become: yes tasks: - name: Install nginx apt: name: nginx state: present - name: Copy nginx config copy: src: nginx.conf dest: /etc/nginx/nginx.conf notify: - Restart nginx handlers: - name: Restart nginx service: name: nginx state: restarted只有配置文件发生变化时Restart nginx才会执行。十九、实际 Kubernetes 自动化案例前面我们已经使用 Ansible 管理 Kubernetes 集群。例如检查所有节点镜像ansible -i inventory.ini k8s_cluster -m shell -a sudo ctr -n k8s.io images list也可以写成 Playbook。创建nano check-images.yml内容--- - name: Check Kubernetes Images hosts: k8s_cluster become: yes tasks: - name: Check containerd images shell: ctr -n k8s.io images list register: image_list - name: Show images debug: var: image_list.stdout_lines执行ansible-playbook -i inventory.ini check-images.yml这样以后只需要执行ansible-playbook check-images.yml就可以自动检查整个 Kubernetes 集群。二十、常用命令检查 Playbook 语法ansible-playbook -i inventory.ini nginx.yml --syntax-check查看执行计划ansible-playbook -i inventory.ini nginx.yml --check执行 Playbookansible-playbook -i inventory.ini nginx.yml详细输出ansible-playbook -i inventory.ini nginx.yml -v更详细ansible-playbook -i inventory.ini nginx.yml -vvv二十一、推荐目录结构说明inventory.ini服务器清单。playbooks/存放自动化任务。files/存放需要分发的文件。templates/存放 Jinja2 模板。roles/存放大型模块化自动化项目。二十二、总结通过本篇文章我们学习了 Ansible Playbook 的基础知识。对于 Linux 运维工程师来说Playbook 是必须掌握的技能。因为真实生产环境通常几十台服务器统一配置统一部署统一更新统一检查Ansible Playbook 正是实现这种批量自动化运维的重要工具。

相关新闻

PHP+MySQL留言板开发全解析:从数据库设计到安全防护

PHP+MySQL留言板开发全解析:从数据库设计到安全防护

简介:这是一份面向PHP初学者的留言板项目源码,整合了前端页面、后端逻辑与MySQL数据库脚本,可用于学习用户注册登录、留言发布与列表展示等典型Web开发流程。压缩包共131个文件,主要包含49个PHP文件、16个CSS样式表、16个JavaScri…

2026/9/3 19:00:38 阅读更多 →
OpenMV+STM32视觉巡线小车完整工程实践与调试指南

OpenMV+STM32视觉巡线小车完整工程实践与调试指南

简介:一套基于STM32与OpenMV的视觉巡线小车完整工程源码,面向智能车竞赛、课程设计及嵌入式视觉初学者,解决从底层电机驱动、编码器测速到图像识别与PID闭环控制的整套实现问题。工程涵盖直流减速电机TB6612驱动、定时器PWM/正交编码/中断、串…

2026/9/3 19:00:37 阅读更多 →
MMKV高性能键值存储组件:原理、集成与实战指南

MMKV高性能键值存储组件:原理、集成与实战指南

这次我们来看一个很有意思的标题:is44vs152mmkv44 2。这个标题看起来像是一串乱码,但结合热搜词mmkv和mmkv作用,可以推测它真正想讨论的,是腾讯开源的MMKV(基于 mmap 的高性能通用 key-value 组件)。标题里…

2026/9/3 19:00:37 阅读更多 →

最新新闻

PFC数字电源PID控制算法C语言离散化实现与工程实践

PFC数字电源PID控制算法C语言离散化实现与工程实践

简介:面向电力电子技术与嵌入式C语言开发者,这份RAR压缩包围绕PFC功率因数校正的PID控制,提供从Simulink仿真到C语言离散化实现的完整参考方案。压缩包共5个文件,包含Simulink仿真模型、两个C源文件、TLC代码生成配置及说明文档&a…

2026/9/3 19:49:08 阅读更多 →
PFC的PID控制C语言离散化实现:电压外环与电流内环实战指南

PFC的PID控制C语言离散化实现:电压外环与电流内环实战指南

简介:这是一份面向电力电子与嵌入式开发者的 PFC 仿真及 C 语言实现资料包,围绕功率因数校正中的 PID 控制展开。资料先给出 Simulink 下的 APFC 仿真模型,演示如何通过 PID 控制器将功率因数调整到接近 1,再将控制器离散化&#…

2026/9/3 19:49:08 阅读更多 →
CListCtrl自绘实战:滚动条、表头、选中态保持全解析

CListCtrl自绘实战:滚动条、表头、选中态保持全解析

简介:面向MFC界面开发者的列表控件美化资源,解决列表控件默认外观呆板、难以融入个性化界面设计的问题。资源聚焦滚动条、表头与列表项三个核心区域,系统梳理了自定义控件类的创建与关联方式,覆盖重绘滚动条必要的消息处理、表头布…

2026/9/3 19:49:08 阅读更多 →
C#上位机与FANUC机器人TCP通信:接口设计与模拟器实战

C#上位机与FANUC机器人TCP通信:接口设计与模拟器实战

简介:面向工业自动化领域的C#开发人员,讲解如何基于interface接口规范地实现上位机与FANUC机器人的通信。资源包含项目完整源码、工程文件以及Robot_interfaceV3.0手册,提供通信协议、指令集等关键信息,并配有interfaceConnect连接…

2026/9/3 19:49:08 阅读更多 →
蔚蓝档案便利屋68的MC复刻:从规划到细节的建筑指南

蔚蓝档案便利屋68的MC复刻:从规划到细节的建筑指南

《蔚蓝档案》里的便利屋68,放到我的世界(mc)里做成建筑主题,听起来像是简单的小型建筑练习,但真正把地基铺开之后,你就会发现很多图纸上想象不到的问题:墙体颜色、屋顶坡度、招牌位置、内部动线…

2026/9/3 19:49:08 阅读更多 →
AI生成内容虽强,但言说事件仍需人类:从表达工程看人机协作边界

AI生成内容虽强,但言说事件仍需人类:从表达工程看人机协作边界

AI 生成内容越来越像“人写的”,但有一件事它始终替代不了:言说事件。过去一年,AI 写作工具已经能输出结构完整的方案、文案、周报甚至代码注释。很多团队把重复性文本生产交给大模型,效率确实提升明显。但如果我们把场景从“生成…

2026/9/3 19:48:08 阅读更多 →

日新闻

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

先别急着点开,这不是劝退文,而是想讲清楚一件事:用 AI 做逆向值不值得学?如果要用,怎么搭一套“V8 环境 AI 智能体”来提升效率。最近逆向圈、爬虫圈都在聊 AI Agent、AST 工程逆向、JS 逆向这些词,很多新手…

2026/9/3 0:00:29 阅读更多 →
安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →
ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →