Posted at

OpenStack Mitakaの導入 (Win7, Virtual Box, CentOS 7, RDO)

More than 3 years have passed since last update.

OpenStackを学ぶ必要があり、まずはいろいろと試す環境を構築するため、WindowsノートPCにAll-in-one(RDO)インストールで環境構築。その際のメモです。

流れは、Win7 PCにVirtual BoxでCentOSを導入し、Mitakaを導入。その後、GlanceでFedoraのImageを登録し、テストインスタンスを作成し、外部ネットワークにアクセスできるところまでを確認。

順調にいって、3~4時間、実際はいろいろハマるので、1日~2日はかかると思われる。


導入したPCのスペック


  • ノートPC

  • CPU: Corei7 2.9GH, 2コア

  • メモリ: 16GB

  • ディスク: 512GB SSD

  • OS: Windows 7 64bit


OpenStack環境の構成


  • Virtual BoxにてWindows 7上にCentOS7のVMを1台構築

  • OpenStackはRed HadのディストリビューションRDOを利用

  • Controller, Compute, Networkノードをすべて1台のマシンに導入(All-in-one構成)

  • 二つのネットワークをVirtual Boxで作成(ネットワーク構成ガイド


    • Provider Network


      • 外部アクセス用ネットワーク


      • 10.0.2.0/24 (Virtual BoxのNATネットワーク)

      • OpenStackのVMに与えるFloating IPはこのネットワークから与える



    • Management Network


      • Controller/Compute/Networkノードが所属する管理サーバー用ネットワーク

      • 外部にアクセスできないネットワーク


      • 192.168.56.0/24(Virtual Boxのホストオンリーネットワーク)






1. Virtual BoxでのVM作成

こちらを参考にVMを作成。

VMの設定は下記の通り(Virtual Boxでの設定順)


1.「新規作成」し、下記の設定でVMを作成


  • メモリ: 8GB

  • 仮想ディスク: 100GB, VDI, 可変


2.ホストオンリーネットワークアダプタの作成(Virtual Box側の設定)

ファイル → 環境設定 → ネットワーク でホストオンリーネットワークのタブで作成


  • 名前: 適当に

  • IP: 192.168.56.1

  • ネットマスク: 255.255.255.0

  • DHCPは無効とする


3.CPU数の設定(VMの設定)


  • VM設定パネルで「システム」を選択し、プロセッサーのタブで設定

  • 2コアのCPUなので、2コアまで使用するように設定


4.ネットワークアダプタの設定(VMの設定)

ネットワークアダプタは下記の二つ。ホストOS(Windows)から、ゲストOS(CentOS)にアクセスでき、かつ、CentOSから外部ネットワークにアクセスできる構成とした。


  1. NAT


    • デフォルト

    • VM(CetnOS7)が、外部ネットワークに接続するためのNATを行うアダプタ

    • Virtual Box(Win)のデフォルトでは10.0.5.0/24が割り当てられる

    • Provider Network



  2. ホストオンリー


    • ゲストOS(CentOS)とホストOSの間で通信するためのネットワークアダプタ

    • 192.168.56.1/24を設定

    • プロミスキャスモードを「すべて許可」に設定。(重要、ネストされたOpenStack上のVMが外部と通信するために必要な設定)

    • Management Netowrk




CentOS 7のインストール


1. CentOSダウンロード


2. VMの光学ドライブにCentOSのImage Fileをセット

VMの設定から「ストレージ」を選択し、ISOファイルをセット


3. VMを起動し、インストール実施

VMを起動すると、CentOSのインストーラーが自動で起動するので、ガイドに従って、インストール。こちらを参照。


  • 言語: English

  • Date & Time: Tokyo/Asia

  • キーボード: Japanese

  • Install タイプ: Minimal

  • rootのパスワードをセットし、新規Userを作成

インストール後、CentOSを起動。


CentOSの設定

OpenStackインストール前に、ネットワークの設定やFirewall無効化、OSのUpdate等を実施。


1. ネットワークの設定


1.1. NICの確認

enp0s3(NAT), enp0s8(ホストオンリー)の二つが認識されていることを確認

$ sudo ip addr


1.2. NICの設定

/etc/sysconfig/network-scripts/にある、ifcfg-enp0s3, ifcfg-enp0s8を下記の通り編集

[ifcfg-enp0s3]

DHCPでIPが割り振られるように設定

TYPE=Ethernet

BOOTPROTO=dhcp
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes

[ifcfg-enp0s8]

固定IPをセット。192.168.56.100とし、OpenStackの各サービスのエンドポイントはこのIPを使用する。

TYPE=Ethernet

BOOTPROTO=static
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.56.100
NETMASK=255.255.255.0


1.3. ネットワークの設定確認

ネットワークをリスタートし、設定内容を確認。その後、VMから外部へ接続が可能となるので、pingで確認。

また、ここまで設定できていると、TeraTerm等でSSH接続可能なので、SSH接続も確認する。

$ systemctl restart network.service

$ ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:d8:ae:9d brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 86134sec preferred_lft 86134sec
inet6 fe80::a00:27ff:fed8:ae9d/64 scope link
valid_lft forever preferred_lft forever

$ ip addr show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:88:36:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.100/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe88:3655/64 scope link
valid_lft forever preferred_lft forever

$ ping yahoo.co.jp
PING yahoo.co.jp (183.79.135.206) 56(84) bytes of data.
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=43 time=38.8 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=2 ttl=43 time=37.9 ms


2. CentOS Update

OSを最新の状態にし、reboot。

$ yum -y update

$ shutdown -r now


3. NTPのインストール

$ yum -y install ntp

$ systemctl start ntpd
$ systemctl enable ntpd


4. カーネルパラメータの変更

/etc/sysctl.conf ファイルを編集して、以下のパラメーターを追加

net.ipv4.ip_forward = 1

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

設定を反映。

$ sysctl -p


5. SELINUXの無効化

/etc/selinux/configを編集して、enforcing をpermissiveに変更

SELINUX=permissive


6. Network Managerの無効化

$ systemctl disable NetworkManager

$ systemctl stop NetworkManager


RDOでのOpenStackのインストール

RDOのquick start guideを元に、OpenStackをインストールする。


1. RDOリポジトリのセットアップ

$ yum install -y https://rdoproject.org/repos/rdo-release.rpm


2. Packstack Installer セットアップ

$ yum install -y openstack-packstack


3. Answer file作成

$ packstack --gen-answer-file=answer.txt


4. Answerfileの編集

デフォルトでインストールされないサービスを必要に応じて、インストールするように設定

CONFIG_MANILA_INSTALL=y

CONFIG_SAHARA_INSTALL=y
CONFIG_HEAT_INSTALL=y
CONFIG_TROVE_INSTALL=y

各サービスのエンドポイントで使用されるIPアドレスを、管理用ネットワークのNICのIPアドレスに変更。

(Packstackで自動作成された、Answer fileでは、一つ目のNIC:enp0s3のIPアドレス(10.0.2.15)がデフォルトで設定される。

今回の構成では、二つ目のNIC:enp0s8のIPアドレス(192.168.56.100)を設定する。)

vi エディタで下記のように置換。

:%s/10.0.2.15/192.168.56.100/gc

各サービスのパスワードを変更。デフォルトのままでも良く、Answer Fileに記載されているので、わからなくなってもあとから確認は可能。


5. OpenStackのインストール

下記のコマンドを実行し、OpenStackをインストール。30分~1時間でインストールが完了。

$ packstack --answer-file=answer.txt


6. OpenStack Dashboardの確認

下記にアクセスして、User ID: admin、パスワードはAnswer Fileで設定したパスワードでLogin。

adminのパスワードは~/keystonerc_adminに書かれているので、確認可能。

http://192.168.56.100/dashboard/

ダッシュボード確認できれば、ひとまずインストールは成功。

2016-04-20_18h37_54.png


7. 各サービスのステータス確認

下記コマンドで、インストールしたOpenStackの各サービスのステータスがAliveであることを確認する。(OpenStackのコマンドラインツールでOpenstackを操作するために、admin用の環境変数を読み込み、ステータスを確認。)

$ source keystonerc_admin

$ openstack-status


8. 仮想ブリッジ: br-ex の設定

RDOでのOpenStackインストール直後は、インスタンスが外部ネットワークにアクセスするルートが設定されていないので、設定する。Open vSwitchで仮想ブリッジ:br-exを作成し、外部ネットワークに繋がっているenp0s3を接続するように設定する。

ifcfg-enp0s3をコピーして、ifcfg-br-exを作成。

cp ifcfg-enp0s3 ifcfg-br-ex

ifcfg-enp0s3を下記のように設定。

TYPE=OVSPort

NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
DEVICETYPE=ovs
OVS_BRIDGE=br-ex

ifcfg-br-exを下記のように設定。OVSの仮想ブリッジにDHCPでIPを割り当てるため、

OVSBOOTPROTO, OVSDHCPINTERFACESを設定。

 TYPE=OVSBridge

OVSBOOTPROTO=dhcp
OVSDHCPINTERFACES=enp0s3
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs

設定後、ネットワークをリスタート。

$ systemctl restart network.service

仮想ブリッジbr-exにNIC enp0s3が接続されていることを確認。

$ ovs-vsctl show

・・・
Bridge br-ex
Port br-ex
Interface br-ex
type: internal
Port "enp0s3"
Interface "enp0s3"
ovs_version: "2.4.0"


テストインスタンスの作成

admin ユーザーでテストインスタンスを作成し、SSHで外部からアクセスできること、また、インスタンス内部から外部ネットワークにアクセスできることを確認する。


1. 既存ネットワークの削除

RDOでインストールすると、172.24.4.228/28というPublicネットワークが作成されていたが、ホストOSのWindowsからインスタンスにアクセスできるように、10.0.2.0/24をPublicネットワークとするように作り変える。

既存のPublic Networkには、demo tenantのルーター(router1)に接続されているため、このルーターとの接続を解除し、その後、Public Networkを削除する。削除は、adminでログインし、ルーター、および、ネットワークの設定画面(「管理」→「ルーター」「ネットワーク」)で行う。

2016-04-21_10h20_38.png


2. Public Networkの作成

同じ画面で、下記の通り外部接続用のPublic Networkを作成する。

2016-04-21_11h20_04.png

プロジェクトのネットワーク設定画面(「プロジェクト」→「ネットワーク」→「ネットワーク」)にて、サブネットを追加する。

2016-04-21_11h24_30.png


  • サブネット


    • ネットワーク名: Public_subnet

    • ネットワークアドレス: 10.0.2.0/24

    • ゲートウェイIP: 10.0.2.15



  • サブネット詳細


    • DHCP有効

    • IP割当プール: 10.0.2.20,10.0.2.50 (とりあえず、20個)

    • DSN IP: 8.8.8.8(Googleのネームサーバー)




3. Private Network作成

インスタンスに割り当てるプライベートネットワークを作成する。設定は下記のように行った。


  • ネットワーク


    • ネットワーク名: private

    • サブネット作成にチェック



  • サブネット


    • ネットワーク名: private_subnet

    • ネットワークアドレス: 192.168.1.0/24

    • ゲートウェイIP: 192.168.1.1



  • サブネット詳細


    • DHCP有効

    • IP割当プール: 192.168.1.10,192.168.1.30 (とりあえず、20個)

    • DSN IP: 8.8.8.8(Googleのネームサーバー)




4. 仮想ルーター作成

ルーター設定画面で、ルーターを新規作成。その後、「ゲートウェイの設定」でPublic Networkを、「インターフェースの追加」でPrivate Networkを接続する。

ネットワークトポロジーを見ると下記のように、ルーターにPublic/Private Networkが接続されていることが分かる。

2016-04-21_13h24_34.png


5. OS Imageの登録

Glanceに起動するインスタンスのImageを登録。FedoraのOpenStack向けの公式Imageをダウンロードして使用することにする。

2016-04-21_11h36_52.png

ダウンロード後、イメージ管理画面で、「イメージの作成」ボタンからImageを登録する。

2016-04-21_11h39_15.png


6. セキュリティーグループの設定

デフォルトで用意されている「default」にセキュリティーポリシーを追加し、ICMPとSSHの受信を許可するようにする。(これを行わないと、インスタンスにPing, SSH接続ができない。)

「コンピュート」→「アクセスとセキュリティー」→「セキュリティーグループ」とたどり、「ルールの管理」にてALL ICMPとSSHを追加。

2016-04-21_11h42_53.png


7. キーペアの追加

SSH接続するためのキーペアを追加する。Horizon上でキーペアを追加し、Windows PCへダウンロードするとWindows上でキーの変換を行う必要があるので、CentOS上でキーペアを作成し、OpenStackへ登録するようにする。ホームディレクトリに秘密鍵が作成されていることを確認。

$ source keystonerc_admin

$ nova keypair-add admin > admin_key.pem  → キーペア名: admin, 秘密鍵名: admin_key.pem
$ ls -l
-rw-r--r--. 1 root root 1688 Apr 17 23:40 admin_key.pem
-rw-------. 1 root root 1184 Feb 26 14:37 anaconda-ks.cfg
-rw-------. 1 root root 48576 Apr 17 20:26 answer.txt
-rw-r--r--. 1 root root 1684 Apr 17 22:44 demo_key.pem
-rw-------. 1 root root 233 Apr 17 23:40 keystonerc_admin
-rw-------. 1 root root 233 Apr 17 22:43 keystonerc_demo


8. インスタンス作成

「コンピュート」→「インスタンス」より「インスタンスの起動」を押して、起動するインスタンスのパラメータを設定し、インスタンスを作成。


  • ソース


    • Fedora



  • フレーバー


    • m1.small



  • ネットワーク


    • Private



  • セキュリティーグループ


    • default



  • キーペア


    • admin



2016-04-21_11h52_04.png


9. Floating IPの設定

作成したインスタンスのメニューから「Floating IPの割り当て」を選択し、IPの割当を行う。Private IPがNAT変換され、割り当てられたPublic IPで外部に接続しにいくことになる。

2016-04-21_12h59_18.png

結果、インスタンスには下記のIPが割り振られた。


  • Floating IP


    • 10.0.2.22



  • Private IP


    • 192.168.1.13




10. テストインスタンスへのアクセス

CentOS上から秘密鍵を使ってSSHで接続可能であることを確認する。Fedora公式ImageのUser IDは「fedora」が設定されているので、このIDでLogin。その後Login後、pingでインスタンスから外部にアクセス可能なことを確認。

$ ping 10.0.2.22

PING 10.0.2.22 (10.0.2.22) 56(84) bytes of data.
64 bytes from 10.0.2.22: icmp_seq=1 ttl=63 time=0.990 ms
64 bytes from 10.0.2.22: icmp_seq=2 ttl=63 time=0.559 ms
64 bytes from 10.0.2.22: icmp_seq=3 ttl=63 time=1.36 ms

$ chmod 600 admin_key.pem → パーミッションを変更しないとSSHで接続できない。
$ ssh -i admin_key.pem fedora@10.0.2.22  → 公式イメージのUser IDは「fedora」

[fedora@test ~]$ → ログイン成功
[fedora@test ~]$ ping www.yahoo.co.jp
PING www.g.yahoo.co.jp (182.22.71.251) 56(84) bytes of data.
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=1 ttl=43 time=21.6 ms
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=2 ttl=43 time=21.9 ms
64 bytes from f8.top.vip.ssk.yahoo.co.jp (182.22.71.251): icmp_seq=3 ttl=43 time=21.3 ms

RDOでAll-in-oneインストールといえど、いろいろはまりどころがある印象でした。特に仮想ネットワーク周りの知識が弱かったので、ネットワーク周りの設定に苦労しました。