Arista cEOS docker-topoを使った操作例

スポンサーリンク

Arista cEOSの使い方について説明します。cEOSはAristaのコンテナ版ネットワーク機器です。このページではdocker-topoを使ったcEOSの操作例を紹介します。

docker-topoはcEOSのネットワーク構成をyamlファイルで定義する事ができる便利ツールです。

事前準備

Arista cEOSの基本的な使い方を見ながら、Arista cEOSのDockerイメージのインポートが完了している前提で操作方法を説明します。

docker-topoのインストール

venvへのインストール(推奨)

docker-topoはpythonモジュールとして提供されるツールです。python venv環境へインストールする操作例は以下の通りです。<venv_name>は何か分かりやすい名前をつけておくと良いでしょう。

python3 -m venv <venv_name>
source <venv_name>/bin/activate
pip install git+https://github.com/networkop/docker-topo.git

docker-topoがインストールされた事を確認します。

(py-arista) [root@sandbox019 ~]# pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
certifi (2020.6.20)
chardet (3.0.4)
docker (4.3.1)
docker-topo (2.0.3)
idna (2.10)
importlib-resources (3.0.0)
netaddr (0.8.0)
packaging (20.4)
pip (9.0.3)
pyparsing (2.4.7)
pyroute2 (0.5.3)
PyYAML (5.3.1)
requests (2.24.0)
setuptools (39.2.0)
six (1.15.0)
urllib3 (1.25.10)
websocket-client (0.57.0)
zipp (3.3.0)
You are using pip version 9.0.3, however version 20.2.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(py-arista) [root@sandbox019 ~]# 

非venvへのインストール(非推奨)

非推奨ですが、非venv環境にインストールすることもできます。非venvにインストールする操作例は以下の通りです。

pip3 install git+https://github.com/networkop/docker-topo.git

docker-topoがインストールされた事を確認します。

[root@sandbox019 ~]# pip3 list | grep docker
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
docker (4.3.1)
docker-compose (1.27.4)
docker-topo (2.0.3)
dockerpty (0.4.1)
[root@sandbox019 ~]# 

docker-topoの操作例

docker-topoに読み込ませる構成ファイルは、GitHubにサンプルが掲載されています。まずはサンプルを動かしてみましょう。

トポロジーファイルの作成

git cloneします。

git clone https://github.com/networkop/docker-topo.git

下記のディレクトリにサンプルとなる構成ファイルがいくつか格納されています。

(py-arista) [root@sandbox019 ~]# cd docker-topo/topo-extra-files/examples/v2
(py-arista) [root@sandbox019 v2]# ls -l
合計 52
drwxr-xr-x 3 root root  98 10月  4 16:40 14rtr
-rw-r--r-- 1 root root 151 10月  4 16:40 2-node-intf.yml
-rw-r--r-- 1 root root 217 10月  4 16:41 2-node.yml
-rw-r--r-- 1 root root 332 10月  4 16:40 3-node.yml
-rw-r--r-- 1 root root 508 10月  4 16:40 5-node-ls.yml
drwxr-xr-x 2 root root  63 10月  4 16:40 config
-rw-r--r-- 1 root root 266 10月  4 16:40 cvp.yml
-rw-r--r-- 1 root root 312 10月  4 16:40 macvlan.yml
-rw-r--r-- 1 root root 213 10月  4 16:40 mdriver.yml
-rw-r--r-- 1 root root 299 10月  4 16:40 mini.yml
-rw-r--r-- 1 root root 478 10月  4 16:40 openstack.yml
-rw-r--r-- 1 root root 282 10月  4 16:40 veos-3node.yml
-rw-r--r-- 1 root root 123 10月  4 16:40 veth.yml
-rw-r--r-- 1 root root 222 10月  4 16:40 vmx-csr-xrv.yml
-rw-r--r-- 1 root root 198 10月  4 16:40 vmx-csr.yml

cEOSのDockerイメージのリポジトリ名とタグ名を調べます。もし、インポートされていない方は、Arista cEOSの基本的な使い方を見ながら、Arista cEOSのDockerイメージをインポートしてください。

