📌 引言(Introduction)
Cisco Modeling Labs 平台内置了一组节点定义(node definitions),每个节点定义都对应一个镜像定义(image definition),可让你立即启动建模实验。
若要使实验中的设备版本与真实网络中使用的版本一致,有时需要上传额外的虚拟机(VM)镜像、创建新的镜像定义,并将其关联到现有的节点定义,从而确保实验中的设备版本与真实网络完全匹配。
在更高级的场景中,你可能需要创建全新的节点(例如默认未捆绑的第三方 VM 镜像,如 Windows VM):为此必须先创建新的节点定义,再创建对应的镜像定义,最后将两者关联。
💡补充资源如需参考平台未包含的镜像和 YAML 文件等额外资源,可查阅 CiscoDevNet/cml-community (https://github.com/CiscoDevNet/cml-community)项目。 本课程将教授如何导入和管理镜像与节点定义,掌握该技能后,你将能够在实验中模拟各种 Cisco 及其他网络设备。
📌 节点定义(Node Definitions)
在 Cisco Modeling Labs 中,节点定义代表一种虚拟设备类型;实验中的每个节点都有一个关联的节点定义,用于描述该节点及其属性,例如可用接口数量、接口名称,以及启动 VM 所需的其他关键参数。
理解节点定义代表的是一个虚拟设备系列/类型,而非某个特定的 VM 镜像,这一点至关重要。
Introduction - Cisco Modeling Labs v2.10 - Cisco DevNet
🔹 添加新节点的流程
向 Cisco Modeling Labs 添加新节点时,必须按以下顺序操作:
首先创建节点定义;
然后创建对应的镜像定义。
🔹 节点定义的作用
节点定义详细列出了使 Cisco Modeling Labs 能够启动与该节点关联的 VM 的所有属性。
创建新节点定义有两种方式:
上传该节点对应的 YAML 文件;
从头手动创建。
若选择从头创建新节点定义,你需要熟悉虚拟化技术,以及该类型设备的相关细节。
💡注意创建新节点定义时,请参考官方开发者文档中的指南,为自定义节点定义选择正确的参数值。该指南需结合虚拟设备的安装和配置文档一同使用。
cml-community/node-definitions at master · CiscoDevNet/cml-community · GitHub
🔹 节点与镜像定义关系示意图
[VM镜像] [VM镜像] [VM镜像] [VM镜像] ↕ ↕ ↕ ↕ [镜像定义] [镜像定义] [镜像定义] [镜像定义] ↕ ↕ ↕ ↕ └─────────┬─────────┘ ↕ [节点定义] ↕ ┌───────┴──────────┐ │ 实验中的设备实例 │ └──────────────────┘ ```- 一个节点定义可以对应多个镜像定义(即同一设备类型的不同软件版本) - 每个镜像定义对应一个具体的 VM 镜像文件 - 实验中实际运行的设备实例由节点定义和对应的镜像定义共同生成 --- ### 📌 镜像定义(Image Definitions) - 在 Cisco Modeling Labs 中,**镜像定义**代表 VM 镜像与节点之间的链接关系。 - 例如:镜像定义可以将 CSR 1000V 节点关联到特定的 Cisco IOS XE 软件镜像。 - 通常情况下,一个节点定义对应一种设备类型,但同一节点下可以挂载多个镜像定义(对应不同的软件版本)。 - 通过这种方式,你可以在 Cisco Modeling Labs 实验中为该节点选择使用不同版本的镜像。 > 💡 **注意** > 创建新的镜像定义时,需要将其与一个已有的节点定义相关联。你可以为现有节点定义添加新的软件版本,而节点定义本身已经存在。 > 但是,如果你想要添加一个完全全新的节点类型,则必须先为该设备创建节点定义。 --- ### 📌 导入节点定义(Import Node Definitions) - 在 Cisco Modeling Labs 中,你会找到一个参考平台库,其中包含各种 Cisco 网络设备、Linux 服务器镜像、流量生成器、非托管设备等,可直接在你的实验中使用。 - 但有时你可能需要使用参考平台中未包含的设备拓扑,常见场景包括: - 你需要某个特定设备的不同版本(例如生产网络中运行的是 CSR 1000 的旧版本) - 你想要使用完全不同类型的设备 - 实现方式:你可以将自己版本的镜像导入 Cisco Modeling Labs,并将其与现有的 CSR 1000V 节点定义关联,或者为你的设备版本创建一个全新的节点定义。 - 本实验将教授如何使用节点定义。 #### 🔹 实验环境说明 - 你使用的是美式英语键盘布局,实验初始化后该布局无法更改。 - 如需了解如何更改操作系统键盘布局和屏幕分辨率,请查看“设备帮助”。 - 开始初始化实验后,你可以离开此页面;设备准备就绪后你会收到通知。 --- ### 📌 使用镜像定义(Work with Image Definitions) - 有时你可能想要在 Cisco Modeling Labs 拓扑中使用参考平台未包含的设备,原因可能包括: - 你需要某个特定设备的不同版本 - 你运行的是生产网络中某设备的不同版本(例如旧版 CSR 1000) - 你想要使用完全不同类型的设备 - 实现方式:你可以将自己版本的镜像导入 Cisco Modeling Labs,并将其与现有节点定义关联,或者与你导入的节点定义关联。 - 本实验将教授如何使用镜像定义。 #### 🔹 实验活动目标 - 在本次活动中,你将创建一个新的镜像定义,并将其与一个现有的节点定义相关联。 #### 🔹 实验环境说明 - 你使用的是美式英语键盘布局,实验初始化后该布局无法更改。 - 如需了解如何更改操作系统键盘布局和屏幕分辨率,请查看“设备帮助”。 - 开始初始化实验后,你可以离开此页面;设备准备就绪后你会收到通知。 --- ### 📌 总结(Summary) - 除了内置的参考平台外,Cisco Modeling Labs 还支持“自带镜像”(bring your own image)模式,支持集成任何基于 KVM 的镜像。 - 虽然 Cisco 和社区可以提供第三方节点和镜像定义的示例 YAML 文件,但实际的 QCOW 镜像文件需要从各自的平台所有者处获取适当的许可和权限。 - 用户必须基于自己的许可协议自行提供这些镜像。 - 你可以使用 Cisco Modeling Labs 的 YAML 文件定义,这些定义已建立用于支持各种平台,包括 Cisco 和其他第三方供应商。 #### 🔹 节点定义文件夹 - 位置:CiscoDevNet/cml-community 项目的 node-definitions 目录 - 内容:包含 Cisco Modeling Labs 节点的 YAML 文件定义,例如 CPU、RAM、网络适配器等配置信息。 #### 🔹 Virl Base Images 文件夹 - 位置:CiscoDevNet/cml-community 项目的 virl-base-images 目录 - 内容:包含每个新增平台磁盘镜像对应的文件夹,每个平台文件夹中都有一个 YAML 文件,引用该平台的特定磁盘镜像文件。 > 💡 **注意** > 你需要自行从供应商处下载磁盘镜像文件。cml-community/virl-base-images at master · CiscoDevNet/cml-community · GitHub
课堂实验1:
在CML中,你将找到一个参考平台库,涵盖各种思科网络设备、Linux服务器镜像、流量生成器、非托管设备,可供你在实验室使用,依此类推。然而,有时你的生产网络中也可能已经拥有其他需要使用的设备,比如旧版的CSR或ASA,这些设备是你希望在CML中复制的。在这种情况下,你可以上传图像版本并将其连接到新的或现有的节点定义上;请查看如何添加节点定义的步骤。
注意:默认情况下会选择“节点定义”选项卡。
仔细观察数值。关注“可用图像定义”字段。如果有多个图像定义与此节点定义链接,你将在此处看到它们。选择任意将引导你进入图像定义编辑器。
注意:在删除节点时,请确保该节点未被用于任何实验中,这样才能成功删除该节点。
id: Custom_csr1000v configuration: generator: driver: csr1000v provisioning: volume_name: disk media_type: iso files: - name: iosxe_config.txt content: |- hostname inserthostname-here end editable: true inherited: image: ram: true cpus: true cpu_limit: true data_volume: false boot_disk_size: false node: ram: true cpus: true cpu_limit: true data_volume: false boot_disk_size: false device: interfaces: has_loopback_zero: true default_count: 4 loopback: - Loopback0 physical: - GigabitEthernet1 - GigabitEthernet2 - GigabitEthernet3 - GigabitEthernet4 - GigabitEthernet5 - GigabitEthernet6 - GigabitEthernet7 - GigabitEthernet8 - GigabitEthernet9 - GigabitEthernet10 - GigabitEthernet11 - GigabitEthernet12 - GigabitEthernet13 - GigabitEthernet14 - GigabitEthernet15 - GigabitEthernet16 - GigabitEthernet17 - GigabitEthernet18 - GigabitEthernet19 - GigabitEthernet20 - GigabitEthernet21 - GigabitEthernet22 - GigabitEthernet23 - GigabitEthernet24 - GigabitEthernet25 - GigabitEthernet26 serial_ports: 2 general: description: Custom Cloud Services Router 1000V nature: router read_only: true schema_version: 0.0.1 sim: linux_native: cpus: 1 disk_driver: virtio driver: csr1000v libvirt_domain_driver: kvm nic_driver: vmxnet3 ram: 3072 cpu_limit: 100 boot: timeout: 250 completed: - Would you like to enter the initial configuration dialog? - Press RETURN to get started! - '%CVAC-4-CONFIG_DONE:' pyats: os: iosxe series: csr1000v config_extract_command: show run ui: description: |- Custom Cloud Services Router 1000V 3 GB DRAM, 1 vCPU [CCO Link](https://www.cisco.com/c/en/us/support/routers/cloud-services-router-1000v-series/tsd-products-support-series-home.html) [Release Notes](https://www.cisco.com/c/en/us/td/docs/routers/csr1000/release/notes/xe-16/csr1000v-rn-16-6-book.html) group: Cisco icon: router label: CSR1000v label_prefix: csr1000v- visible: true注意:你可以创建没有关联图像定义的节点定义,但不能反过来做。
现在你已经成功导入了一个节点定义。要在实验室中使用它,你还需要将其与图像定义相关联。
课堂实验2:
在本活动中,你将创建一个新的映像定义,并将其与现有的节点定义相关联。
PS:默认情况下,CML附带了一组参考映像,但并不包括所有Cisco映像。根据客户的许可证授权,可能会向客户提供额外的图像。有关其他思科和第三方设备镜像和YAML定义文件,请参见GitHub - CiscoDevNet/cml-community: Community Contributed Content and Resources for Cisco Modeling Labs · GitHub
你已经成功创建了新的图像定义。如果你返回到步骤6并观察上传图像的列表,该列表应该是空的。这是因为你上传的图像现在与你创建的图像定义相关联,因此不能进一步使用。如果你想要创建另一个映像定义,你需要上传另一个虚拟机映像或删除你的映像定义。在这种情况下,以前上传的文件将再次可用。
PS:另一种方案,也可以通过SCP将虚拟机镜像上传到CML服务器上。该服务器专门设置了22号端口用于接收虚拟机镜像的上传。请使用用于访问CML用户界面的登录凭据来进行操作——例如,以管理员身份登录(而非系统管理员身份)。由于SCP连接仅用于上传镜像文件,因此需将根目录指定为SCP命令的目标路径。
例如,以下演示了如何将ASAv 9.12(2).qcow2文件上传到地址为172.16.0.10的CML服务器上:
- scp asav9-12-2.qcow2 admin@172.16.0.10:/