第4章 デプロイメントのテスト

4.1. 基本的なテストの実行

基本的なテストでは、インスタンスが相互に ping できるかどうかを検証します。また、Floating IPSSH アクセスもチェックします。以下の例では、アンダークラウドからテストを実行する方法について説明します。

本手順では、個別のステップを多数実行する必要があるので、便宜を図るために小さいセクションに分けています。ただし、これらのステップは、所定の順序で実行する必要があります。

注記
このステップでは、flat ネットワークを使用して _External_ network を作成し、_VXLAN_ を使用して _Tenant_ networks を作成します。デプロイメントに望ましい場合には、_VLAN External_ networks と _VLAN Tenant_ networks もサポートされています。

4.1.1. テスト用の新規ネットワークの作成

  1. オーバークラウドにアクセスするための認証情報を読み込みます。

    $ source /home/stack/overcloudrc
  2. オーバークラウドの外部からインスタンスにアクセスするのに使用する neutron の外部ネットワークを作成します。

    $ openstack network create --external --project service --external  --provider-network-type flat --provider-physical-network datacentre
  3. 新しい外部ネットワーク (前のステップで作成済み) に対応する neutron サブネットを作成します。

    $ openstack subnet create  --project service --no-dhcp --network external --gateway 192.168.37.1 --allocation-pool start=192.168.37.200,end=192.168.37.220 --subnet-range 192.168.37.0/24 external-subnet
  4. オーバークラウドインスタンスを作成するための cirros イメージをダウンロードします。

    $ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
  5. オーバークラウドの glance に cirros イメージをアップロードします。

    $ openstack image create cirros --public --file ./cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare
  6. オーバークラウドインスタンスに使用する tiny フレーバーを作成します。

    $ openstack flavor create m1.tiny --ram 512 --disk 1 --public
  7. インスタンスをホストするための VXLAN ベースのテナントネットワークを作成します。

    $ openstack network create net_test --provider-network-type=vxlan --provider-segment 100
  8. テナントネットワーク (前のステップで作成済み) のサブネットを作成します。

    $ openstack subnet create --network net_test --subnet-range 123.123.123.0/24 test
  9. テナントネットワークの ID を特定して保存します。

    $ net_mgmt_id=$(openstack network list | grep net_test | awk '{print $2}')
  10. cirros1 という名前のインスタンスを作成して、net_test ネットワークに接続します。

    $ openstack server create --flavor m1.tiny --image cirros --nic net-id=$net_mgmt_id cirros1
  11. cirros2 という名前の第 2 のインスタンスを作成して、同様に net_test ネットワークに接続します。

    $ openstack server create --flavor m1.tiny --image cirros --nic net-id=$net_mgmt_id cirros2

4.1.2. ネットワークとテスト環境の設定

  1. admin プロジェクトの ID を特定して保存します。

    $ admin_project_id=$(openstack project list | grep admin | awk '{print $2}')
  2. admin プロジェクトのデフォルトのセキュリティーグループを特定して保存します。

    $ admin_sec_group_id=$(openstack security group list | grep $admin_project_id | awk '{print $2}')
  3. admin のデフォルトセキュリティーグループに、ICMP トラフィックの受信を許可するルールを追加します。

    $ openstack security group rule create $admin_sec_group_id --protocol icmp --ingress
  4. admin のデフォルトセキュリティーグループに、ICMP トラフィックの送信を許可するルールを追加します。

    $ openstack security group rule create $admin_sec_group_id --protocol icmp --egress
  5. admin のデフォルトセキュリティーグループに、SSH トラフィックの受信を許可するルールを追加します。

    $ openstack security group rule create $admin_sec_group_id --protocol tcp --dst-port 22 --ingress
  6. admin のデフォルトセキュリティーグループにルールを追加して SSH トラフィックの送信を許可します。

    $ openstack security group rule create $admin_sec_group_id --protocol tcp --dst-port 22 --egress

4.1.3. 接続性のテスト

  1. horizon からインスタンスの novnc コンソールにアクセスできるはずです。overcloudrc のパスワードを使用して admin として horizon にログインします。cirros イメージのデフォルトのログインでは、ユーザー名は cirros、パスワードは cubswin:) です。
  2. novnc コンソールから、DHCP アドレスがインスタンスに割り当てられているかどうかをことを確認します。

    $ ip addr show
    注記

    アンダークラウドから nova console-log <instance id> を使用してこの操作を行う方法もあります。これにより、DHCP リースが取得されているかどうかが表示されます。

  3. 次に、ステップ 1 と 2 をその他すべてのインスタンスで繰り返します。
  4. 1 つのインスタンスから他のインスタンスに ping を試みて、オーバークラウドにおける基本的な テナント ネットワーク接続を検証します。
  5. Floating IP を使用して他のインスタンスに到達できるかどうかを確認します。

