尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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 正是实现这种批量自动化运维的重要工具。
RELATED

相关推荐

基于HAL库的OLED驱动开发:从I2C原理到实战排查

基于HAL库的OLED驱动开发:从I2C原理到实战排查

简介:基于HAL库的STM32 OLED驱动开发资料,面向嵌入式初学者以及需要快速为项目接入信息显示模块的开发者。资料以STM32单片机为主控,围绕OLED驱动开发的完整流程展开:从GPIO推挽输出模式设置、I2C或SPI通信外设初始化和复用功能配…

📅 2026/9/11 6:26:57
磁轴键盘怎么选?美加狮TITAN75 Turbo浮光轴千元内体验评测

磁轴键盘怎么选?美加狮TITAN75 Turbo浮光轴千元内体验评测

最近机械键盘圈里,磁轴几乎成了“电竞神器”的代名词。社交平台上到处是“RT 快人一步”“急停防抖”“8K 回报率”这类说法,好像没有一把磁轴键盘,就不好意思说自己玩 FPS 游戏。但一看价格,主流磁轴键盘动辄一千五起步&#xff…

📅 2026/10/8 11:53:31
STM32+W5500实现HTTP文件下载:从SPI时序到SD卡落盘全解析

STM32+W5500实现HTTP文件下载:从SPI时序到SD卡落盘全解析

简介:面向嵌入式开发者的STM32W5500 HTTP下载示例工程,基于STM32F103RC驱动W5500以太网控制器,实现通过HTTP GET从服务器下载文件并保存,适用于需要网络连接、远程固件升级或云端交互的物联网场景。资源共212个文件,压…

📅 2026/9/15 9:55:20
MORE NEWS

更多资讯

📰

作物自适应灌溉:神经网络如何让农田浇水从经验变预测?

简介:《基于神经网络模型的作物自适应灌溉研究》是一份PDF格式的论文资源,聚焦温室作物精细灌溉问题,面向智慧农业、节水灌溉及神经网络建模方向的科研人员与专业学习者。该研究针对传统Penman-Monteith公式参数多、估算精度不足等缺陷&#…

📰

YOLOv8目标跟踪中的数据关联与匹配策略详解

1. 项目概述:深入理解ultralytics.trackers.utils.matching模块在计算机视觉和目标跟踪领域,数据关联(Data Association)是核心挑战之一。ultralytics.trackers.utils.matching模块作为YOLOv8目标跟踪系统的重要组成部分&#xff…

📰

DeepSeek V4.1 Flash 与 Claude Sonnet 4.6 长上下文成本对比:MoE 架构与 KV 缓存优化如何实现一个数量级价差

1. 先搞清楚这场对比到底在比什么1.1 上下文窗口不是"内存条容量",而是"每次对话都要重新算一遍的草稿纸"很多人第一次看到"1M 上下文"和"200K 上下文"这两个数字,直觉反应是"1M 是 200K 的五倍&#xff0…

📰

机器人位形空间与运动规划算法详解

1. 位形空间:机器人运动规划的数学基础位形空间(Configuration Space)是描述机器人所有可能状态的数学空间。对于机械臂而言,每个关节角度对应空间中的一个点,整个机械臂的运动轨迹就是这个空间中的一条路径。这个概念…

📰

多模态融合技术解析:从原理到实践应用

1. 多模态融合的本质与价值当人类婴儿第一次睁开眼睛,听到母亲的声音时,大脑会自动将视觉和听觉信息关联起来——这就是最原始的多模态学习。在AI领域,多模态融合(Multimodal Fusion)正试图复现这种生物本能&#xff0…

📰

神经网络在污水出水预测中的建模实践:BP、LSTM与数据预处理全解析

简介:一份关于神经网络在污水处理中建模应用的PDF学术资料,面向水处理工程师、环境科研人员以及对机器学习建模感兴趣的读者,既可作环境工程领域的技术参考,也可作为AI建模的交叉入门资料。内容从神经网络的概念与功能入手&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