hbugs001 发表于 2025-4-9 23:53:59

Containerlab 快速入门

<h1>1 快速入门</h1>
<h2>1.1 安装</h2>
<p>获取Containerlab非常简单。得益于快速安装脚本,在任何基于RHEL或Debian的操作系统上,你都能在短短几秒内完成安装并开始使用 。</p>
<pre><code class="language-Bash">curl -sL https://containerlab.dev/setup | sudo -E bash -s &quot;all&quot;
</code></pre>
<h2>1.2 拓扑定义文件</h2>
<p>安装完成后,Containerlab会管理所谓的拓扑定义文件(<code>clab</code>文件)中定义的实验室。用户可以从头开始编写拓扑定义文件,也可以查看Containerlab软件包中提供的各种实验室示例,或者探索社区分享的数十个实验室。</p>
<p>在本快速入门中,我们将使用其中一个提供的实验室示例,它由相互连接的诺基亚SR Linux和Arista cEOS节点组成。</p>
<p><img src="data/attachment/forum/202504/09/235344cuz8cb2lofll6d2a.png" alt="" /></p>
<p>实验室拓扑在 <code>srlceos01.clab.yml</code>文件中定义。要使用这个实验室示例,我们需要获取该 <code>clab</code>文件:</p>
<pre><code class="language-Bash">mkdir ~/clab-quickstart
cd ~/clab-quickstart
curl -LO \
        https://raw.githubusercontent.com/srl-labs/containerlab/main/lab-examples/srlceos01/srlceos01.clab.yml

</code></pre>
<p>让我们看看这个实验室的拓扑是如何定义的:</p>
<pre><code class="language-YAML"># 拓扑文档:http://containerlab.dev/lab-examples/srl-ceos/
name: srlceos01
topology:
nodes:
    srl:
      kind: nokia_srlinux
      image: ghcr.io/nokia/srlinux:24.3.3
    ceos:
      kind: arista_ceos
      image: ceos:4.32.0F
links:
    - endpoints: [&quot;srl:e1-1&quot;, &quot;ceos:eth1&quot;]

</code></pre>
<p>一份深入解析拓扑定义的文档提供了拓扑定义语法的完整参考。在本快速入门中,我们简要介绍文件的关键组成部分:</p>
<ul>
<li>每个实验室都有一个 <code>name</code>。</li>
<li>实验室拓扑在 <code>topology</code>元素下定义。</li>
<li>拓扑是一组 <code>nodes</code>以及它们之间的 <code>links</code>。</li>
<li>节点总是属于某种特定的 <code>kind</code>。<code>kind</code>定义了节点的配置和行为。</li>
<li>Containerlab支持固定数量的 <code>kind</code>。在上面的示例中,<code>srl</code>和 <code>ceos</code>是受支持的 <code>kind</code>之一。</li>
<li>拓扑的实际节点在 <code>nodes</code>部分定义,该部分包含一个节点名称映射。在上面的示例中,定义了名为 <code>srl</code>和 <code>ceos</code>的节点。</li>
<li>节点元素必须有一个 <code>kind</code>参数,以表明该节点属于哪种类型。在 <code>nodes</code>部分,你通常会提供特定于节点的参数。本实验室使用了一个特定于节点的参数——<code>image</code>。</li>
<li><code>nodes</code>通过 <code>links</code>相互连接。每个 <code>link</code>由一组 <code>endpoints</code>定义。</li>
</ul>
<h2>1.3 容器镜像</h2>
<p>节点最重要的属性之一是定义节点时使用的容器 <code>image</code>。镜像名称遵循与使用Docker CLI或Docker Compose时相同的规则。</p>
<h3>1.3.1 镜像名称格式和完全限定名</h3>
<p>镜像名称的写法有多种形式,但每个名称本质上都映射到一个完全限定的镜像名称,该名称由以下部分组成:</p>
<ul>
<li>注册表(registry):存储镜像的注册表。</li>
<li>组织(organisation):该注册表中的组织名称。</li>
<li>仓库(repository):仓库名称。</li>
<li>标签(tag):镜像标签。</li>
</ul>
<p>以下是在使用Containerlab时可能遇到的不同镜像名称及其对应的完全限定名(FQDN):</p>
<table>
<thead>
<tr>
<th>镜像名称</th>
<th>注册表</th>
<th>组织</th>
<th>仓库</th>
<th>标签</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ghcr.io/nokia/srlinux</code></td>
<td><code>ghcr.io</code></td>
<td><code>nokia</code></td>
<td><code>srlinux</code></td>
<td>未显式设置标签时,隐式使用 <code>latest</code></td>
</tr>
<tr>
<td><code>ceos:4.32.0F</code></td>
<td>未设置注册表时,假定为 <code>docker.io</code></td>
<td>未设置时,假定为 <code>library</code></td>
<td><code>ceos</code></td>
<td><code>4.32.0F</code></td>
</tr>
<tr>
<td><code>prom/prometheus:v2.47</code></td>
<td>未设置注册表时,假定为 <code>docker.io</code></td>
<td><code>prom</code></td>
<td><code>prometheus</code></td>
<td><code>v2.47</code></td>
</tr>
</tbody>
</table>
<p>我们的拓扑文件定义了两个节点,每个节点都使用自己的容器镜像进行定义:</p>
<ul>
<li><code>ghcr.io/nokia/srlinux:24.3.3</code>:用于诺基亚SR Linux节点。</li>
<li><code>ceos:4.32.0F</code>:用于Arista cEOS节点。</li>
</ul>
<p>当Containerlab开始部署实验室时,它会首先检查镜像是否在本地可用。可以使用 <code>docker images</code>命令列出本地镜像。</p>
<p>Containerlab会将拓扑文件中的镜像名称与本地镜像进行比较,如果本地没有可用镜像,它会尝试从远程注册表拉取。</p>
<h3>1.3.2 镜像可用性</h3>
<p>快速入门实验室包含诺基亚SR Linux和Arista cEOS镜像。虽然诺基亚SR Linux是公开可用的镜像,任何人都可以拉取,但Arista cEOS镜像并未在公共注册表中提供。</p>
<p>Arista要求用户在下载任何镜像之前先在arista.com上注册。创建账户并登录后,前往软件下载部分,下载特定版本的ceos64 tar归档文件。</p>
<p>下载完成后,使用docker导入归档文件:</p>
<pre><code class="language-Bash"># 导入容器镜像并将其保存为ceos:4.32.0F
docker import cEOS64-lab-4.32.0F.tar.xz ceos:4.32.0F
</code></pre>
<h2>1.4 部署实验室</h2>
<p>现在我们了解了基本拓扑文件的组成,回顾了容器镜像名称的相关知识,并且导入了cEOS镜像,接下来可以继续部署这个实验室。为了简单易懂,部署实验室的命令名为 <code>deploy</code>。</p>
<p>在执行部署命令之前,最好先确认已导入cEOS镜像:</p>
<pre><code class="language-Bash">docker images | grep ceos
REPOSITORY TAG IMAGE ID CREATED SIZE
ceos 4.32.0F 40d39e1a92c2 24 hours ago 2.4GB

