4. NVIDIA Cumulus Linux首次部署与ZTP自动化开局
ZTP 开局的核心机制
Cumulus Linux 的零接触开局(ZTP)依赖交换机在首次启动时自动获取管理地址,并通过 DHCP 选项或预置 URL 拉取 ZTP 脚本。脚本在 /var/lib/cumulus/ztp/ 下执行,完成后写入 /etc/cumulus/ztp.conf 标记状态,避免重复执行。整个链路的关键在于:DHCP 提供地址与脚本位置 → 交换机下载并执行脚本 → 脚本完成主机名、管理地址、许可证与基础服务配置 → 写入完成标记并重启相关服务。
ZTP 脚本关键实现
以下脚本以 DHCP 提供的 ztp-script-url 为入口,在交换机上完成主机名、管理地址、许可证和基础服务配置。脚本需具备幂等性,并通过 ztp.conf 防止重复执行。
#!/bin/bash
# /var/lib/cumulus/ztp/ztp.sh
# Cumulus Linux ZTP 脚本 — 首次部署自动化开局
set -euo pipefail
LOG="/var/log/ztp.log"
exec >> "$LOG" 2>&1
echo "===== ZTP start: $(date) ====="
# ---------- 1. 主机名 ----------
HOSTNAME="leaf-01"
echo "$HOSTNAME" > /etc/hostname
hostname "$HOSTNAME"
sed -i "s/^127.0.1.1.*/127.0.1.1 $HOSTNAME/" /etc/hosts
# ---------- 2. 管理地址(静态) ----------
MGMT_IP="10.0.0.11/24"
MGMT_GW="10.0.0.1"
cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address $MGMT_IP
gateway $MGMT_GW
EOF
ifreload -a
# ---------- 3. 许可证 ----------
# 许可证文件由 ZTP 服务器提供,或从 USB 挂载
LICENSE_SRC="/mnt/ztp/license.txt"
if [ -f "$LICENSE_SRC" ]; then
cl-license -i "$LICENSE_SRC"
systemctl restart switchd
echo "License installed."
else
echo "WARN: license file not found, skip."
fi
# ---------- 4. 基础服务 ----------
# SSH 已默认启用,确保 root 登录策略
sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart ssh
# SNMP 基础配置
apt-get install -y snmpd
cat > /etc/snmp/snmpd.conf <<EOF
rocommunity public 10.0.0.0/24
syslocation DC-Rack-A1
syscontact noc@example.com
EOF
systemctl enable --now snmpd
# NTP 时间同步
cat > /etc/ntp.conf <<EOF
server ntp1.example.com iburst
server ntp2.example.com iburst
EOF
systemctl restart ntp
# ---------- 5. 完成标记 ----------
echo "ZTP_DONE=1" > /etc/cumulus/ztp.conf
echo "===== ZTP complete: $(date) ====="
DHCP 服务器侧配置要点
ZTP 的触发依赖 DHCP 返回的脚本 URL。以 ISC DHCP 为例,需在子网中声明 option 239(Cumulus 使用的 ZTP URL 选项)或 option 114(标准 CAPWAP AC 地址,部分版本兼容)。
| 配置项 | 示例值 | 说明 |
|---|---|---|
| subnet | 10.0.0.0/24 | 管理子网 |
| range | 10.0.0.100 10.0.0.200 | 临时地址池 |
| option routers | 10.0.0.1 | 网关 |
| option 239 | http://10.0.0.5/ztp/ztp.sh | ZTP 脚本 URL |
| next-server | 10.0.0.5 | TFTP 服务器(备用) |
ZTP 脚本执行完成后,交换机不会自动重启。建议在脚本末尾添加
reboot 或手动验证后重启,确保所有服务以最终配置运行。若脚本中途失败,检查 /var/log/ztp.log 和 /var/lib/cumulus/ztp/ 下的状态文件。
许可证安装后需重启
switchd 服务才能生效。若许可证无效或缺失,交换机将以受限模式运行,端口可能无法正常转发。务必在 ZTP 脚本中校验许可证文件存在且格式正确。
验证与排障
- 登录验证:
ssh admin@10.0.0.11,确认主机名与预期一致。 - 许可证状态:
cl-license -s查看已激活的许可证信息。 - 服务状态:
systemctl status ssh snmpd ntp确认基础服务运行正常。 - ZTP 标记:
cat /etc/cumulus/ztp.conf应显示ZTP_DONE=1。 - 若 ZTP 未触发:检查 DHCP 是否返回 option 239,确认
/var/lib/cumulus/ztp/目录存在且可写。