Ansible统一初始化Linux集群的核心是“一次定义、批量生效、安全可控”,通过控制节点配置SSH密钥、清单文件和连通性验证,完成时区同步、IPv6禁用、系统更新、Python路径设定;再实施SSH加固、防火墙策略、工具部署与运维用户创建;最后以可复用Playbook结合vault加密、check模式预检和assert校验确保安全可靠。

用 Ansible 统一初始化 Linux 集群,核心是“一次定义、批量生效、安全可控”。不需要每台服务器手动敲命令,也不依赖额外代理服务,只要 SSH 通、Python 有、清单对,就能把几十台机器拉到同一基线。
控制节点准备与连接打通
这是所有操作的起点,卡在这一步,后续全部停摆。
- 在控制机安装 Ansible:Ubuntu/Debian 运行 sudo apt install ansible;CentOS/RHEL 先启用 EPEL 源(yum install epel-release),再装 ansible
- 生成专用密钥:ssh-keygen -t ed25519 -f ~/.ssh/id_ansible -N "",避免干扰日常 SSH 密钥
- 用 ssh-copy-id -i ~/.ssh/id_ansible.pub user@IP 分发公钥——别手动复制,权限和格式极易出错
- 创建 inventory 文件(如 cluster.ini),按角色分组写清楚 IP 和连接参数:
[masters]
192.168.10.10 ansible_user=ops ansible_ssh_private_key_file=~/.ssh/id_ansible
[workers]
192.168.10.11 ansible_user=ops ansible_ssh_private_key_file=~/.ssh/id_ansible - 运行 ansible all -i cluster.ini -m ping 验证连通性。失败常见原因:目标机没装 Python(最小化系统常缺失)、PubkeyAuthentication yes 未启用、authorized_keys 权限不是 600
基础环境标准化配置
首次初始化必须做的几件事,影响后续所有服务稳定性和一致性。
- 统一时区与时间同步:timezone 模块设为 Asia/Shanghai,同时启用 chronyd 或 systemd-timesyncd
- 禁用 IPv6(若业务不依赖):lineinfile 写入 net.ipv6.conf.all.disable_ipv6 = 1 到 /etc/sysctl.conf,再执行 sysctl -p
- 更新系统并清理缓存:Debian/Ubuntu 用 apt 模块(update_cache=yes upgrade=dist);RHEL/CentOS 用 dnf 或 yum(name=* state=latest update_cache=yes)
- 设置默认 Python 解释器路径:在 inventory 的 [all:vars] 区域加 ansible_python_interpreter=/usr/bin/python3,避免因系统默认 Python 版本差异导致模块报错
安全加固与服务预置
初始化不是只装软件,更要堵住常见入口风险,提前铺好运维基础。
- SSH 加固:备份原配置后,用 lineinfile 关闭密码登录(PasswordAuthentication no)、限制允许用户(AllowUsers ops admin)、可选改端口(Port 2222),最后 systemctl reload sshd
- 防火墙策略:Ubuntu 默认用 ufw,RHEL 系列用 firewalld。统一开放必要端口(如 2222、80、443),其余默认拒绝,并启用服务
- 部署常用工具:通过 apt/dnf 安装 curl、jq、htop、vim-enhanced、rsync 等,避免后续调试时缺命令
- 创建运维用户并配 sudo 权限:用 user 模块建用户,authorized_key 推送公钥,copy 模块写入 /etc/sudoers.d/ops(内容:ops ALL=(ALL) NOPASSWD:ALL)
可复用与可验证的执行方式
初始化不是跑一次就结束,而是要能回溯、能重放、能确认结果。
- 所有 Playbook 加 gather_facts: true,确保获取目标机真实 OS、架构等信息,用于条件判断
- 敏感项(如密码、密钥)绝不硬编码,用 ansible-vault 加密变量文件,执行时加 --ask-vault-pass
- 上线前先模拟运行:ansible-playbook -i cluster.ini init.yml --check --diff,看哪些文件会变、哪些服务会重启
- 关键步骤加 assert 模块校验结果,比如检查 /etc/timezone 是否为 Shanghai、chronyd 是否 active
- Playbook 结尾加 reboot 任务(带 when: reboot_required 条件),确保内核升级后真正重启


















