この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
ここでは、さまざまな種類のアプリケーションのホスティングについて説明し、iPerf などのシンプルなアプリケーションを IOS XR でネイティブに、またはサードパーティ製コンテナ内でホストする方法を示します。
IOS XR でのアプリケーションのホスティングは、2 つの形態で提供されます。
ネイティブ:IOS XR が提供するコンテナ内でアプリケーションをホストできます。アプリケーションは、パッケージ マネージャとして RPM を使用するシスコ固有の Linux ディストリビューション(River Linux 7)で構築する必要があります。アプリケーションは、IOS XR のルート ファイル システムにあるライブラリを使用します。Chef や Puppet などの設定管理ツールを使用して、アプリケーションのインストールを自動化できます。
コンテナ:IOS XR で独自のコンテナを作成し、そのコンテナ内でアプリケーションをホストします。アプリケーションは、Linux ディストリビューションを使用して開発できます。これは、IOS XR のルート ファイル システムが提供するものとは異なるシステム ライブラリを使用するアプリケーションに適しています。
要件と次の基準に応じて、アプリケーション ホスティングのタイプを選択できます。
リソース:ホストされているアプリケーションが消費するリソースの量を制御する必要がある場合は、制約事項を設定できるコンテナ モデルを選択する必要があります。ネイティブ モデルでは、内部 IOS XR プロセスと共有する割り当て済みのリソースを使用するアプリケーションのみを展開できます。
環境の選択:ネイティブにホストされるアプリケーションは、IOS XR が提供する Wind River 7 Linux ディストリビューションで構築する必要があります。アプリケーションの構築に使用する Linux ディストリビューションの選択肢を決定したら、コンテナ モデルを選択する必要があります。コンテナ モデルを使用してアプリケーションをホストすると、導入前にパッケージ化できます。
ここでは、SDK シェル スクリプトを使用したネイティブ アプリケーションのホスティングのワークフローを説明します。
SDK は Yocto プロジェクトのワークスペースを使用する Wind River Linux 7(WRL7)ディストリビューションで構築されています。
IOS XR は、ベースの 1 つとして Yocto プロジェクトからオープンな組み込み型カーネル インフラストラクチャを使用します。したがって、IOS XR には、すべてのシステム ライブラリと、アプリケーションをサポートするための基本的なツール チェーンが含まれています。その結果、IOS XR でネイティブにホストされるアプリケーションは Wind River ディストリビューション用に再構築する必要があります。また、テレメトリや YANG データ モデルなどの IOS XR の他の機能でそれらのアプリケーションをカスタマイズできます。
(注) |
ネイティブ アプリケーションのホスティング環境は QEMU ハイパーバイザを使用するか、または SDK シェル スクリプトを実行するかのいずれかで構築されます。 |
Yellowdog Updated, Modified(YUM)は、Linux 用のオープン ソースのコマンドライン パッケージ管理ユーティリティであり、組み込み型のディストリビューション ソース ファイルの作成や Red Hat パケット マネージャ(RPM)などの適切な形式へのコンパイルが可能です。YUM では、自動のパケット更新が許可されます。YUM を使用することで、入手可能なパッケージをインストール、削除、更新、および表示することができます。
シスコのリポジトリは、インターネット上でのアプリケーション開発者によるアクセスを可能にします。
開発者は、SDK をダウンロードし、インストール用の SDK シェルス クリプトを実行します。詳細については、「SDK シェル スクリプトを使用した相互ビルド環境の作成」を参照してください。
開発者は IOS XR でホストされるアプリケーションを再構築します。詳細については、「ネイティブ RPM の構築」を参照してください。
開発者はテスト ルータで再構築されたアプリケーションをホストします。
開発者は、IOS XR を実行するホスティング ルータで再構築されたアプリケーションをホストします。
ネイティブ アプリケーションをホスティングするビルド環境の準備については、ビルド環境のセットアップを参照してください。
ネイティブ アプリケーションのホスティングの例として、この項で説明するように、IOS XR に iPerf クライアントをネイティブにインストールして、別のルータにネイティブにインストールされた iPerf サーバとの接続を確認することができます。
次の図に、この例で使用されるトポロジを説明します。
iPerf サーバはルータ A に、iPerf クライアントはルータ B にインストールされています。どちらのインストールも IOS RX でネイティブに実行されます。iPerf クライアントは、IOS XR が提供するインターフェイスを通じて iPerf サーバと通信します。
2 つのルータがトポロジに示すように設定されていることを確認します。
ネイティブ アプリケーションとして iPerf を実行するには、次の手順を実行します。
ルータ A にログインし、XRNNS に入ります。
RP/0/RP0/CPU0:ios# run [xr-vm_node0_RP0_CPU0:~]$
ルータ A の RPM として iPerf サーバをインストールします。
[xr-vm_node0_RP0_CPU0:~]$yum install https://s3.amazonaws.com/alpha-builds/iperf-2.0.5.ios_xr6.x86_64.rpm
ステップ 1 と 2 を実行し、iPerf クライアントをルータ B にインストールします。
ルータ A の iPerf サーバのインストールを確認します。
[xr-vm_node0_RP0_CPU0:~]$ iperf -v iperf version 2.0.5 (08 Jul 2010) pthreads
同様に、ルータ B の iPerf クライアントのインストールを確認します。
ルータ A の Loopback0 インターフェイスを iPerf サーバにバインドし、iPerf サーバ インスタンスを起動します。
次の例では、1.1.1.1 はルータ A の Loopback0 インターフェイスの割り当てられたアドレス、57730 は通信に使用されるポート番号です。
[xr-vm_node0_RP0_CPU0:~]$ iperf -s -B 1.1.1.1 -p 57730 Server listening on TCP port 57730 Binding to local address 1.1.1.1 TCP window size: 85.3 KByte (default)
iPerf サーバに使用されているものと同じポート番号とルータ A の管理 IP アドレスを指定して、ルータ B の iPerf クライアント インスタンスを起動します。
次の例では、192.168.122.213 はルータ A の管理 IP アドレス、57730 は iPerf サーバへのアクセスに使用されるポート番号です。
[xr-vm_node0_RP0_CPU0:~]$ iperf -c 192.168.122.213 -p 57730 ------------------------------------------------------------ Client connecting to 192.168.122.213, TCP port 57730 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.122.1 port 46974 connected with 192.168.122.213 port 57730 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 146 MBytes 122 Mbits/sec
TCP ではなく UDP を使用して iPerf サーバと通信するには、次のコマンドを使用します。
[xr-vm_node0_RP0_CPU0:~]$ iperf -c 192.168.122.213 -p 57730 -u ------------------------------------------------------------ Client connecting to 192.168.122.213, UDP port 57730 Sending 1470 byte datagrams UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.122.1 port 41466 connected with 192.168.122.213 port 57730 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec [ 3] Sent 893 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.233 ms 0/ 893 (0%) [root@hostB ~]#
ルータ B の iPerf クライアントから iPerf サーバに ping を実行します。
[xr-vm_node0_RP0_CPU0:~]$ /bin/ping 192.164.168.10 PING 192.164.168.10 (192.164.168.10) 56(84) bytes of data. 64 bytes from 192.164.168.10: icmp_seq=1 ttl=255 time=13.0 ms 64 bytes from 192.164.168.10: icmp_seq=2 ttl=255 time=2.14 ms 64 bytes from 192.164.168.10: icmp_seq=3 ttl=255 time=2.21 ms
ルータ B でホストされている iPerf クライアントはルータ A でホストされている iPerf サーバにアクセスします。
iPerf 用のネイティブ アプリケーションは正常にホスティングされています。
iPerf のサーバ サービスまたはクライアント サービスは、IOS XR で自動的に起動、停止、または再起動できます。これを実現するには、次の例に示すように、System V(SysV)スクリプトを作成し、追加する必要があります。
iPerf サーバまたはクライアントを起動、停止、またはリロードする SysV スクリプトを作成します。
次の例では、iPerf サーバ用のスクリプトを作成します。また、iPerf クライアント用のスクリプトを作成するには、iPerf の設定手順のステップ 5 で説明したコマンドを使用します。
#!/bin/bash # # description: iPerf server # # Get function from functions library . /etc/init.d/functions # Start the service iperf start() { iperf -s -B 1.1.1.1 -p 57730 & "Starting the iPerf Server: " /path/to/iperf & ### Create the lock file ### touch /var/lock/subsys/iperf success $"iPerf server startup" echo } # Restart the service iperf stop() { iperf -s -B 1.1.1.1 -p 57730 & "Stopping the iPerf Server: " killproc iperf ### Delete the lock file ### rm -f /var/lock/subsys/iperf echo } ### main logic ### case "$1" in start) start ;; stop) stop ;; status) status iperf ;; restart|reload|condrestart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 1 esac exit 0
iPerf サーバまたはクライアントをホストする IOS XR にスクリプトを追加します。
bash-4.3# chkconfig --add iperf
ここでは、コンテナ アプリケーションのホスティングの概念を示し、そのワークフローについて説明します。
コンテナ アプリケーションのホスティングにより、アプリケーションが IOS XR の Linux コンテナ内の独自の環境とプロセス空間(名前空間)でホストできるようになります。アプリケーション開発者は、アプリケーション開発環境を完全に制御することができ、選択した Linux ディストリビューションを使用できます。アプリケーションは、IOS XR コントロール プレーン プロセスから隔離されていますが、XR GigE インターフェイスを通じて XR 外のネットワークに接続できます。また、アプリケーションは、IOS XR のローカル ファイル システムにも簡単にアクセスできます。
次の図に、アプリケーションをホストするための Linux コンテナを作成するワークフローを示します。完全な設定手順については、コンテナ アプリケーションとしての iPerf の実行を参照してください。
コンテナ アプリケーションのホスティングには 2 つのコンポーネントがあります。
Linux サーバ:アプリケーションを開発し、Linux コンテナ(LXC)を起動状態にし、コンテナ環境を準備するために使用するサーバです。
ルータ:実行するアプリケーションでコンテナをホストするために使用される 64 ビットの IOS XR を実行するルータです。
IOS XR を実行するルータに接続し、ルート ファイル システムをコピーします。
(注) |
サードパーティ製のネットワークの名前空間(TPNNS)を指定すると、デフォルトで LXC が TPNNS で起動します。 |
ルータの LXC を起動します。
IOS XR コンソール アクセスによりルータの LXC にログインします。
アプリケーションを手動で起動するか、または LXC の起動時にアプリケーションが自動的に起動するように設定します。
Linux ボックスなどのコンテナを使用してユーザ用のアプリケーションをインストールしたり、ホスティングしたりできます。
コンテナ アプリケーションのホスティングの例として、この項で説明するように、IOS XR の LXC 内に iPerf クライアントをインストールして、別のルータの LXC 内に インストールされた iPerf サーバとの接続を確認することができます。
次の図で、この例で使用されるトポロジを説明します。
iPerf サーバはルータ A に、iPerf クライアントはルータ B にインストールされています。どちらのインストールも 64 ビット IOS XR のコンテナ内で実行されます。iPerf クライアントは、IOS XR が提供するインターフェイスを通じて iPerf サーバと通信します。
2 つのルータがトポロジに示すように設定されていることを確認します。
アプリケーション コンテナとして iPerf を実行するには、次の手順を実行します。
ルータ A にログインし、XRNNS に入ります。
RP/0/RP0/CPU0:ios# run [xr-vm_node0_RP0_CPU0:~]$
LXC を起動します。
[xr-vm_node0_RP0_CPU0:~]$virsh -c lxc+tcp://10.11.12.15:16509/ -e ^Q console demo1
要求されたら、LXC にログインします。
Connected to domain demo Escape character is ^Q Kernel 3.14.23-WR7.0.0.2_standard on an x86_64 host login: Password:
ルータ A の LXC 内に iPerf サーバをインストールします。
[root@host ~]#apt-get install iperf
ステップ 1 ~ 4 を実行し、iPerf クライアントをルータ B にインストールします。
ルータ A の iPerf サーバのインストールを確認します。
[root@host ~]#iperf -v iperf version 2.0.5 (08 Jul 2010) pthreads
同様に、ルータ B の iPerf クライアントのインストールを確認します。
ルータ A の Loopback0 インターフェイスを iPerf サーバにバインドし、iPerf サーバ インスタンスを起動します。
次の例では、1.1.1.1 はルータ A の Loopback0 インターフェイスの割り当てられたアドレス、57730 は通信に使用されるポート番号です。
[root@host ~]#iperf -s -B 1.1.1.1 -p 57730 Server listening on TCP port 57730 Binding to local address 1.1.1.1 TCP window size: 85.3 KByte (default)
iPerf サーバに使用されているものと同じポート番号とルータ A の管理 IP アドレスを指定して、ルータ B の iPerf クライアント インスタンスを起動します。
次の例では、192.168.122.213 はルータ A の管理 IP アドレス、57730 は iPerf サーバへのアクセスに使用されるポート番号です。
[root@host ~]#iperf -c 192.168.122.213 -p 57730 ------------------------------------------------------------ Client connecting to 192.168.122.213, TCP port 57730 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.122.1 port 46974 connected with 192.168.122.213 port 57730 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 146 MBytes 122 Mbits/sec
TCP ではなく UDP を使用して iPerf サーバと通信するには、次のコマンドを使用します。
[root@host ~]#iperf -c 192.168.122.213 -p 57730 -u ------------------------------------------------------------ Client connecting to 192.168.122.213, UDP port 57730 Sending 1470 byte datagrams UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.122.1 port 41466 connected with 192.168.122.213 port 57730 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec [ 3] Sent 893 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.233 ms 0/ 893 (0%) [root@hostB ~]#
ルータ B の iPerf クライアントから iPerf サーバに ping を実行します。
[root@host ~]#/bin/ping 192.164.168.10 PING 192.164.168.10 (192.164.168.10) 56(84) bytes of data. 64 bytes from 192.164.168.10: icmp_seq=1 ttl=255 time=13.0 ms 64 bytes from 192.164.168.10: icmp_seq=2 ttl=255 time=2.14 ms 64 bytes from 192.164.168.10: icmp_seq=3 ttl=255 time=2.21 ms
ルータ B でホストされている iPerf クライアントはルータ A でホストされている iPerf サーバにアクセスできます。
iPerf 用のコンテナ アプリケーションは正常にホスティングされています。コンテナ アプリケーションのホスティングの使用例については、IOS XR のコンテナ内でテレメトリ レシーバを実行するを参照してください。