<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michał Bakalarski</title>
    <description>The latest articles on DEV Community by Michał Bakalarski (@mbakalarski).</description>
    <link>https://dev.to/mbakalarski</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3616831%2F58114737-698c-47e2-aaf7-6dde09936bb1.png</url>
      <title>DEV Community: Michał Bakalarski</title>
      <link>https://dev.to/mbakalarski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mbakalarski"/>
    <language>en</language>
    <item>
      <title>Building a Network Lab on Kubernetes with netclab-chart</title>
      <dc:creator>Michał Bakalarski</dc:creator>
      <pubDate>Tue, 18 Nov 2025 08:13:54 +0000</pubDate>
      <link>https://dev.to/mbakalarski/building-a-network-lab-on-kubernetes-with-netclab-chart-2jjk</link>
      <guid>https://dev.to/mbakalarski/building-a-network-lab-on-kubernetes-with-netclab-chart-2jjk</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Setting up a network lab traditionally requires expensive hardware and a lot of manual effort. With &lt;strong&gt;netclab-chart&lt;/strong&gt;, you can spin up a virtual lab directly on Kubernetes using containerized network OS images like SR Linux or FRRouting.&lt;/p&gt;

&lt;p&gt;This post walks through &lt;strong&gt;Day 1&lt;/strong&gt;: installing the lab, running containerized routers, and exploring basic connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use netclab-chart?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Quickly deploy virtual network topologies in Kubernetes&lt;/li&gt;
&lt;li&gt;Test automation scripts and network protocols safely&lt;/li&gt;
&lt;li&gt;Reproducible lab environments for experimentation&lt;/li&gt;
&lt;li&gt;Supports multiple vendor NOS containers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before installing Netclab Chart, ensure the following are present:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation" rel="noopener noreferrer"&gt;kind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/" rel="noopener noreferrer"&gt;kubectl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://helm.sh/docs/intro/install/" rel="noopener noreferrer"&gt;helm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kind cluster:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kind create cluster &lt;span class="nt"&gt;--name&lt;/span&gt; netclab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;CNI bridge and host-device plugins:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;netclab-control-plane bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s1"&gt;'curl -L https://github.com/containernetworking/plugins/releases/download/v1.8.0/cni-plugins-linux-amd64-v1.8.0.tgz \
| tar -xz -C /opt/cni/bin ./bridge ./host-device'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Multus CNI plugin:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml
kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system &lt;span class="nb"&gt;wait&lt;/span&gt; &lt;span class="nt"&gt;--for&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.status.numberReady}'&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nt"&gt;--timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5m daemonset.apps/kube-multus-ds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add helm repo for netclab chart:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add netclab https://mbakalarski.github.io/netclab-chart
helm repo update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;After installation, you can manage your topology using the YAML file.&lt;br&gt;
Pods will be created according to the topology definition.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
Node and network names must be valid Kubernetes resource names and also acceptable as Linux interface names.&lt;br&gt;
Avoid uppercase letters, underscores, or special characters.&lt;br&gt;
For SR Linux nodes, interface names in the YAML configuration must follow the format e1-x (for example, e1-1, e1-2, etc.).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Configuration options are documented in the table below.&lt;br&gt;
You can override these values in your own file.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Defaults&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topology.networks.type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type of connection between nodes. Can be &lt;code&gt;bridge&lt;/code&gt; or &lt;code&gt;veth&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;veth&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topology.nodes.type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type of node. Can be: &lt;code&gt;srlinux&lt;/code&gt;, &lt;code&gt;frrouting&lt;/code&gt;, &lt;code&gt;linux&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topology.nodes.image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Container images used for topology nodes.&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ghcr.io/nokia/srlinux:latest&lt;/code&gt;&lt;br&gt;&lt;code&gt;quay.io/frrouting/frr:8.4.7&lt;/code&gt;&lt;br&gt;&lt;code&gt;bash:latest&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topology.nodes.memory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memory allocation per node type.&lt;/td&gt;
&lt;td&gt;srlinux: &lt;code&gt;4Gi&lt;/code&gt;&lt;br&gt;frr: &lt;code&gt;512Mi&lt;/code&gt;&lt;br&gt;linux: &lt;code&gt;200Mi&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;topology.nodes.cpu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CPU allocation per node type.&lt;/td&gt;
&lt;td&gt;srlinux: &lt;code&gt;2000m&lt;/code&gt;&lt;br&gt;frr: &lt;code&gt;500m&lt;/code&gt;&lt;br&gt;linux: &lt;code&gt;200m&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Example topology
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;+--------+
| h01    |
|        |
|    e1  |
+--------+
    |
    b2
    |
