首页/新闻资讯/正文详情

Ansible Playbook 实战:批量配置 Linux 主机

发布时间:2026/9/25 19:39:49 来源:云帆数科 栏目:资讯中心
Ansible Playbook 实战:批量配置 Linux 主机
前言在云原生运维、服务器集群管理场景中我们经常需要对多台 Linux 主机做统一初始化、基线配置、环境标准化。如果采用手动逐台操作会出现大量重复劳动同时极易产生配置不一致、漏配置、配置错误等问题后续集群运维、K8s 部署、服务上线都会埋下隐患。Ansible 作为无Agent的自动化运维工具基于 SSH 协议实现管控无需在被控主机安装客户端。通过编写Playbook 剧本可以实现「一次编写、批量执行、统一交付」完美解决多主机标准化配置问题。本文主打落地实战从零完成环境准备、主机清单配置、完整初始化剧本编写、执行校验、排错复盘所有代码可直接复制运行适合作为云原生运维、自动化运维的入门实战案例。环境说明本次实战环境统一标准化适配 CentOS / Rocky Linux 全系控制节点Rocky Linux 9 ansible-core 最新版被控节点多台 Rocky Linux 9 服务器集群主机通信方式SSH 密钥免密登录生产最优方案无明文密码风险实战目标批量完成 Linux 服务器生产基线初始化配置一、前期环境准备1.1 被控主机免密互通配置Ansible 所有操作基于 SSH 通信必须保证控制节点可免密登录所有被控节点。在控制节点执行以下命令生成 SSH 密钥# 生成ssh密钥全程回车默认即可ssh-keygen# 分发公钥到所有被控节点替换为自己节点IPssh-copy-id root192.168.122.10 ssh-copy-id root192.168.122.11 ssh-copy-id root192.168.122.121.2 编写主机清单 Inventory 文件Inventory 是 Ansible 的核心主机清单用于统一管理所有被控主机支持分组管理、全局变量配置。新建inventory.ini文件# 定义主机分组 [linux_nodes] node1 ansible_host192.168.122.10 node2 ansible_host192.168.122.11 node3 ansible_host192.168.122.12 # 分组全局变量 [linux_nodes:vars] ansible_userroot ansible_ssh_private_key_file/root/.ssh/id_rsa1.3 连通性测试通过 ansible 内置 ping 模块测试所有主机是否正常连通ansible-iinventory.ini linux_nodes-mping所有主机返回SUCCESS即为环境就绪可正常执行剧本。二、核心实战批量初始化 Playbook2.1 剧本实现功能本次编写的linux_init.yml是运维通用基线剧本覆盖生产环境最常用的初始化操作批量设置主机名与清单主机名保持一致关闭并禁用防火墙、关闭 SELinux集群节点标准配置批量安装系统必备工具包创建运维普通用户并配置 sudo 免密权限配置 chrony 时间同步保证集群时间统一强制立即同步系统时间并输出结果2.2 完整 Playbook 代码新建linux_init.yml完整可直接运行----name:批量Linux生产主机初始化基线配置hosts:linux_nodesgather_facts:truebecome:truetasks:# 1. 设置主机名-name:批量修改主机名ansible.builtin.hostname:name:{{ inventory_hostname }}# 2. 关闭防火墙并禁用开机自启-name:关闭并禁用firewalldansible.builtin.service:name:firewalldstate:stoppedenabled:false# 3. 关闭SELinux-name:永久关闭SELinuxansible.builtin.selinux:state:disabled# 4. 安装基础运维工具-name:批量安装系统必备工具包ansible.builtin.dnf:name:-chrony-vim-net-tools-wget-tree-lsof-curlstate:present# 5. 创建运维普通用户-name:创建ops运维用户ansible.builtin.user:name:opsshell:/bin/bashstate:present# 6. 配置sudo免密-name:配置ops用户sudo免密权限ansible.builtin.copy:content:ops ALL(ALL) NOPASSWD: ALLdest:/etc/sudoers.d/opsmode:0440# 7. 启动时间同步服务-name:启动chrony时间同步并开机自启ansible.builtin.service:name:chronydstate:startedenabled:true# 8. 强制同步系统时间-name:立即同步系统时间ansible.builtin.command:chronyc makestepregister:chrony_syncchanged_when:false# 9. 打印同步结果-name:输出时间同步结果ansible.builtin.debug:msg:时间同步结果{{ chrony_sync.stdout }}三、Playbook 标准执行流程生产环境执行 Playbook 必须遵循语法校验 - 模拟空跑 - 正式执行三步流程避免批量故障。3.1 语法校验ansible-playbook-iinventory.ini linux_init.yml --syntax-check返回syntax check passed代表剧本语法无错误。3.2 模拟空跑Dry-run只模拟执行、不修改任何主机配置用于提前检查配置逻辑ansible-playbook-iinventory.ini linux_init.yml--check3.3 正式批量执行ansible-playbook-iinventory.ini linux_init.yml执行完毕后所有节点自动完成全套初始化基线配置集群环境统一标准化。四、实战高频踩坑总结整理实操过程中最常见的报错与解决方案适配新手避坑1. SSH 连接失败原因主机不通、防火墙拦截、免密未配置、密钥权限异常。解决检查 IP 连通性、重新分发密钥、关闭被控节点默认防火墙。2. SELinux 模块报错低版本 Ansible 无内置 selinux 模块可改用 command 直接修改配置文件。3. sudo 权限失效/etc/sudoers.d/下文件权限必须为0440权限过大会被系统拦截导致 sudo 无法使用。4. 执行速度过慢gather_facts: true会收集主机信息大批量机器执行可关闭该参数提升执行速度。五、进阶扩展方向本文剧本为基础基线模板可基于此持续迭代适配 K8s 集群节点预部署场景批量修改内核参数适配 K8s 内核优化批量配置系统资源限制 limits.conf自动化部署 containerd、docker 容器运行时将剧本改造为 Ansible Role实现结构化、工程化运维结合 CI/CD 实现集群环境一键初始化总结Ansible Playbook 的核心价值是声明式自动化运维我们只需要定义「服务器最终的标准状态」无需关注每一步操作流程Ansible 会自动比对主机现状完成增量配置。这套批量初始化剧本是云原生运维的基石所有 K8s 集群节点、业务服务器的标准化部署都可以基于该模板迭代优化彻底告别手动运维实现环境统一、高效、可复用。

