インストール
環境
Server: 4Core mem 16GB
OS: Ubuntu 20.04.1
Docker
aptやrpmのデストロパッケージでもいいかもしれないけど念のため最新版インストール。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
コンテナイメージ取得
Aristaのサイトにユーザー登録し、ログイン(詳細省略)
https://www.arista.com/jp/user-registration
下記サイトからcEOSをダウンロード(なぜかtar.xzではなくtarファイルが落ちてきた)
https://www.arista.com/jp/support/software-download
ここではcEOS64-lab-4.27.0F.tarを利用
ダウンロードしたイメージをDockerにimport
$ sudo docker import cEOS64-lab-4.27.0F.tar ceos:4.27.0F
# 1分ぐらいかかる
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ceos 4.27.0F 831f8479cf54 10 seconds ago 1.73GB
ceos起動テスト
$ sudo docker create \
--name=ceos \
--privileged \
-e INTFTYPE=eth \
-e ETBA=1 \
-e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
-e CEOS=1 -e EOS_PLATFORM=ceoslab \
-e container=docker \
-i -t ceos:4.27.0F /sbin/init \
systemd.setenv=INTFTYPE=eth \
systemd.setenv=ETBA=1 \
systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \
systemd.setenv=CEOS=1 \
systemd.setenv=EOS_PLATFORM=ceoslab \
systemd.setenv=container=docker
# cEOS起動
$ sudo docker start ceos
# cEOSコンテナの起動確認
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55ee1850ab59 ceos:4.27.0F "/sbin/init systemd.…" 38 seconds ago Up 23 seconds ceos
# ターミナルログインしてみる
$ sudo docker exec -it ceos Cli
localhost>show version
Arista cEOSLab
Hardware version:
Serial number:
Hardware MAC address: Not available
System MAC address: Not available
Software image version: 4.27.0F-24308433.4270F (engineering build)
Architecture: x86_64
Internal build version: 4.27.0F-24308433.4270F
Internal build ID: 9088210e-613b-47db-b273-7c7b8d45a086
Image format version: 1.0
cEOS tools version: 1.1
Kernel version: 5.11.0-1022-azure
Uptime: 1 minute
Total memory: 16395120 kB
Free memory: 14754252 kB
# cEOSログアウト
localhost>quit
# cEOSコンテナ停止&削除
$ sudo docker stop ceos
ceos
$ sudo docker rm ceos
ceos
docker-topoインストール
dockerコマンドでも良いけどnetworkの設定が面倒なので簡単にnodeの作成とnode間リンクを作成できるdocker-topo
を利用して下記トポロジーを作成してみる。
$ sudo apt-get install -y python3-pip python-is-python3
$ sudo python3 -m pip install --upgrade --user git+https://github.com/networkop/docker-topo.git
# コマンドにパスが通ってないのでシンボリックリンク作成
$ sudo ln -s /root/.local/bin/docker-topo /usr/local/bin/docker-topo
# デフォルトで使われるceosイメージがceos:latestなのでタグ作成
$ sudo docker tag ceos:4.27.0F ceos:latest
$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ceos 4.27.0F 831f8479cf54 41 minutes ago 1.73GB
ceos latest 831f8479cf54 41 minutes ago 1.73GB
# 下記設定ファイル作成。
$ cat testnet.yaml
VERSION: 2
driver: veth
links:
- endpoints: ["spine:eth1", "leaf1:eth1"]
- endpoints: ["spine:eth2", "leaf2:eth1"]
# docker-topo実行
$ sudo docker-topo --create testnet.yaml
INFO:__main__:
alias spine='docker exec -it testnet_spine Cli'
alias leaf1='docker exec -it testnet_leaf1 Cli'
alias leaf2='docker exec -it testnet_leaf2 Cli'
INFO:__main__:All devices started successfully
WARNING:pyroute2.ipdb.main:shutdown in progress
# ceosコンテナ起動
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f56757681a9 ceos:latest "/sbin/init systemd.…" 4 minutes ago Up 4 minutes testnet_leaf2
c3ac12303145 ceos:latest "/sbin/init systemd.…" 4 minutes ago Up 4 minutes testnet_leaf1
44d7b1386acc ceos:latest "/sbin/init systemd.…" 4 minutes ago Up 4 minutes testnet_spine
# 接続してみる
$ sudo docker exec -it testnet_spine Cli
localhost>
注意:Config保存
eosのwriteコマンドではConfigが保存されない。 ホストのdocker-topoでrunning configが保存される。次回docker-topo --create testnet.yaml
すると保存したconfigで起動する。
# configの保存
$ sudo docker-topo -s testnet.yaml
INFO:__main__:All configs saved in ./config
# config ディレクトリができる
$ ls -a ./config/
. .. testnet_leaf1 testnet_leaf2 testnet_spine
# configが保存されている
$ cat ./config/testnet_leaf1
> show running
! Command: show running-config at line 1
! device: localhost (cEOSLab, EOS-4.27.0F-24308433.4270F (engineering build))
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
##### <SNIP > ######
注意:docker-topo設定ファイル変更
testnet.yaml
のような設定ファイルを変更する前に全EOSコンテナを停止する。停止する前にtestnet.yaml
を変更してしまうとdocker-topoコマンドから 全EOSコンテナを停止できなくなる。(docker コマンドでゴミ掃除が必要になる)
コンテナの停止は下記で。
$ sudo docker-topo --destroy testnet.yaml