ansible管理大规模linux集群的关键是“连得上、统得齐、控得住”:先通过免密ssh与分组清单打通连接,再统一时区、禁用ipv6、更新系统、预置工具,接着ssh加固、设防火墙、建运维用户、部署探针,最后用role封装、vault加密、check预检和assert校验保障规模化落地。

用 Ansible 管理大规模 Linux 服务器集群,关键不是“能不能管”,而是“怎么管得稳、改得准、查得清”。它不靠安装代理,只依赖 SSH 和 Python,适合从几十台到上千台的场景。核心逻辑是:先连得上,再统得齐,最后控得住。
打通连接:免密 SSH + 清单分组是地基
没有稳定连接,一切自动化都是空谈。控制机必须能无密码登录所有目标主机:
- 在控制机生成专用密钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_ansible -N "",避免和日常密钥混用 - 用
ssh-copy-id -i ~/.ssh/id_ansible.pub user@IP分发公钥,别手动复制,权限(600)和格式错一点就失败 - 写 inventory 文件(如
cluster.ini),按角色清晰分组:[lb]<br> vip ansible_host=192.168.5.100
[masters]<br> master01 ansible_host=192.168.5.11 ansible_user=ops
[workers]<br> worker01 ansible_host=192.168.5.21
- 加
[all:vars]统一设ansible_python_interpreter=/usr/bin/python3,防止 CentOS 7/8 或最小化系统因 Python 路径不一致导致模块报错
统一基线:一次定义,全量生效
新机器上线或老机器重装后,必须快速拉到同一标准状态。这不是“装几个包”,而是建立可复用、可验证的初始环境:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 时区与时间同步:用
timezone模块设为Asia/Shanghai,同时启用chronyd并配置 NTP 源 - 禁用 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的name=*+state=latest - 基础工具预置:批量安装
curl、jq、vim-enhanced、unzip等运维常用命令
安全加固与服务预置:从“能用”到“可信”
初始化不是终点,而是安全运营的起点。很多集群出问题,不是因为没配好服务,而是基础入口没堵严:
- SSH 加固:备份原
/etc/ssh/sshd_config后,用lineinfile关闭密码登录(PasswordAuthentication no)、限制允许用户(AllowUsers ops)、禁用 root 登录(PermitRootLogin no) - 防火墙策略:CentOS/RHEL 用
firewalld模块开放必要端口(如 22、6443、10250),并设默认拒绝;Ubuntu 用ufw同理 - 创建专用运维用户:用
user模块建ops用户,配 sudo 权限(sudoers模块或写入/etc/sudoers.d/ops),禁用密码登录,只认密钥 - 部署监控探针:如
node_exporter或轻量日志采集器,用copy+systemd模块一键启动并开机自启
规模化落地:用 role + vault + check 模式保稳
管几十台靠 playbook 就行,管几百上千台必须结构化、可复用、防误操作:
- 用
roles封装组件:比如roles/etcd包含下载二进制、渲染etcd.conf.j2、启动服务、健康检查等完整流程,不同集群复用同一 role,只调变量 - 敏感信息加密:数据库密码、API Token、TLS 私钥等全放
group_vars/all/vault.yml,用ansible-vault encrypt加密,运行时加--ask-vault-pass - 执行前先预检:加
--check --diff参数试跑,看哪些文件会变、哪些服务会重启,确认无误再真实执行 - 任务自带校验:每个关键步骤后加
assert或wait_for,例如部署完 kubelet 后,用command: kubectl get nodes --no-headers | wc -l验证是否成功注册










