三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Containerlab实战系列之四:自动加载配置

Containerlab实战系列之四:自动加载配置

Containerlab实战系列之四:自动加载配置

文章目录

  • Containerlab实战系列之四:自动加载配置
    • 一、问题:宿主机重启,容器全部退出
    • 二、重新部署,配置却归零
    • 三、第一步:整理设备配置文件
    • 四、第二步:修改拓扑加入 startup-config
    • 五、验证:重启后配置自动加载
    • 写在最后

📌本文导读
第三篇我们手动配置接口完成了实验,但实验环境有个「健忘症」:宿主机关机或重启后,容器全部退出,配置全部归零。这一篇教你用 Containerlab 的startup-config机制,把设备配置固化到拓扑文件中,让配置随容器启动自动加载——重启不慌,配置不丢。

📑本文目录
01 问题:宿主机重启,容器全部退出
02 重新部署,配置却归零
03 第一步:整理设备配置文件
04 第二步:修改拓扑加入 startup-config
05 验证:重启后配置自动加载

一、问题:宿主机重启,容器全部退出

Containerlab 实验环境跑得好好的,但有一天你关机下班,第二天开机想继续实验,却发现一切都不在了——这不是玄学,而是容器的默认行为:宿主机关机或重启后,容器默认不会自动拉起,全部处于 exited 状态

用 docker ps -a 查看所有容器(包括已退出的),可以看到两个实验节点都变成了 exited:

[root@jmz mylabs]# docker ps -a

💡一句话记忆:容器不是服务:宿主机重启后,Docker 默认不会自动拉起容器,全部进入 exited 状态。

二、重新部署,配置却归零

想继续实验,最简单的办法是重新部署环境。Containerlab 的–reconfigure参数会强制清理旧容器并重新创建:

[root@jmz mylabs]# containerlab deploy -t crpd-lab.yaml --reconfigure

从输出可以看到:旧的 r1、r2 容器被移除,环境被完整重建,两个节点重新进入running状态。

但是问题来了——新容器里的配置是空的。之前手动配好的接口 IP、SSH、NETCONF 等配置全部丢失,一切都要从头再来。节点少还好,如果拓扑里有几十台设备,手动重配一遍简直是一场灾难。

要解决这个问题,就需要让设备配置「随容器而生」——这就是本篇的主角:startup-config 自动加载。操作只需两步。

三、第一步:整理设备配置文件

在实验目录下新建一个configs文件夹,把所有设备的配置文件保存到里面。每个设备一个文件,命名清晰对应节点:

configs 目录下存放了 r1.cfg、r2.cfg 两份配置,分别对应拓扑中的 r1、r2 两个节点。查看 r1 的配置文件:

配置内容就是我们之前在设备上手动敲的那些命令:主机名 r1、root 认证、SSH/NETCONF 服务、eth1 接口 172.16.1.1/30,全部以 Junos 层级语法保存。再看 r2:

r2 的配置与 r1 对应:host-name r2、eth1 接口 172.16.1.2/30,与 r1 构成 172.16.1.0/30 的点对点互联段。

四、第二步:修改拓扑加入 startup-config

修改 crpd-lab.yaml 拓扑文件,为每个节点加入startup-config字段,指向 configs 文件夹下对应的配置文件:

⚠️ startup-config 是什么:startup-config 是 Containerlab 的标准机制:节点启动时会自动把指定文件的内容加载为设备的初始配置,等价于把配置文件「焊死」在拓扑里,无需任何手动干预。

这样配置就和拓扑文件一起纳入了版本管理——改配置、改拓扑、重建环境,全部走「基础设施即代码」的流程。

五、验证:重启后配置自动加载

重启宿主机,重新生成实验拓扑。可以看到容器被重新创建并正常启动:

容器正常启动,两个节点均处于运行状态:

进入 r1 验证配置是否真的自动加载了——不用敲任何配置命令,直接查看设备配置:

[root@jmz mylabs]# docker exec -it clab-crpd-lab-r1 bash

注意输出:host-name r1、SSH/NETCONF 服务、eth1 接口 172.16.1.1/30全部就位——配置在容器启动时已经自动加载,无需手动配置!

r2 同样验证:

[root@jmz mylabs]# docker exec -it clab-crpd-lab-r2 bash

最后测试两台设备间的连通性,从 r1 ping 对端接口:

(图11:r1 ping r2 连通成功)

ping 通!网络设备成功自动加载配置,实验环境从重启到可用,全程零手动配置。

💡一句话记忆:配置自动加载两步走:① 设备配置存到 configs 目录;② 拓扑里加 startup-config 指向它。之后每次 deploy,配置自动生效。

写在最后

这一篇我们用 startup-config 机制治好了实验环境的「健忘症」:配置与拓扑绑定,重启自动加载,从此告别手动重配。下一篇我们进入抓包环节,看看流量在容器网络里到底怎么流动。

系列文章持续更新中 · 系列之五:Containerlab 网络抓包(敬请期待)

← 返回列表