</code></pre>
<h3>1.4.1 远程拓扑文件</h3>
<p>Containerlab允许从远程Git仓库和/或HTTP URL中的文件部署实验室。更多详细信息,请查看部署命令文档。</p>
<p>虽然你可以预先拉取诺基亚SR Linux镜像,但如果本地没有该镜像,Containerlab会为你拉取,非常方便!现在我们准备部署:</p>
<pre><code class="language-Bash">sudo containerlab deploy

</code></pre>
<p>很快你就会看到已部署实验室节点的汇总表。</p>
<p>该表将显示节点名称(与容器名称相同)、节点类型、镜像名称以及许多其他有用信息。你始终可以使用 <code>containerlab inspect</code>命令列出实验室的节点。</p>
<table>
<thead>
<tr>
<th>#</th>
<th>名称</th>
<th>容器ID</th>
<th>镜像</th>
<th>类型</th>
<th>状态</th>
<th>IPv4地址</th>
<th>IPv6地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>clab-srlceos01-ceos</td>
<td>6ec1b1367a77</td>
<td>ceos:4.32.0F</td>
<td>arista_ceos</td>
<td>running</td>
<td>172.20.20.11/24</td>
<td>3fff:172:20:20::b/64</td>
</tr>
<tr>
<td>2</td>
<td>clab-srlceos01-srl</td>
<td>6af1e33f4573</td>
<td><a href="http://ghcr.io/nokia/srlinux">ghcr.io/nokia/srlinux</a></td>
<td>nokia_srlinux</td>
<td>running</td>
<td>172.20.20.10/24</td>
<td>3fff:172:20:20::a/64</td>
</tr>
</tbody>
</table>
<h2>1.5 连接到节点</h2>
<p>我们知道你迫不及待想要操作这些节点,那就让我们连接到它们。网络工程师与网络设备交互的常用方式是通过命令行界面(CLI)。对于网络操作系统,你可以使用SSH,通过分配给容器的管理地址或节点名称连接到CLI:</p>
<pre><code class="language-text">❯ ssh admin@clab-srlceos01-srl
Using configuration file(s): []
Welcome to the srlinux CLI.
Type 'help' (and press &lt;ENTER&gt;) if you need any help using this.
--{ running }--[]--
A:srl#
</code></pre>
<h3>1.5.1 注意</h3>
<p>对于每种受支持的节点类型,我们都记录了管理接口以及使用它们的方法。</p>
<p>例如,<code>srl</code>类型的文档提供了使用SSH和gNMI接口的命令。<code>ceos</code>类型有自己的使用说明 。</p>
<p>以下表格汇总了获取每个实验室节点CLI访问权限的方法:</p>
<table>
<thead>
<tr>
<th>诺基亚SR Linux</th>
<th>Arista cEOS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker exec -it clab-srlceos01-srl sr_cli</code>(访问CLI)<code>docker exec -it clab-srlceos01-srl bash</code>(访问bash)</td>
<td><code>docker exec -it clab-srlceos01-ceos Cli</code>(访问CLI)<code>docker exec -it clab-srlceos01-ceos bash</code>(访问bash)</td>
</tr>
</tbody>
</table>
<p>你可以随意探索节点、配置它们,并运行你喜欢的网络协议。如果操作失误,随时可以销毁实验室并重新开始。说到这里……</p>
<h2>1.6 销毁实验室</h2>
<p>要删除实验室,使用 <code>destroy</code>命令,该命令以拓扑文件为参数:</p>
<pre><code class="language-Bash">sudo containerlab destroy

</code></pre>
页: [1]
查看完整版本: Containerlab 快速入门