2. 部署环境规划:硬件选型建议、操作系统配置、网络与安全组规划

好,咱们进入第二章。说实话,很多自动化部署项目最后翻车,不是代码写得不好,而是环境规划没做好。我见过太多人一上来就急着写脚本,结果硬件扛不住、网络不通、安全策略把服务全堵死了……嗯,咱们今天就把这些坑提前填上。

核心原则:环境规划不是一次性工作,而是要为未来3-5年的业务增长留出余量。我个人习惯是「按峰值负载的1.5倍来规划资源」,这样既能应对突发流量,又不会造成太大浪费。

2.1 硬件选型建议

硬件选型这块,我踩过不少坑。记得有一次给客户做方案,图便宜选了低配机器,结果策略引擎一跑起来,CPU直接飙到95%,连SSH都连不上去……后来学乖了,总结出这么一套选型标准。

组件 最低配置 推荐配置 说明
控制节点 4核8G 8核16G 运行调度引擎和数据库
执行节点 2核4G 4核8G 执行自动化任务,可水平扩展
存储节点 4核8G + 500G SSD 8核16G + 2T NVMe 存放策略模板和日志
监控节点 2核4G 4核8G Prometheus + Grafana 组合

我的经验:磁盘IO往往是瓶颈。如果预算允许,尽量上NVMe固态。我曾经在一个项目中,把SATA SSD换成NVMe后,策略加载速度提升了将近4倍。

2.2 操作系统配置

操作系统这块,我推荐用 CentOS 7.9 或者 Ubuntu 20.04 LTS。为什么?说白了,这两个版本的社区支持最成熟,遇到问题随便一搜就有答案。我自己生产环境一直用 CentOS 7.9,稳定跑了三年没出过大事。

安装完系统后,有几项配置必须做:

  • 关闭SELinux(或者设为permissive模式)—— 这东西在自动化场景下经常捣乱
  • 调整文件描述符限制 —— 默认1024根本不够用,建议改成65535
  • 设置时区和NTP —— 所有节点时间必须同步,差一秒都可能出问题
  • 优化内核参数 —— 特别是网络相关的net.core.somaxconn和net.ipv4.tcp_tw_reuse
# 我常用的系统初始化脚本片段
# 调整文件描述符
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

# 内核参数优化
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn = 10240
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
EOF
sysctl -p

注意:千万别在生产环境直接复制粘贴上面的命令。先看看你当前系统的配置,有些参数可能已经存在了。我曾经因为没检查,直接追加配置导致参数重复,系统启动都报错……

2.3 网络与安全组规划

网络规划这块,说白了就是「谁跟谁能通信,谁跟谁不能通信」。我习惯把整个部署环境分成三个网络区域:

  • 管理网络(10.0.1.0/24):运维人员访问,SSH、Web管理界面走这里
  • 业务网络(10.0.2.0/24):策略引擎之间的内部通信
  • 存储网络(10.0.3.0/24):数据库和日志传输,建议走独立网卡

安全组规则我一般这么配:

方向 源地址 目标地址 端口 协议 说明
入站 办公网 管理节点 22, 443 TCP 运维SSH和Web访问
入站 管理节点 执行节点 22, 6443 TCP 下发策略和任务
内部 执行节点 存储节点 3306, 6379 TCP 数据库和缓存访问
出站 所有节点 互联网 80, 443 TCP 下载更新和镜像

避坑指南:我曾经把安全组规则配得太死,结果执行节点连不上NTP服务器,所有机器时间都乱了。后来我加了一条「允许UDP 123端口出站到NTP服务器」的规则,问题才解决。所以,安全策略要「最小权限」,但别忘了基础服务。

2.4 整体架构图

下面这张图是我自己画的,把上面说的硬件、网络、安全组串起来了。你一看就明白:

管理网络 (10.0.1.0/24) 业务网络 (10.0.2.0/24) 存储网络 (10.0.3.0/24) 管理节点 8核16G | 调度引擎 执行节点 1 4核8G | 任务执行 执行节点 2 4核8G | 任务执行 执行节点 N 水平扩展 数据库节点 8核16G | MySQL 缓存节点 4核8G | Redis 监控节点 4核8G | Prometheus SSH/6443 3306/6379 安全组规则 最小权限原则 | 白名单策略 管理节点 执行节点 存储节点 监控节点 网络通信

你看这张图,三个网络区域之间通过安全组规则严格控制流量。管理节点可以访问执行节点,执行节点可以访问存储节点,但反过来不行。这样就算某个执行节点被攻破,攻击者也拿不到数据库里的数据。

总结一下:环境规划这事儿,说白了就是「把丑话说在前头」。硬件留余量、系统做优化、网络划区域、安全设规则。这几步走扎实了,后面部署起来就顺风顺水。我见过太多项目,前面省事,后面天天救火……


公众号:蓝海资料掘金营,微信deep3321