+-----------+          +-----------+
| e1-2      |          | srl02 or  |
|           |          | frr02     |
|           |          |           |
|       e1-1| -- b1 -- | e1-1      |
|           |          |           |
|           |          |           |
| srl01 or  |          |           |
| frr01     |          |     e1-2  |
+-----------+          +-----------+
                              |
                              b3
                              |
                         +--------+
                         |     e1 |
                         |        |
                         | h02    |
                         +--------+
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can follow instructions for SRLinux or/and FRRouting.&lt;br&gt;
The topologies are independent and can run in separate Kubernetes namespaces. SRLinux pods are placed in dc1-ns, FRRouting - in default namespace.&lt;/p&gt;

&lt;p&gt;To get the topology YAML files and router configurations, clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/mbakalarski/netclab-chart.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;netclab-chart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  SRLinux
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Start nodes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;dc1 netclab/netclab &lt;span class="nt"&gt;--values&lt;/span&gt; ./examples/topology-srlinux.yaml &lt;span class="nt"&gt;--namespace&lt;/span&gt; dc1-ns &lt;span class="nt"&gt;--create-namespace&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl config set-context &lt;span class="nt"&gt;--current&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt; dc1-ns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pod

NAME                 READY   STATUS    RESTARTS   AGE
h01                  1/1     Running   0          12s
h02                  1/1     Running   0          12s
srl01                1/1     Running   0          12s
srl02                1/1     Running   0          12s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configure nodes (repeat if they're not ready yet):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.20.0.2/24 dev e1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ip route replace 172.30.0.0/24 via 172.20.0.1

kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h02 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.30.0.2/24 dev e1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h02 &lt;span class="nt"&gt;--&lt;/span&gt; ip route replace 172.20.0.0/24 via 172.30.0.1

kubectl &lt;span class="nb"&gt;cp&lt;/span&gt; ./examples/srl01.cfg srl01:/srl01.cfg
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;srl01 &lt;span class="nt"&gt;--&lt;/span&gt; bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'sr_cli --candidate-mode --commit-at-end &amp;lt; /srl01.cfg'&lt;/span&gt;

kubectl &lt;span class="nb"&gt;cp&lt;/span&gt; ./examples/srl02.cfg srl02:/srl02.cfg
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;srl02 &lt;span class="nt"&gt;--&lt;/span&gt; bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'sr_cli --candidate-mode --commit-at-end &amp;lt; /srl02.cfg'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;All changes have been committed. Leaving candidate mode.
All changes have been committed. Leaving candidate mode.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test (convergence may take time):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ping 172.30.0.2 &lt;span class="nt"&gt;-I&lt;/span&gt; 172.20.0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;LLDP neighbor information:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;srl01 &lt;span class="nt"&gt;--&lt;/span&gt; sr_cli show system lldp neighbor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  +--------------+-------------------+----------------------+---------------------+------------------------+----------------------+---------------+
  |     Name     |     Neighbor      | Neighbor System Name | Neighbor Chassis ID | Neighbor First Message | Neighbor Last Update | Neighbor Port |
  +&lt;span class="o"&gt;==============&lt;/span&gt;+&lt;span class="o"&gt;===================&lt;/span&gt;+&lt;span class="o"&gt;======================&lt;/span&gt;+&lt;span class="o"&gt;=====================&lt;/span&gt;+&lt;span class="o"&gt;========================&lt;/span&gt;+&lt;span class="o"&gt;======================&lt;/span&gt;+&lt;span class="o"&gt;===============&lt;/span&gt;+
  | ethernet-1/1 | 00:01:03:FF:00:00 | srl02                | 00:01:03:FF:00:00   | 47 seconds ago         | 24 seconds ago       | ethernet-1/1  |
  +--------------+-------------------+----------------------+---------------------+------------------------+----------------------+---------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  FRRouting
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Start nodes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl config set-context &lt;span class="nt"&gt;--current&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt; default
helm &lt;span class="nb"&gt;install &lt;/span&gt;dc2 netclab/netclab &lt;span class="nt"&gt;--values&lt;/span&gt; ./examples/topology-frrouting.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME               READY   STATUS    RESTARTS   AGE
frr01              1/1     Running   0          6s
frr02              1/1     Running   0          6s
h01                1/1     Running   0          6s
h02                1/1     Running   0          6s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configure nodes (repeat if they're not ready yet):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.20.0.2/24 dev e1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ip route replace 172.30.0.0/24 via 172.20.0.1

kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h02 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.30.0.2/24 dev e1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h02 &lt;span class="nt"&gt;--&lt;/span&gt; ip route replace 172.20.0.0/24 via 172.30.0.1

kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; ip address add 10.0.0.1/32 dev lo
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 10.0.1.1/24 dev e1-1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.20.0.1/24 dev e1-2
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;touch&lt;/span&gt; /etc/frr/vtysh.conf
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'s/bgpd=no/bgpd=yes/g'&lt;/span&gt; /etc/frr/daemons
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; /usr/lib/frr/frrinit.sh start
kubectl &lt;span class="nb"&gt;cp&lt;/span&gt; ./examples/frr01.cfg frr01:/frr01.cfg
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr01 &lt;span class="nt"&gt;--&lt;/span&gt; vtysh &lt;span class="nt"&gt;-f&lt;/span&gt; /frr01.cfg

kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; ip address add 10.0.0.2/32 dev lo
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 10.0.1.2/24 dev e1-1
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; ip address replace 172.30.0.1/24 dev e1-2
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;touch&lt;/span&gt; /etc/frr/vtysh.conf
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'s/bgpd=no/bgpd=yes/g'&lt;/span&gt; /etc/frr/daemons
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; /usr/lib/frr/frrinit.sh start
kubectl &lt;span class="nb"&gt;cp&lt;/span&gt; ./examples/frr02.cfg frr02:/frr02.cfg
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;frr02 &lt;span class="nt"&gt;--&lt;/span&gt; vtysh &lt;span class="nt"&gt;-f&lt;/span&gt; /frr02.cfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Starting watchfrr with &lt;span class="nb"&gt;command&lt;/span&gt;: &lt;span class="s1"&gt;'  /usr/lib/frr/watchfrr  -d  -F traditional   zebra bgpd staticd'&lt;/span&gt;
Started watchfrr
Starting watchfrr with &lt;span class="nb"&gt;command&lt;/span&gt;: &lt;span class="s1"&gt;'  /usr/lib/frr/watchfrr  -d  -F traditional   zebra bgpd staticd'&lt;/span&gt;
Started watchfrr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test (convergence may take time):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;h01 &lt;span class="nt"&gt;--&lt;/span&gt; ping 172.30.0.2 &lt;span class="nt"&gt;-I&lt;/span&gt; 172.20.0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Uninstall topologies
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;dc1:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm uninstall dc1 &lt;span class="nt"&gt;--namespace&lt;/span&gt; dc1-ns
kubectl delete ns dc1-ns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;dc2:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm uninstall dc2 &lt;span class="nt"&gt;--namespace&lt;/span&gt; default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;reset default context:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl config set-context --current --namespace default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;netclab-chart lets you quickly deploy a containerized network lab on Kubernetes, providing a safe and flexible environment for testing, automation, and learning.&lt;br&gt;
If you have questions or want to explore more ideas, feel free to drop them in the comments — I’m happy to answer and discuss.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>network</category>
      <category>devops</category>
      <category>netdevops</category>
    </item>
  </channel>
</rss>
