rcbops Cookbooks で Neutron 構成 OpenStack

こんにちは。@jedipunkz です。

rcbops Cookbooks で Neutron 構成の OpenStack をデプロイする方法を書きたいと思 います。先日紹介した openstack-chef-repo にも Neutron のレシピが含まれているの ですが、まだまだ未完成で手作業をおりまぜながらのデプロイになっていまうので、今 現在のところ Neutron 構成を組みたいのであればこの rcbops の Cookbooks を用いる しかないと思います。

今回は VLAN モードの構築を紹介します。GRE モードも少し手順を修正すれば構成可能 です。最後のまとめに GRE モードの構築について少し触れています。

構成

                                                                                 public network
+----------------+----------------+----------------+----------------+----------------
|                |                |                                  
+--------------+ +--------------+ +--------------+ +--------------+ +--------------+
| controller01 | |  network01   | |  network02   | |  compute01   | |  compute02   |
+--------------+ +-------+------+ +-------+------+ +-------+------+ +-------+------+
|                |       |        |       |        |       |        |       |    management network
+----------------+-------o--------+-------o--------+-------o--------+-------o--------
                         |                |                |                |    vm network
                         +----------------+----------------+----------------+--------

特徴は…

  • network ノード 2台 (何台でも可)
  • compute ノード 2台 (何台でも可)
  • api ネットワークは management ネットワーク上に展開 (別けても可)
  • controller ノードは1台 (ha な cookbooks を使うので2台構成も可)
  • 図には表現されていませんが management ネットワーク上に Chef ワークステーションと Chef サーバが必要

物理 NIC のマッピング情報

  • controller : management(eth0), public(eth1)
  • network : management(eth0), vm(eth1), public(eth2)
  • compute : management(eth0), vm(eth1)

前提のネットワークセグメント情報

ここでは仮に下記のネットワークセグメントを前提として手順を記します。

  • public ネットワーク : 10.0.0.0/24
  • vm ネットワーク : 10.0.1.0/24
  • management(api) ネットワーク : 10.0.2.0/24

デプロイの準備

Chef 的なワークステーション端末から操作を行います。皆さんの使っているノート PC 等で OK です。

% git clone https://github.com/rcbops/chef-cookbooks.git ~/chef-repo
% cd ~/chef-repo

v4.0.0 (安定した最新版) を利用します。

% git checkout v4.0.0
% git submodule init
% git submodule sync
% git submodule update

Chef サーバに Cookbooks をアップロードします。

% knife cookbook upload -o cookbooks -a

Chef サーバに Roles をアップロードします。

