环境准备:操作系统要求、网络环境配置、依赖软件安装
说实话,设备注册批量部署这件事,环境准备做得好不好,直接决定了后面是「一路绿灯」还是「步步踩坑」。我见过太多人上来就装 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 | 被批量注册的设备 |
受管节点这边,要求其实很宽松。只要系统能跑 Python,能开 SSH,基本都能管。我在项目中遇到过一台跑了 8 年的 CentOS 6.5,Python 2.6 硬是被我升级到 2.7,照样注册成功。
网络环境配置
网络配置这块,说白了就三个字:通、稳、快。
控制节点和受管节点之间,必须能互相访问。我建议你画一张拓扑图,把 IP 段、网关、DNS 都标清楚。嗯,这里有个坑——很多人忽略 DNS 反向解析,结果 Ansible 连上去后解析主机名超时,整个任务卡死。
具体配置步骤:
- 固定 IP:控制节点用静态 IP,别用 DHCP。你想想看,明天 DHCP 租约到期 IP 变了,你的整个部署脚本全废。
- 关闭防火墙或放行端口:SSH 端口(默认 22)必须通。我习惯在测试环境直接关防火墙,生产环境则精确放行。
- 配置 hosts 解析:在 /etc/hosts 里写好所有受管节点的 IP 和主机名。
- 测试连通性:用 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。
host_key_checking = False 加上,省得每次连新设备都要确认指纹。
3. 配置 SSH
SSH 是 Ansible 的通信基础。说白了,Ansible 就是通过 SSH 连到受管节点,然后执行命令。所以 SSH 必须配好,而且最好用密钥认证,别用密码。
配置步骤:
- 生成密钥对:在控制节点上执行
ssh-keygen -t rsa -b 4096 - 分发公钥:用
ssh-copy-id把公钥复制到所有受管节点 - 测试免密登录:
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 版本不对。检查一下我上面说的几个点,基本都能解决。
知识体系总览
下面这张图,把环境准备的整个逻辑串起来了。你可以把它当作一个检查清单,每完成一项就打个勾。
环境准备这块,看起来步骤多,其实做熟了也就十分钟的事。关键是每一步都要验证通过,别跳步。我刚开始带团队的时候,有个同事跳过了 SSH 免密测试,结果部署当天连不上设备,200 台设备一台都没注册成功……嗯,从那以后,我把「验证」这两个字刻在了工位上。