概要
ContainerLabはネットワークOSをコンテナ化し、それらをユーザー定義の柔軟なトポロジーで接続して仮想ラボ環境を構築するためのツールです。
今回はWSL2上のAlmaLinuxで動かしてみたので内容を残したいと思います。
環境
WSL2上でAlmaLinux 9.38(Shamrock Pampas Cat)を起動
コンテナの実行環境はPodmanを利用します(事前にインストール済み)
SELinuxは無効化しています
手順
- インストール
さっそくインストールを実施します。
公式ドキュメントを確認 containerlab.dev
セットアップ用のスクリプトを実行してみますがエラーが出てしまいました。 OSはUbuntu/Debian/REHL/CentOS/Rockyのみしかサポートしてないようです。
$ curl -sL https://containerlab.dev/setup | sudo -E bash -s "all" This is not a supported OS. (Debian, Ubuntu, Fedora, Rocky, CentOS, RHEL)
気を取り直してPackage managerからインストールを試みます。
リポジトリを追加し、gpgcheckをオフにしてからdnf installで取得します。
$ sudo dnf config-manager -y --add-repo "https://netdevops.fury.site/yum/" && \ echo "gpgcheck=0" | sudo tee -a /etc/yum.repos.d/netdevops.fury.site_yum_.repo $ sudo dnf install containerlab AlmaLinux 9 - AppStream 6.1 kB/s | 4.2 kB 00:00 AlmaLinux 9 - AppStream 9.1 MB/s | 15 MB 00:01 AlmaLinux 9 - BaseOS 5.7 kB/s | 3.8 kB 00:00 AlmaLinux 9 - BaseOS 7.5 MB/s | 17 MB 00:02 AlmaLinux 9 - Extras 4.7 kB/s | 3.3 kB 00:00 AlmaLinux 9 - Extras 18 kB/s | 13 kB 00:00 cuda-rhel9-x86_64 42 kB/s | 3.5 kB 00:00 cuda-rhel9-x86_64 1.7 MB/s | 2.6 MB 00:01 Extra Packages for Enterprise Linux 9 - x86_64 21 kB/s | 16 kB 00:00 Extra Packages for Enterprise Linux 9 - x86_64 9.7 MB/s | 23 MB 00:02 created by dnf config-manager from https://netdevops.fury.site/yum/ 128 kB/s | 246 kB 00:01 Dependencies resolved. ========================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================== Installing: containerlab x86_64 0.67.0-1 netdevops.fury.site_yum_ 17 M Transaction Summary ========================================================================================================================================== Install 1 Package Total download size: 17 M Installed size: 46 M Is this ok [y/N]: y Downloading Packages: containerlab_0.67.0_linux_amd64.rpm 2.7 MB/s | 17 MB 00:06 ------------------------------------------------------------------------------------------------------------------------------------------ Total 2.7 MB/s | 17 MB 00:06 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : containerlab-0.67.0-1.x86_64 1/1 warning: Unable to get systemd shutdown inhibition lock: Could not activate remote peer. Running scriptlet: containerlab-0.67.0-1.x86_64 1/1 groupadd: group 'clab_admins' already exists Please run the command 'sudo usermod -aG clab_admins <insert your username here> && newgrp clab_admins' to ensure that you are part of the Container admin group. You can check this by running 'groups'. Verifying : containerlab-0.67.0-1.x86_64 1/1 Installed: containerlab-0.67.0-1.x86_64 Complete!
無事にインストールが完了しました。
containerlabコマンドが利用可能になりました。
エイリアスとしてclabも登録されていますので、clabでも起動が可能です。
$ clab
deploy container based lab environments with a user-defined interconnections
Usage:
containerlab [command]
Aliases:
containerlab, clab
Available Commands:
completion generate completion script
config configure a lab
deploy deploy a lab
destroy destroy a lab
exec execute a command on one or multiple containers
generate generate a Clos topology file, based on provided flags
graph generate a topology graph
help Help about any command
inspect inspect lab details
redeploy destroy and redeploy a lab
save save containers configuration
tools various tools your lab might need
version Show containerlab version or upgrade
Flags:
-d, --debug count enable debug mode
-h, --help help for containerlab
--log-level string logging level; one of [trace, debug, info, warning, error, fatal] (default "info")
--name string lab name
-r, --runtime string container runtime
--timeout duration timeout for external API requests (e.g. container runtimes), e.g: 30s, 1m, 2m30s (default 2m0s)
-t, --topo string path to the topology file
--vars string path to the topology template variables file
Use "containerlab [command] --help" for more information about a command.
2. トポロジーファイルの作成
続いてcontainerlabでデプロイする環境を登録するトポロジーファイルを作成します。
ファイルは.clab.yml or .clab.yamlで作成します。中身はYAMLファイルです。
今回はタイトル通りにSRLinuxで構築します。
トポロジーで定義したイメージファイルが存在しない場合、起動時にpullする動きになります。
name: demo mgmt: network: podman_clab_mgmt ipv4-subnet: 172.20.1.0/24 ipv4-gw: 172.20.1.254 topology: kinds: nokia_srlinux: image: ghcr.io/nokia/srlinux:25.3.1 nodes: leaf1: kind: nokia_srlinux type: ixrd2l mgmt-ipv4: 172.20.1.2
mgmtはマネジメントネットワークでホストからアクセスする際のネットワークになります。
指定をしない場合、172.20.20.0/24で作成されます。
ipv4-gwを指定しない場合、サブネットで利用可能な最初のIPが自動的にアサインされるようです。
typeはノードがエミュレートするハードウェアバリアントを定義できるものです。
SRLinuxで定義できるtypeは以下で確認ができます。今回はデフォルト値のixrd2を選択しました。
※typeはCiscoのIOLなどはL2かRTかの選択などにも利用されるようでノードにより使い方は様々なようです。
3. ラボの起動
clab deployコマンドでラボを起動します。
-tのオプションで作成したトポロジーファイルを指定することも可能です。
省略した場合、カレントディレクトリの中から*.clab.(yaml|yaml)のファイルが選択されます
$ clab deploy -t topo.clab.yml 20:45:53 INFO Containerlab started version=0.67.0 20:45:53 INFO Parsing & checking topology file=topo.clab.yml Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
実行が失敗しました、ContainerLabのデフォルトのコンテナ実行エンジンはDockerのためPodmanで動かすことをオプションで指定する必要があります。
コマンド起動時に--runtime or -rでpodmanを与えるか、環境変数CLAB_RUNTIMEでpodmanを定義することで
指定が可能です。
$ clab deploy -t topo.clab.yml -r podman 20:46:17 INFO Containerlab started version=0.67.0 20:46:17 INFO Parsing & checking topology file=topo.clab.yml Error: unable to connect to Podman socket: Get "http://d/v5.4.0/libpod/_ping": dial unix /run//podman/podman.sock: connect: no such file or directory
ランタイムを指定しても失敗してしまいました。
Podmanで動かす場合は、Podmanサービスを有効にする必要があるようです。
$ sudo systemctl enable podman Created symlink /etc/systemd/system/default.target.wants/podman.service → /usr/lib/systemd/system/podman.service. $ sudo systemctl start podman
再度起動
$ clab deploy -t topo.clab.yml -r podman 20:47:34 INFO Containerlab started version=0.67.0 20:47:34 INFO Parsing & checking topology file=topo.clab.yml Trying to pull ghcr.io/nokia/srlinux:25.3.1... Getting image source signatures Copying blob sha256:006a9eaa09f95444739324470ae5cb3f613568a540c349c41d45d6093404c6ea Copying config sha256:afd4d4a4aee01b70439d89631eb313a8012c3844145f8be7531d696be263936b Writing manifest to image destination 20:48:15 INFO Creating lab directory path=/home/usaen/clab/clab-demo 20:48:15 INFO Running postdeploy actions kind=nokia_srlinux node=leaf1 20:48:27 INFO Adding host entries path=/etc/hosts 20:48:27 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-demo.conf ╭─────────────────┬──────────────────────────────┬─────────┬────────────────╮ │ Name │ Kind/Image │ State │ IPv4/6 Address │ ├─────────────────┼──────────────────────────────┼─────────┼────────────────┤ │ clab-demo-leaf1 │ nokia_srlinux │ running │ 172.20.0.1 │ │ │ ghcr.io/nokia/srlinux:25.3.1 │ │ N/A │ ╰─────────────────┴──────────────────────────────┴─────────┴────────────────╯
無事起動しました。
コンテナイメージは、rootのpodman imagesに格納されるようでした。
実行が完了するとclab-トポロジーネームでディレクトリが作成されます。
中にはAnsibleインベントリやNornirインベントリなどが作成されます。
起動時に-dオプションをつけると詳細なログの出力が可能です。
アクセス確認
clab inspectコマンドでラボの状態を確認可能です。
デフォルトでは、カレントディレクトリのラボの状態が表示されます。 -aオプションをつけることで、起動中のすべてラボの状態を見ることも可能です。
$ clab inspect -a -r podman ╭───────────────┬──────────┬─────────────────┬──────────────────────────────┬─────────┬────────────────╮ │ Topology │ Lab Name │ Name │ Kind/Image │ State │ IPv4/6 Address │ ├───────────────┼──────────┼─────────────────┼──────────────────────────────┼─────────┼────────────────┤ │ topo.clab.yml │ demo │ clab-demo-leaf1 │ nokia_srlinux │ running │ 172.20.0.1 │ │ │ │ │ ghcr.io/nokia/srlinux:25.3.1 │ │ N/A │ ╰───────────────┴──────────┴─────────────────┴──────────────────────────────┴─────────┴────────────────╯
podman exec -it コンテナ名 sr_cliでコンソールアクセスするが可能です。
$ sudo podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1d50e511252 ghcr.io/nokia/srlinux:25.3.1 sudo bash -c touc... 21 minutes ago Up 21 minutes (starting) clab-demo-leaf1 $ sudo podman exec -it clab-demo-leaf1 sr_cli
SSHでアクセスする場合は、ssh admin@コンテナ名でアクセスが可能です。
初期パスワードはNokiaSrl1!です
$ ssh admin@clab-demo-leaf1 Warning: Permanently added 'clab-demo-leaf1' (ED25519) to the list of known hosts. ................................................................ : Welcome to Nokia SR Linux! : : Open Network OS for the NetOps era. : : : : This is a freely distributed official container image. : : Use it - Share it : : : : Get started: https://learn.srlinux.dev : : Container: https://go.srlinux.dev/container-image : : Docs: https://doc.srlinux.dev/25-3 : : Rel. notes: https://doc.srlinux.dev/rn25-3-1 : : YANG: https://yang.srlinux.dev/v25.3.1 : : Discord: https://go.srlinux.dev/discord : : Contact: https://go.srlinux.dev/contact-sales : ................................................................ (admin@clab-demo-leaf1) Password:
ラボの終了
ラボの終了はdestroyコマンドで実行します。
clab destroy -r podman 14:23:47 INFO Parsing & checking topology file=topo.clab.yml 14:23:47 INFO Parsing & checking topology file=topo.clab.yml 14:23:47 INFO Destroying lab name=demo 14:23:47 INFO Removing host entries path=/etc/hosts 14:23:47 INFO Removing SSH config path=/etc/ssh/ssh_config.d/clab-demo.conf
おまけ
PodmanでContainerLabを利用するのは実験的なサポートのようなので機能をフルに使えない可能性があります。
ラボを削除する際にmgmtで指定したブリッジが削除されずに、ラボの再起動がうまくいかなかったりします。
起動前に、ブリッジを削除すれば問題なく起動できました。
$ clab dep -r podman 14:25:04 INFO Containerlab started version=0.67.0 14:25:04 INFO Parsing & checking topology file=topo.clab.yml Error: subnet 172.20.1.0/24 is already used on the host or by another config $ sudo nmcli dev del podman1 Device 'podman1' successfully removed. $ sudo clab dep -r podman 14:26:03 INFO Containerlab started version=0.67.0 14:26:03 INFO Parsing & checking topology file=topo.clab.yml 14:26:03 INFO Creating lab directory path=/home/usaen/clab/clab-demo 14:26:03 INFO Running postdeploy actions kind=nokia_srlinux node=leaf1 14:26:10 INFO Adding host entries path=/etc/hosts 14:26:10 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-demo.conf ╭─────────────────┬──────────────────────────────┬─────────┬────────────────╮ │ Name │ Kind/Image │ State │ IPv4/6 Address │ ├─────────────────┼──────────────────────────────┼─────────┼────────────────┤ │ clab-demo-leaf1 │ nokia_srlinux │ running │ 172.20.1.2 │ │ │ ghcr.io/nokia/srlinux:25.3.1 │ │ N/A │
ラボを何度も作ったり壊したりする場合、 SSHでアクセスするのでknown_hostsの登録はスキップするように設定しておくのが楽でした。
おわり
無事に起動することができました。
RockyやRHELを利用する場合はスクリプト一発で終わるので非常に簡単です。
SRLinuxを利用してネットワークの勉強をしていこうと思います。