ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/24 17:34:19 拓冰建站 浏览量
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 集群节点、业务服务器的标准化部署都可以基于该模板迭代优化彻底告别手动运维实现环境统一、高效、可复用。