% knife role from file roles/*rb

environment を json 形式で生成します。これは各 Cookbooks の attributes を上書きし、一つの構成 を作るために用いられます。

% ${EDITOR} environments/env-neutron.json
{
  "name": "env-neutron",
  "description": "",
  "cookbook_versions": {
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
  },
  "override_attributes": {
    "package_component": "grizzly",
    "osops_networks": {
      "management": "10.0.2.0/24",
      "public": "10.0.0.0/24",
      "nova": "10.0.2.0/24"
    },
    "nova": {
      "config": {
        "use_single_default_gateway": false,
        "ram_allocation_ratio": "1",
        "cpu_allocation_ratio": "16"
      },
      "network": {
        "provider": "quantum",
        "network_type": "vlan"
      },
      "apply_patches": true,
      "libvirt": {
        "vncserver_listen": "0.0.0.0",
        "virt_type": "kvm"
      },
      "db": {
        "password": "nova"
      },
      "services": {
        "novnc-proxy": {
          "network": "public"
        }
      }
    },
    "cinder": {
      "db": {
        "password": "cinder"
      }
    },
    "keystone": {
      "admin_user": "admin",
      "tenants": [
        "admin",
        "service"
      ],
      "users": {
        "admin": {
          "password": "secrete",
          "roles": {
            "admin": [
              "admin"
            ]
          }
        },
        "demo": {
          "password": "demo",
          "default_tenant" : "service",
          "roles": {
            "service": [ "service" ]
          }
        }
      },
      "db": {
        "password": "keystone"
      }
    },
    "horizon": {
      "theme": "Default",
      "db": {
        "password": "horizon"
      }
    },
    "mysql": {
      "root_network_acl": "%",
      "allow_remote_root": true,
      "server_root_password": "secrete",
      "server_repl_password": "secrete",
      "server_debian_password": "secrete"
    },
    "monitoring": {
      "procmon_provider": "monit",
      "metric_provider": "collectd"
    },
    "glance": {
      "images": [
        "precise", "cirros"
      ],
      "image": {
      },
      "image_upload": false,
      "db": {
        "password": "glance"
      }
    },
    "quantum": {
      "service_pass": "quantum",
      "db": {
        "password": "quantum"
      }
    },
    "developer_mode": false
  }
}

生成した environment ファイルを Chef サーバにアップロードします。

% knife environment from file environments/env-neutron.json

デプロイ

各ノード、下記の通りデプロイします。

controller ノード

% knife bootstrap <ip_of_controller01> -N controller01 -r \
  'role[ha-controller1]','role[cinder-volume]' -E env-neutron --sudo -x <your_accout>

cinder-volumes 用のディスクがある場合は下記の手順で Cinder が利用できるように なります。

% sudo pvcreate /dev/sdb #デバイス名は仮
% sudo vgcreate cinder-volumes /dev/sdb
% sudo service cinder-volume restart

network ノード

% knife bootstrap <ip_of_network01> -N network01 -r \
  'role[single-network-node]','recipe[nova-network::quantum-l3-agent]' \
  -E env-neutron --sudo -x <your_account>
% knife bootstrap <ip_of_network02> -N network02 -r \
  'role[single-network-node]','recipe[nova-network::quantum-l3-agent]' \
  -E env-neutron --sudo -x <your_account>

compute ノード

% knife bootstrap <ip_of_compute01> -N compute01 -r 'role[single-compute]' \
  -E env-neutron --sudo -x <your_account>
% knife bootstrap <ip_of_compute02> -N compute02 -r 'role[single-compute]' \
  -E env-neutron --sudo -x <your_account>

物理 NIC のブリッジインターフェースへのマッピング操作

Open vSwitch が管理しているブリッジインターフェースと物理インターフェースをマッ ピングしてあげます。

network ノードの2台にて下記の操作を行います。

% sudo ovs-vsctl add-port br-eth1 eth1
% sudo ovs-vsctl add-port br-ex eth2

compute ノードの2台にて下記の操作を行います。

% sudo ovs-vsctl add-port br-eth1 eth1

仮想ネットワークと仮想マシンの生成

環境によって仮想ネットワークの構成が異なりますので手順は割愛しますが、Horizon かコマンドライン・API を使って仮想ネットワークを生成し仮想マシンを接続すれば完 了です。

まとめ

network ノードを2台構成にしましたが何が嬉しいかと言うと、l3-agent, dhcp-agent を冗長取ることが可能になります。障害時、手作業になりますが切り替えが可能です。 l3-agent は仮想ルータ毎に、dhcp-agent は仮想ネットワーク毎に切り替えが可能です。 詳しくは私の以前の記事を参考にしてください。

http://jedipunkz.github.io/blog/2013/04/26/quantum-network-distributing/

また、compute ノードを更に増やせば仮想マシンの数を増やすことが出来ます。

今回は controller ノードを1台構成にしましたが、更に下記の手順で controller02 ノードを増やし controller ノードの HA 化を行うことも出来ます。

% knife bootstrap <ip_of_controller02> -N controller02 -r \
  'role[ha-controller1]' -E env-neutron --sudo -x <your_accout>

HA 構成を各々のノードに構成させるため各ノードで chef-client を1回ずつ実行しま す。

controller01% sudo chef-client
controller02% sudo chef-client

HA 構成は haproxy, keepalived で形成されています。

また、environment ファイルを下記のように修正すると VLAN の代わりに GRE トンネ ルが扱えます。

"nova": {
  "network": {
    "provider": "quantum",
    "network_type": "gre"
  }
},

<snip>...

"quantum": {
  "ovs": {
    "network_type" : "gre",
    "tunnnel_range" : "1:1000"
  }
},

以上です。roles ディレクトリ配下に様々な Roles があるので、各コンポーネント毎 にノードを別けるなどの構成も可能そうです。皆さん試してみてください。