4.1.4. デバイスの作成

  1. cirros1 インスタンスに割り当てる Floating IP を外部ネットワーク上に作成します。

    $ openstack floating ip create external
  2. Floating IP と cirros1 のテナント IP の間での NAT 処理に使用するルーターを作成します。

    $ openstack router create test
  3. ルーターのゲートウェイを外部ネットワークに設定します。

    $ openstack router set test --external-gateway external
  4. テナントネットワークに接続するルーターへのインターフェースを追加します。

    $ openstack router add subnet test test
  5. ステップ 1 で作成した Floating IP を特定して保存します。

    $ floating_ip=$(openstack floating ip list | head -n -1 | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')
  6. Floating IP を cirros1 インスタンスに割り当てます。

    $ openstack server add floating ip cirros1 $floating_ip
  7. 外部ネットワークにアクセス可能なノードからインスタンスへのログインを試みます。

    $ ssh cirros@$floating_ip

4.2. 高度なテストの実行

OpenDaylight の設定およびデプロイメントのコンポーネントのいくつかは、デプロイメント後に確認することができます。インストールの特定の部分をテストするには、いくつかの手順に従って操作を実行する必要があります。各手順は別々に記載しています。

これらの手順は、オーバークラウド ノードで実行します。

4.2.1. オーバークラウドノードへの接続

この手順では、オーバークラウドノードに接続して稼働中かどうかをテストします。

手順

  1. アンダークラウドにログインします。
  2. 以下のコマンドを入力して作業を開始します。

      $ source /home/stack/stackrc
  3. 全インスタンスを一覧表示します。

      $ openstack server list
  4. 必要なインスタンスを選択して、一覧に表示される IP アドレスを書き留めておきます。
  5. マシンに接続します。上記の一覧から取得した IP アドレスを使用します。

      $ ssh heat-admin@<IP from step 4>
  6. superuser に切り替えます。

      $ sudo -i

4.2.2. OpenDaylight のテスト

OpenDaylight が機能することをテストするには、サービスが稼働していることと、特定の機能が正しく読み込まれていることを確認する必要があります。

手順

  1. OpenDaylight を実行するオーバークラウドノードまたはカスタムロールで実行している OpenDaylight ノードに superuser としてログインします。
  2. OpenDaylight サービスがアクティブかどうかを確認します。

    # systemctl status opendaylight
  3. HAProxy がポート 8081 をリッスンするように適切に設定されていることを確認します。

    # grep -A7 opendaylight /etc/haproxy/haproxy.cfg
  4. karaf アカウントに接続します。

    $ ssh -p 8101 karaf@localhost
  5. インストール済みの機能を一覧表示します。

    $ feature:list | grep odl-netvirt-openstack
  6. API が稼働中であることを確認します。

    # web:list | grep neutron
  7. VXLAN トンネルが稼動状態であることを確認します。

    # vxlan:show
  8. REST API が正しく応答するかどうかをテストするには、それを使用するモジュールを一覧表示して確認することができます。

    # curl -u "admin:admin" http://localhost:8181/restconf/modules

    以下と同じような出力が表示されます (この例は短く省略されています)。

    {"modules":{"module":[{"name":"netty-event-executor","revision":"2013-11-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor"},{"name" ...
  9. REST ストリームをリストします。

    # curl -u "admin:admin" http://localhost:8181/restconf/streams

    以下のような出力が表示されます。

    {"streams":{}}
  10. 以下のコマンドを入力して、NetVirt の準備が整って実行中であることを確認します。

    # curl -u "admin:admin" http://localhost:8181/restconf/operational/network-topology:network-topology/topology/netvirt:1

    以下の出力により確認されます。

    {"topology":[{"topology-id":"netvirt:1"}]}

詳細情報

  • ステップ 5: この手順で生成されたリストの 3 番目のコラムに x がある場合には、その機能は適切にインストールされていることになります。
  • ステップ 6: この API エンドポイントは、/etc/neutron/plugins/ml2/ml2_conf.ini で設定され、neutron が OpenDaylight と通信するのに使用されます。

4.2.3. Open vSwitch のテスト

Open vSwitch を検証するには、コンピュートノードの 1 つに接続し、適切に設定されて OpenDaylight に接続されていることを確認します。

手順

  1. オーバークラウド内のコンピュートノードの 1 つに superuser として接続します。 
  2. Open vSwitch の設定を一覧表示します。

    # ovs-vsctl show
  3. 出力に Manager が複数ある点に注意してください (以下の例の 2 行目と 3 行目)。

        6b003705-48fc-4534-855f-344327d36f2a
            Manager "ptcp:6639:127.0.0.1"
            Manager "tcp:172.17.1.16:6640"
                is_connected: true
            Bridge br-ex
                fail_mode: standalone
                Port br-ex-int-patch
                    Interface br-ex-int-patch
                        type: patch
                        options: {peer=br-ex-patch}
                Port br-ex
                    Interface br-ex
                        type: internal
                Port "eth2"
                    Interface "eth2"
            Bridge br-isolated
                fail_mode: standalone
                Port "eth1"
                    Interface "eth1"
                Port "vlan50"
                    tag: 50
                    Interface "vlan50"
                        type: internal
                Port "vlan30"
                    tag: 30
                    Interface "vlan30"
                        type: internal
                Port br-isolated
                    Interface br-isolated
                        type: internal
                Port "vlan20"
                    tag: 20
                    Interface "vlan20"
                        type: internal
            Bridge br-int
                Controller "tcp:172.17.1.16:6653"
                    is_connected: true
                fail_mode: secure
                Port br-ex-patch
                    Interface br-ex-patch
                        type: patch
                        options: {peer=br-ex-int-patch}
                Port "tun02d236d8248"
                    Interface "tun02d236d8248"
                        type: vxlan
                        options: {key=flow, local_ip="172.17.2.18", remote_ip="172.17.2.20"}
                Port br-int
                    Interface br-int
                        type: internal
                Port "tap1712898f-15"
                    Interface "tap1712898f-15"
            ovs_version: "2.7.0"
  4. OpenDaylight が実行されているノードの IP アドレスを tcp Manager がポイントしていることを確認します。
  5. Manager の下に is_connected: true と表示されていることを確認し、OVS から OpenDaylight への接続が確立されて、OVSDB プロトコルを使用していることを確かめます。
  6. 各ブリッジ (br-int 以外) が存在し、Compute ロールでのデプロイメントに使用した NIC テンプレートと一致していることを確認します。
  7. tcp 接続が、OpenDaylight サービスが実行されているところの IP に対応していることを確認します。
  8. ブリッジ br-intis_connected: true が表示され、OpenFlow プロトコルから OpenDaylight への接続が確立されていることを確認します。

詳細情報

  • br-int は OpenDaylight によって自動的に作成されます。

4.2.4. コンピュートノード上の Open vSwitch の設定の確認

  1. コンピュートノードに superuser として接続します。 
  2. Open vSwitch の設定を一覧表示します。

    # ovs-vsctl list open_vswitch
  3. 出力を確認します。以下の例と同様の内容が表示されます。

     _uuid               : 4b624d8f-a7af-4f0f-b56a-b8cfabf7635d
     bridges             : [11127421-3bcc-4f9a-9040-ff8b88486508, 350135a4-4627-4e1b-8bef-56a1e4249bef]
     cur_cfg             : 7
     datapath_types      : [netdev, system]
     db_version          : "7.12.1"
     external_ids        : {system-id="b8d16d0b-a40a-47c8-a767-e118fe22759e"}
     iface_types         : [geneve, gre, internal, ipsec_gre, lisp, patch, stt, system, tap, vxlan]
     manager_options     : [c66f2e87-4724-448a-b9df-837d56b9f4a9, defec179-720e-458e-8875-ea763a0d8909]
     next_cfg            : 7
     other_config        : {local_ip="11.0.0.30", provider_mappings="datacentre:br-ex"}
     ovs_version         : "2.7.0"
     ssl                 : []
     statistics          : {}
     system_type         : RedHatEnterpriseServer
     system_version      : "7.4-Maipo"
  4. other_config オプションの値に、VXLAN トンネルを介してテナントネットワークに接続するローカルインターフェースの正しい local_ip が設定されていることを確認します。
  5. other_config のオプション下の provider_mappings の値が OpenDaylightProviderMappings Heat テンプレートパラメーターで指定されている値と一致していることを確認します。この設定により、neutron の論理ネットワークが対応する物理インターフェースにマッピングされます。

4.2.5. neutron の設定の確認

手順

  1. Controller ロールのノードの 1 つの superuser アカウントに接続します。
  2. /etc/neutron/neutron.conf ファイルに service_plugins=odl-router_v2,trunk の設定が含まれていることを確認します。
  3. /etc/neutron/plugin.ini ファイルに以下の ml2 設定が含まれていることを確認します。

    [ml2]
    mechanism_drivers=opendaylight_v2
    
    [ml2_odl]
    password=admin
    username=admin
    url=http://192.0.2.9:8081/controller/nb/v2/neutron
  4. オーバークラウド のコントローラーの 1 つで、neutron エージェントが適切に稼働していることを確認します。

    # openstack network agent list
  5. メタデータエージェントと DHCP エージェントが up の状態 (admin_state_up オプションが True) であることを確認します。

    +--------------------------------------+----------------+--------------------------+-------------------+-------+----------------+------------------------+
    | id                                   | agent_type     | host                     | availability_zone | alive | admin_state_up | binary                 |
    +--------------------------------------+----------------+--------------------------+-------------------+-------+----------------+------------------------+
    | 3be198c5-b3aa-4d0e-abb4-51b29db3af47 | Metadata agent | controller-0.localdomain |                   | :-)   | True           | neutron-metadata-agent |
    | 79579d47-dd7d-4ef3-9614-cd2f736043f3 | DHCP agent     | controller-0.localdomain | nova              | :-)   | True           | neutron-dhcp-agent     |
    +--------------------------------------+----------------+--------------------------+-------------------+-------+----------------+------------------------+

詳細情報

  • ステップ 3 で触れた plugin.ini 内の IP は、 InternalAPI の仮想 IP アドレス (VIP) である必要があります。
  • ステップ 5 の出力には、Open vSwitch エージェントまたは L3 エージェントは記載されていない点に注意してください。これらはいずれも OpenDaylight によって管理されるようになったので、出力に含まれていないのは望ましい状態です。