4. NVIDIA Cumulus Linux首次部署与ZTP自动化开局

NVIDIA Cumulus Linux首次部署与ZTP自动化开局 学习卡片

ZTP 开局的核心机制

Cumulus Linux 的零接触开局(ZTP)依赖交换机在首次启动时自动获取管理地址,并通过 DHCP 选项或预置 URL 拉取 ZTP 脚本。脚本在 /var/lib/cumulus/ztp/ 下执行,完成后写入 /etc/cumulus/ztp.conf 标记状态,避免重复执行。整个链路的关键在于:DHCP 提供地址与脚本位置 → 交换机下载并执行脚本 → 脚本完成主机名、管理地址、许可证与基础服务配置 → 写入完成标记并重启相关服务。

DHCP 服务器 option 114 / 239 ztp-script-url 管理子网 / 网关 Spectrum 交换机 首次启动 · 无配置 eth0 管理口 DHCP 获取 ZTP 服务自动运行 /var/lib/cumulus/ztp/ ztp.conf 状态标记 ZTP 脚本服务器 HTTP / TFTP / USB ztp.sh 脚本文件 许可证 / 配置文件 DHCP Offer IP + URL GET ztp.sh 脚本内容 ZTP 脚本执行内容 ① 主机名 hostname /etc/hosts ② 管理地址 静态 IP / 网关 eth0 配置 ③ 许可证 cl-license 激活文件 ④ 基础服务 SSH / SNMP NTP / 日志 写入 /etc/cumulus/ztp.conf 标记完成 → 重启服务 → 后续启动不再执行 ZTP 验证 SSH 可达 许可证已激活

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 地址,部分版本兼容)。

配置项示例值说明
subnet10.0.0.0/24管理子网
range10.0.0.100 10.0.0.200临时地址池
option routers10.0.0.1网关
option 239http://10.0.0.5/ztp/ztp.shZTP 脚本 URL
next-server10.0.0.5TFTP 服务器(备用)
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/ 目录存在且可写。