环境准备:操作系统要求、网络环境配置、依赖软件安装

说实话,设备注册批量部署这件事,环境准备做得好不好,直接决定了后面是「一路绿灯」还是「步步踩坑」。我见过太多人上来就装 Ansible,结果操作系统版本不对、Python 冲突、SSH 连不上……折腾半天还没开始干活。

这一章,咱们就把地基打牢。你跟着我的节奏走,半小时内搞定所有环境。

操作系统要求

我个人习惯用 CentOS 7.9 或 Rocky Linux 8.x 作为控制节点。为什么?因为稳定,而且 Ansible 对 RHEL 系的兼容性最好。

角色 推荐系统 最低版本 备注
控制节点 CentOS 7.9 / Rocky 8.6+ Kernel 3.10+ 运行 Ansible 和 Python
受管节点 CentOS 7+ / Ubuntu 18.04+ Python 2.7+ 或 3.x 被批量注册的设备
我的建议:控制节点别用 Ubuntu。不是说不行,而是你搜 Ansible 的教程,90% 都是 CentOS 系的。遇到问题,抄作业都方便。

受管节点这边,要求其实很宽松。只要系统能跑 Python,能开 SSH,基本都能管。我在项目中遇到过一台跑了 8 年的 CentOS 6.5,Python 2.6 硬是被我升级到 2.7,照样注册成功。

网络环境配置

网络配置这块,说白了就三个字:通、稳、快。

控制节点和受管节点之间,必须能互相访问。我建议你画一张拓扑图,把 IP 段、网关、DNS 都标清楚。嗯,这里有个坑——很多人忽略 DNS 反向解析,结果 Ansible 连上去后解析主机名超时,整个任务卡死。

避坑指南:我曾经因为没配 /etc/hosts,导致 Ansible 对 200 台设备执行任务时,光 DNS 解析就花了 15 分钟。后来统一在控制节点上配了 hosts 文件,速度直接提升 10 倍。

具体配置步骤:

  1. 固定 IP:控制节点用静态 IP,别用 DHCP。你想想看,明天 DHCP 租约到期 IP 变了,你的整个部署脚本全废。
  2. 关闭防火墙或放行端口:SSH 端口(默认 22)必须通。我习惯在测试环境直接关防火墙,生产环境则精确放行。
  3. 配置 hosts 解析:在 /etc/hosts 里写好所有受管节点的 IP 和主机名。
  4. 测试连通性:用 ping 和 ssh 命令逐台验证。
# 示例:/etc/hosts 配置
192.168.1.101  node-01
192.168.1.102  node-02
192.168.1.103  node-03

网络验证三步走:

  • ping node-01 → 通
  • ssh root@node-01 → 能登录
  • hostname 返回正确 → 搞定

依赖软件安装

接下来是重头戏。我们需要装三样东西:Python、Ansible、SSH。顺序不能乱,因为 Ansible 依赖 Python,而 SSH 是它们之间的桥梁。

1. 安装 Python

Ansible 从 2.5 开始就全面拥抱 Python 3 了。我个人建议直接装 Python 3.8 以上版本。CentOS 7 默认带的是 Python 2.7,别用它,自己装一个 3.x。

# CentOS 7 / Rocky 8 安装 Python 3.9
yum install -y epel-release
yum install -y python39 python39-pip

# 验证版本
python3.9 --version
# 输出:Python 3.9.16
小技巧:装完后用 python3 --version 检查一下。如果系统里同时有 Python 2 和 3,记得用 python3 命令,别用 python,否则可能调错版本。

为什么强调版本?我在项目中遇到过 Python 3.6 和 Ansible 某个模块不兼容的问题,排查了半天,最后升级到 3.8 就解决了。说白了,版本对齐能省掉 80% 的玄学问题。

2. 安装 Ansible

Ansible 的安装方式很多,我推荐用 pip 装,因为版本最新,而且方便升级。

# 使用 pip 安装 Ansible
pip3.9 install ansible

# 验证安装
ansible --version
# 输出:ansible [core 2.14.1]

你可能会问:用 yum 装不行吗?行,但 yum 源里的 Ansible 版本通常比较老。我记得有一次用 yum 装了 Ansible 2.9,结果有个新模块不支持,最后还是换成 pip 装了 2.12。

注意:安装完成后,检查一下 ansible.cfg 配置文件。默认路径是 /etc/ansible/ansible.cfg。如果文件不存在,手动创建也行。我习惯把 host_key_checking = False 加上,省得每次连新设备都要确认指纹。

3. 配置 SSH

SSH 是 Ansible 的通信基础。说白了,Ansible 就是通过 SSH 连到受管节点,然后执行命令。所以 SSH 必须配好,而且最好用密钥认证,别用密码。

配置步骤:

  1. 生成密钥对:在控制节点上执行 ssh-keygen -t rsa -b 4096
  2. 分发公钥:用 ssh-copy-id 把公钥复制到所有受管节点
  3. 测试免密登录:ssh node-01 不需要输入密码
# 生成密钥对(一路回车即可)
ssh-keygen -t rsa -b 4096

# 分发公钥到受管节点
ssh-copy-id root@192.168.1.101
ssh-copy-id root@192.168.1.102
ssh-copy-id root@192.168.1.103

# 测试免密登录
ssh root@192.168.1.101 "hostname"
# 应该直接返回主机名,不提示输入密码

SSH 配置检查清单:

  • 控制节点能免密登录所有受管节点
  • 受管节点的 SSH 服务已启动(systemctl status sshd)
  • 防火墙放行了 SSH 端口
  • /etc/ssh/sshd_config 中 PermitRootLogin 建议设为 yes(测试环境)

环境验证

所有软件装完后,别急着往下走。先跑一个简单的 Ansible 命令,验证整个链路是否通畅。

# 测试所有受管节点的连通性
ansible all -i "192.168.1.101,192.168.1.102,192.168.1.103" -m ping

# 如果配置了 hosts 文件,也可以用主机名
ansible all -i "node-01,node-02,node-03" -m ping

如果返回的都是 "pong",恭喜你,环境准备完成。如果报错,别慌。90% 的问题是 SSH 没配好,或者 Python 版本不对。检查一下我上面说的几个点,基本都能解决。

我的经验:第一次跑 ansible ping 的时候,建议只测一台设备。通了再加其他的。别一上来就测 100 台,万一全挂,你都不知道从哪查起。

知识体系总览

下面这张图,把环境准备的整个逻辑串起来了。你可以把它当作一个检查清单,每完成一项就打个勾。

环境准备知识体系 目标:设备注册批量部署 操作系统 网络环境 依赖软件 操作系统要求 • 控制节点:CentOS 7.9 / Rocky 8 • 受管节点:CentOS 7+ / Ubuntu 18+ • 内核版本:3.10+ 网络环境配置 • 固定 IP 地址 • 关闭防火墙 / 放行端口 • 配置 /etc/hosts 依赖软件安装 • Python 3.8+ • Ansible(pip 安装) • SSH 密钥认证 验证:ansible all -m ping ✅ 环境就绪

环境准备这块,看起来步骤多,其实做熟了也就十分钟的事。关键是每一步都要验证通过,别跳步。我刚开始带团队的时候,有个同事跳过了 SSH 免密测试,结果部署当天连不上设备,200 台设备一台都没注册成功……嗯,从那以后,我把「验证」这两个字刻在了工位上。