相关推荐

快速上手 mongoose web 服务器:用 TaoToken 统一 Key 打通 RESTful 接口调试
快速上手 mongoose web 服务器:用 TaoToken 统一 Key 打通 RESTful 接口调试

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

Yarn 常驻TM 容器与常驻Flink 任务
Yarn 常驻TM 容器与常驻Flink 任务

常驻 TM 容器:是 YARN 层面的资源容器(进程)Yarn Session / Per-Job:是 Flink 跑在 YARN 上的两种部署模式,决定了 AM、TM 容器的生命周期两种模式下,只要流任务在持续运行,TM 容器就会常驻不退… · 2026/9/24 17:34:11

为什么 AI 写数据要先分级?R0-R5 工具风险模型
为什么 AI 写数据要先分级?R0-R5 工具风险模型

上一篇讲了「Runtime over Prompt:为什么 System Prompt 不是安全边界」——安全边界要落在 Tool 真正执行之前。这一篇往深一层:边界既然落在执行路径上,Runtime 凭什么判断一个 Tool 该不该放行? AI 真正让企业犹豫的&#xff… · 2026/9/25 18:12:13

SpringBoot+Vue宠物管理系统全栈实战:从架构设计到部署上线
SpringBoot+Vue宠物管理系统全栈实战:从架构设计到部署上线

我参与过不少基于SpringBootVue的管理系统项目,这次要拆解的是一个宠物管理系统。说实话,宠物管理系统算是SpringBootVue全栈入门里非常经典的项目选题,很多人做毕设或者练手都会选它,因为它功能边界清晰、领域模型直观&#xff0… · 2026/9/25 19:39:34

做教学视频太累?我试了试“写代码就能生成视频“的 Code2Video
做教学视频太累?我试了试“写代码就能生成视频“的 Code2Video

起因:一节 5 分钟的动画讲解,能吃掉我一下午 做过知识类视频的人应该都有体会:真正费劲的不是把知识想明白,而是把知识"画出来"。 一个傅里叶级数的动画,从画坐标轴、调动画节奏,到把文字对齐&am… · 2026/9/25 19:39:28

华为OD机试真题 新系统 2026-09-09 JavaGoC【数列求值】
华为OD机试真题 新系统 2026-09-09 JavaGoC【数列求值】

目录 题目 思路 Code 题目 题目内容: 有一个连续的数列,它的前 7 个数为 1,2,3,4,5,6,7。从第 8 个数开始,每个数的值等于它所在位置前面最近连续 7 个数中,最大的两个数之和减去最小的两个数之和。 例如,第 8 个数由前面的 1,2,3,4,5,6,7 计算得到,即 6+7-1-2=10… · 2026/9/25 19:38:51

ArcGIS JS 基础教程(38):三维要素聚合 FeatureReduction
ArcGIS JS 基础教程(38):三维要素聚合 FeatureReduction

ArcGIS JS 基础教程(38):三维要素聚合 FeatureReduction零、写在前面一、功能介绍二、功能实现2.1 开启三维抽稀聚合2.2 动态开关聚合三、功能应用四、核心代码五、在线示例六、关键 API 说明七、系列导航零、写在前面 📌 本系列教… · 2026/9/25 19:38:45

基于Python数据筛选模块总结
基于Python数据筛选模块总结

1、需求 筛查范围:全部储能项目 筛查周期:近一个月 筛查策略:存在单体电压>=XXXXmV,且存在单体温度>=XXX℃,且电池簇总电压30s内降低10V 输出结果:设备号,时间,总电压,电流,SOC,最高最低电压,最高最低温度,单体电压,单体温度 2、整体思路 从influxdb获取… · 2026/9/25 19:38:45

FDE 到底是什么?一文讲清 AI 时代的 Forward Deployed Engineer
FDE 到底是什么?一文讲清 AI 时代的 Forward Deployed Engineer

FDE 到底是什么?一文讲清 AI 时代的 Forward Deployed Engineer一、FDE 的三个单词,分别意味着什么?二、真实招聘描述告诉了我们什么?三、为什么会调用模型 API,还不等于能完成 FDE 项目?1. 输出是否与当前… · 2026/9/25 19:38:08

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码