自定义拓扑

此页面上的信息反映了新 Air UI 的工作流程。旧版 UI 正在被弃用。 查看旧版 UI 的文档

拖放式拓扑构建器

创建完全自定义模拟的一种方法是使用内置的拓扑构建器,它提供了一个拖放式编辑器来设计任何自定义网络。要开始使用,请导航到 https://air.nvidia.com/simulations

  1. 选择 创建模拟
  2. 为您的模拟提供一个名称。
  3. 选择 空白画布 作为类型。
  4. (可选)将模拟分配给一个 组织
  5. (可选)向模拟添加一个 ZTP 脚本
    1. 开启 应用 ZTP 模板 按钮。
    2. 输入您的 ZTP 脚本。默认脚本已预先填充,以帮助您入门。
  6. 点击 创建

ZTP 脚本

当您创建一个新的模拟时,Air 允许您选择添加一个零接触配置 (ZTP) 脚本。ZTP 脚本被复制到模拟的 oob-mgmt-server。任何在带外管理网络上发出 ZTP 请求的节点都可以通过在 oob-mgmt-server 上运行的 DHCP 服务器和 Web 服务器访问此 ZTP 脚本。

默认脚本已预先填充,以帮助您入门。它在 Cumulus Linux 上实现了一些常见的 ZTP 功能,例如更改默认密码或下载 SSH 密钥。您可以直接在 UI 中编辑默认脚本。

▼ 默认 ZTP 脚本

管理节点

您可以将服务器和交换机从 系统面板 拖动到工作区。Air 提供对基于可用 NVIDIA Spectrum 交换机的硬件模型的访问。该模型不影响模拟,但允许 Air 根据交换机模型预先填充端口数量。您不需要使用每个端口。

选择一个节点以查看或编辑其属性。

  • 名称:节点主机名。
  • 操作系统:节点上安装的 OS 的名称。OS 会自动安装。
  • CPU:CPU 数量。默认值为 1 或 2 GB,具体取决于 Spectrum 交换机。
  • 内存 (GB):RAM 容量(默认为 2 GB)。
  • 存储 (GB):硬盘空间容量(默认为 10 GB)。
  • 连接器:选择一个可用端口以直接连接到另一个节点上的任何端口。

完成更改后,请务必选择 更新节点。您可以通过选择 删除节点 来删除节点。

Air 还提供了 高级选项,例如启用 UEFI 安全启动


完成拓扑创建后,点击 工作区 > 启动模拟模拟首次启动后,您无法添加、删除或编辑节点。

带外管理网络

系统面板 上,有一个 启用 OOB 的选项。此设置启用带外管理网络,该网络将所有节点相互连接。它还在您的模拟中添加一个 oob-mgmt-switchoob-mgmt-server。当您启用 SSH 时,您将 SSH 连接到 oob-mgmt-server,使该节点成为配置的理想起点。Air 会自动为您处理配置。

即使 启用 OOB 设置为关闭,您也可以手动向模拟添加更多 oob-mgmt-switchesoob-mgmt-servers。但是,您必须切换 启用 OOB 才能使用 OOB 网络。

使用 DOT 文件自定义拓扑

您可以使用 DOT 文件在 Air 中创建自定义拓扑,DOT 文件是与开源图形可视化软件 Graphviz 一起使用的文件类型。DOT 文件是简单、可自定义的基于文本的文件。

您可以将 DOT 文件直接上传到 Air 以生成拓扑,从而允许您共享和创建拓扑副本,并将拓扑保存在可重用文件中。您可以使用文本编辑器修改文件。

DOT 语法

DOT 文件使用 .dot 文件扩展名。它们定义节点、属性和连接,用于为网络生成拓扑。

以下是一个简单的拓扑 DOT 文件示例,其中包含 1 个 spine 节点、2 个 leaf 节点以及连接到每个 leaf 节点的 2 个服务器。

graph "Demo" {
  "spine01" [ function="spine" memory="4096" os="sonic-vs-202305" cpu="2" ]
  "leaf01" [ function="leaf" memory="4096" os="sonic-vs-202305" cpu="2" nic_model="e1000"]
  "leaf02" [ function="leaf" memory="4096" os="sonic-vs-202305" cpu="2" secureboot="true"]
  "server01" [ function="server" memory="2048" os="generic/ubuntu2404" cpu="2"]
  "server02" [ function="server" memory="2048" os="generic/ubuntu2204" cpu="3" storage="20"]
    "leaf01":"eth1" -- "server01":"eth1"
    "leaf02":"eth1" -- "server02":"eth1"
    "leaf01":"eth2" -- "spine01":"eth1"
    "spine01":"eth2" -- "leaf02":"eth2"
}

以下部分提供了常见 DOT 文件自定义的示例。

操作系统

您可以使用 os 选项设置节点的操作系统

"server" [os="cumulus-vx-5.10.1"]

磁盘空间

默认情况下,Air 中的节点具有 10 GB 的硬盘空间。您可以使用 storage 选项增加空间(以 GB 为单位)

"server" [os="generic/ubuntu2404" storage="20"]

如果节点无法识别增加的存储空间,请从节点运行以下命令以扩展分区并调整文件系统大小

sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1

验证更改

df -h | grep vda1
/dev/vda1        20G  2.1G   18G  11% /

CPU

您可以使用 cpu 选项自定义分配的 CPU 数量

"server" [os="generic/ubuntu2404" cpu="4"]

创建连接

您可以通过定义节点及其端口以及另一个节点和端口来创建端口连接。

"leaf01":"swp49" -- "leaf02":"swp49"
"leaf01":"swp50" -- "leaf02":"swp50"

内存

您可以使用 memory 选项自定义 RAM(以 MB 为单位)