(py-arista) [root@sandbox019 v2]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ceos                4.24.2.2F           74bd2ae92ca7        4 hours ago         1.77GB

トポロジーファイルについて、CEOS_IMAGEの値を環境に合わせてリポジトリ名とタグ名を変更します。2-node.ymlの場合の編集例を以下に示します。

# vi 2-node.yml 
VERSION: 2
CEOS_IMAGE: ceos:4.24.2.2F
PUBLISH_BASE: 9000
driver: veth
links:
        - endpoints:
            - "Device-A:eth1" 
            - "Device-B:eth2"
        - endpoints: ["Device-A:eth2", "Device-B:eth1"]

コンテナの起動

docker-topoコマンドは–helpを付与すると使い方を調べる事ができます。

(py-arista) [root@sandbox019 v2]# docker-topo --help
usage: docker-topo [-h] [-d] [--create | --destroy] [-s] [-a] topology

Tool to create docker topologies

positional arguments:
  topology       Topology file

optional arguments:
  -h, --help     show this help message and exit
  -d, --debug    Enable Debug

Actions:
  Create or destroy topology

  --create       Create topology
  --destroy      Destroy topology

Save:
  Save or archive the topology

  -s, --save     Save topology configs
  -a, --archive  Archive topology file and configs

2-node.ymlで定義されたコンテナを起動する操作例は以下の通りです。

docker-topo --create 2-node.yml 

コマンドを実行すると以下のようなメッセージが出力されます。

(py-arista) [root@sandbox019 v2]# docker-topo --create 2-node.yml 
INFO:__main__:
alias Device-A='docker exec -it 2-node_Device-A Cli'
alias Device-B='docker exec -it 2-node_Device-B Cli'
INFO:__main__:All devices started successfully
WARNING:pyroute2.ipdb.main:shutdown in progress
WARNING:pyroute2.ipdb.main:shutdown in progress
(py-arista) [root@sandbox019 v2]#

コンテナへのログイン

docker ls コマンドなどでコンテナ名を調べます。

(py-arista) [root@sandbox019 v2]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
f038a4ce46cb        ceos:4.24.2.2F      "/sbin/init systemd.…"   About a minute ago   Up About a minute                       2-node_Device-B
05d53423c15d        ceos:4.24.2.2F      "/sbin/init systemd.…"   About a minute ago   Up About a minute                       2-node_Device-A

docker execコマンドなどでコンテナへログインします。

docker exec -i -t 2-node_Device-A Cli
docker exec -i -t 2-node_Device-B Cli

操作画面は以下のようになります。

docker-topoの操作例01

設定の保存

docker-topoで作成されたトポロジーは、configディレクトリに格納された設定ファイルを読み込む仕様になっています。ですので、設定をconfig配下に保存しておけば、次回、検証時に初期設定を読み込む事ができます。

作成する設定を保存するには、docker-topo –saveを使用します。コマンドの実行例は以下の通りです。

docker-topo --save 2-node.yml

config配下に設定が保存された事を確認します。

(py-arista) [root@sandbox019 v2]# docker-topo --save 2-node.yml 
Config directory exists, existing files may be overwritten. Continue? [y/n]:y
INFO:__main__:All configs saved in /root/docker-topo/topo-extra-files/examples/v2/./config
(py-arista) [root@sandbox019 v2]# ls -l config/
合計 20
-rw-r--r-- 1 root root 644 10月  4 17:13 2-node_Device-A
-rw-r--r-- 1 root root 531 10月  4 17:13 2-node_Device-B
-rw-r--r-- 1 root root  18 10月  4 16:40 veos_vEOS-1
-rw-r--r-- 1 root root  18 10月  4 16:40 veos_vEOS-2
-rw-r--r-- 1 root root  18 10月  4 16:40 veos_vEOS-3
(py-arista) [root@sandbox019 v2]#

検証の終了

検証を終了する時は以下のコマンドを実行します。コンテナおよびネットワークが削除されます。

docker-topo --destroy 2-node.yml
タイトルとURLをコピーしました