"server" [os="generic/ubuntu2404"  memory="2048"]

示例

Demo Marketplace 中的实验室通过外部 GitLab 存储库进行维护。您可以在此处找到用于构建实验室的 topology.dot 文件并将其用作参考。要访问这些文件,请在 Demo Marketplace 中的任何实验室上选择 文档。它会将您定向到实验室的演示 GitLab 存储库,您可以在其中下载用于演示拓扑的 .dot 文件。

上传 DOT 文件

要将 DOT 文件上传到 Air,请导航到 air.nvidia.com/simulations。

  1. 选择 创建模拟
  2. 为模拟提供一个名称。
  3. 选择 DOT 作为类型。
  4. 将文件上传到 UI。
  5. (可选)将模拟分配给一个 组织
  6. (可选)添加 ZTP 脚本
    1. 选择 应用 ZTP 模板
    2. 输入您的 ZTP 脚本。默认脚本已预先填充,以帮助您入门。
  7. (可选)点击 高级 并提供一个带外管理服务器配置脚本,该脚本在模拟启动时在 oob-mgmt-server 上执行。
  8. 点击 创建

Air 基于 DOT 文件构建自定义拓扑。

使用 API 导入拓扑

您可以通过 API 导入 JSON 格式的拓扑。

以下拓扑定义了通过 eth1 接口相互连接的两个节点(node-1 和 node-2)。默认情况下启用带外管理网络。

{
    "nodes": {
        "node-1": {
            "os": "generic/ubuntu2204"
        },
        "node-2": {
            "os": "generic/ubuntu2204"
        }
    },
    "links": [
        [{"node": "node-1", "interface": "eth1"}, {"node": "node-2", "interface": "eth1"}]
    ]
}

以下拓扑定义了通过 eth1 接口相互连接的两个节点(node-1 和 node-2)。带外管理网络已禁用(“oob”:false)。该示例包括

  • 可配置节点字段的自定义值(cpu、memory、storage)
  • 面向公共的接口(带有自定义 mac 地址)到外部世界(node-1 的 eth2)
  • 通过特定 UUID 引用 os 镜像(node-2)
{
    "oob": false,
    "nodes": {
        "node-1": {
            "os": "generic/ubuntu2204",
            "cpu": 2,
            "memory": 2048
        },
        "node-2": {
            "os": "defb3ffc-e29b-4d3a-a5fb-41ed1974f938",
            "memory": 2048,
            "storage": 25
        }
    },
    "links": [
        [{"node": "node-1", "interface": "eth1"}, {"node": "node-2", "interface": "eth1"}],
        [{"node": "node-1", "interface": "eth2", "mac": "02:00:00:00:00:07"}, "exit"]
    ]
}

有关其他架构,请参阅 API 文档

▼ 导入说明

通过 API 导出拓扑

您可以使用 API 将现有模拟导出为 JSON 表示形式。有关其他架构详细信息,请参阅 API 文档

▼ 导出说明

从生产网络创建自定义拓扑

本节介绍如何基于现有生产部署创建模拟。

NVIDIA 仅在 Linux 环境中验证了这些脚本。

从生产网络收集 cl-support

使用 这些 Ansible playbook 来收集 cl-support 脚本输出。存储库的 ReadMe 提供了其他说明。

从生产网络创建 topology.dot

在您获得 cl-support 输出后,您可以使用 此解析器脚本 创建 topology.dot 文件。您可以使用 python3 运行脚本。以下是示例输出

$ python3 cl_support_lldp_parser.py
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_leaf01_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_spine02_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_leaf02_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_spine01_20210721_084129.txz
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_leaf01_20210721_164553
leaf01
    leaf01:eth0 -- oob-mgmt-switch:swp2
    leaf01:swp31 -- spine01:swp1
    leaf01:swp32 -- spine02:swp1
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_spine02_20210721_164553
spine02
    spine02:eth0 -- oob-mgmt-switch:swp6
    spine02:swp1 -- leaf01:swp32
    spine02:swp2 -- leaf02:swp32
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_leaf02_20210721_164553
leaf02
    leaf02:eth0 -- oob-mgmt-switch:swp4
    leaf02:swp31 -- spine01:swp2
    leaf02:swp32 -- spine02:swp2
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_spine01_20210721_084129
spine01
    spine01:eth0 -- oob-mgmt-switch:swp5
    spine01:swp1 -- leaf01:swp31
    spine01:swp2 -- leaf02:swp31
DOTFILE: cl_support_lldp_parser.dot

该命令将输出写入 cl_support_lldp_parser.dot 文件。您需要手动编辑此文件以定义节点版本并清理任何额外的配置

$ cat cl_support_lldp_parser.dot
graph dc1 {
"leaf01" [function="leaf" ]
"oob-mgmt-switch" [function="leaf" ]
"spine01" [function="leaf" ]
"spine02" [function="leaf" ]
"leaf02" [function="leaf" ]
    "leaf01":"eth0" -- "oob-mgmt-switch":"swp2"
    "leaf01":"swp31" -- "spine01":"swp1"
    "leaf01":"swp32" -- "spine02":"swp1"
    "spine02":"eth0" -- "oob-mgmt-switch":"swp6"
    "spine02":"swp2" -- "leaf02":"swp32"
    "leaf02":"eth0" -- "oob-mgmt-switch":"swp4"
    "leaf02":"swp31" -- "spine01":"swp2"
    "spine01":"eth0" -- "oob-mgmt-switch":"swp5"
}

恢复配置文件

创建模拟后,您可以恢复配置文件。

此 python 脚本 提取相关文件并将它们整理到文件夹中,您可以使用这些文件夹来恢复配置。

您还可以使用 infrastructure-as-code Ansible playbook 来恢复配置。