RDOを試してみる

# RDO

* OpenstackのRedHatによるディストリビューションのコミュニティ版 ⇒ 【[RDO](https://www.rdoproject.org/)】
* エンタープライズ版は Red Hat Enterprise Linux OpenStack Platform

# インストール

* [Quickstart](https://www.rdoproject.org/install/quickstart/)の手順をやってみる

## 準備

* vagrant
    * メモリは最低4GB以上と書いてある
* rhel7系のLinux(x86_64): CentOS7にする

```
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "centos7_opscode"
  config.vm.box_url = "https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.customize ["modifyvm", :id, "--memory", "4096", "--cpus", "2", "--ioapic", "on"]
  end
end
```

* ディスク容量が少なかったので、VirtualBoxで容量追加した

## 実行

#### 1. VM起動してsshログイン

```
$ vagrant up
$ vagrant ssh
$ sudo su -
```

#### 2. ネットワーク設定の変更

```
# systemctl stop NetworkManager
# systemctl disable NetworkManager
# systemctl restart network
```

* ifconfig等のコマンドを使用可能にする
    * 使用したイメージではinstall済みだった

```
# yum install net-tools
```

* ifcfg編集

```
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE="enp0s3"
ONBOOT=yes
NETBOOT=yes
UUID="580a3547-a628-41cf-bb6b-43f9bae2f592"
#IPV6INIT=yes
IPV6INIT=no
#BOOTPROTO=dhcp
BOOTPROTO=static
HWADDR="08:00:27:c3:36:f0"
TYPE=Ethernet
NAME="enp0s3"
# add
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPADDR="10.0.2.15"
NETMASK="255.255.255.0"
GATEWAY="10.0.2.2"
DNS1="8.8.8.8"
```

```
# ifdown enp0s3 && systemctl restart network
```



#### 3. RDOインストール

* パッケージをインストール

```
# yum update -y
# yum install -y https://www.rdoproject.org/repos/rdo-release.rpm
# yum install -y openstack-packstack
```

#### 4. answerファイル作成

* インストール時の設定を記載したアンサーファイルを用意しておく
* `packstack`コマンドでアンサーファイルを作成し、設定値を変更

```
# packstack --gen-answer-file answer-file.txt
# vi answer-file.txt
```

* CONFIG_HEAT_INSTALL=y  
    オーケストレーション機能を有効化
* CONFIG_SAHARA_INSTALL=y  
    データ処理サービスを有効化
* CONFIG_LBAAS_INSTALL=y  
    ロードバランスサービスを有効化
* CONFIG_NEUTRON_FWAAS=y  
    ファイアウォールサービスを有効化
* CONFIG_TROVE_INSTALL=y  
    データベースサービスを有効化
* CONFIG_HORIZON_SSL=y  
    ダッシュボードアクセスをhttpsに変更
* CONFIG_KEYSTONE_ADMIN_PW=secrete  
    パスワードをsecreteに変更
* CONFIG_NTP_SERVERS=133.243.238.244  
    NTPサーバのアドレスを設定(ntp.nict.jp)
* CONFIG_PROVISION_DEMO=n  
    デモ機能の無効化
* CONFIG_NAGIOS_INSTALL=n  
    nagiox無効化


#### 5. openstackインストール実行

* `packstack`コマンドでアンサーファイルを指定して実行

```
# packstack --answer-file answer-file.txt
```

#### 6. 設定ファイルの変更

##### 6-1. ネットワーク設定

* [Neutron with existing external network](https://www.rdoproject.org/networking/neutron-with-existing-external-network/) の手順を実行

```
# cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 ifcfg-enp0s3_bak
# cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-br-ex
```

* br-ex

```
# vi /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE="br-ex"
DEVICETYPE=ovs
ONBOOT=yes
NETBOOT=yes
IPV6INIT=no
BOOTPROTO=static
TYPE=OVSBridge
NAME="br-ex"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPADDR="10.0.2.15"
NETMASK="255.255.255.0"
GATEWAY="10.0.2.2"
DNS1="8.8.8.8"
```

* enp0s3

```
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE="enp0s3"
ONBOOT=yes
TYPE=OVSPort
OVS_BRIDGE="br-ex"
DEVICETYPE="ovs"
```

* ネットワーク再起動

```
# service network restart
# service neutron-openvswitch-agent restart
# service neutron-server restart
```

##### 6-2. nova設定
* キーマップ変更

```
# vi /etc/nova/nova.conf
vnc_keymap=ja
# service openstack-nova-compute restart
```



# 管理画面で操作してみる

* web管理画面(horizon)にアクセスする(https://192.168.33.10/dashboard)

* CentOS7のイメージを登録する
    * 「コンピュート > イメージ」の「+イメージの作成」からイメージファイルを登録する
    * [image-resources](https://www.rdoproject.org/resources/image-resources/) 
    * [CentOS-7-x86_64-GenericCloud-1511.qcow2](http://cloud.centos.org/centos/7/images/)を選択 

* インスタンス起動
    * 「エラー: ボリュームのリソース上限情報を取得できません。」と表示されて作成できない
        * インスタン起動エラーの原因ではない模様。。。
    * 画面的にネットワーク設定が必須のようだが、既存ネットワークが存在していない
        * ネットワーク作成してリトライしてみる

## ネットワーク作成

* [ネットワークの作成と管理](http://docs.openstack.org/ja/user-guide/cli_create_and_manage_networks.html) の手順を踏襲

```
# source keystonerc_admin
# neutron net-create net1
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 9a1c106f-5fc7-4fbd-b4ed-663385343177 |
| mtu                       | 0                                    |
| name                      | net1                                 |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 100                                  |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 2220b4c8bbb44d859a4ffa4e4804baa7     |
+---------------------------+--------------------------------------+
# neutron subnet-create net1 192.168.2.0/24 --name subnet1
Created a new subnet:
+-------------------+--------------------------------------------------+
| Field             | Value                                            |
+-------------------+--------------------------------------------------+
| allocation_pools  | {"start": "192.168.2.2", "end": "192.168.2.254"} |
| cidr              | 192.168.2.0/24                                   |
| dns_nameservers   |                                                  |
| enable_dhcp       | True                                             |
| gateway_ip        | 192.168.2.1                                      |
| host_routes       |                                                  |
| id                | 323561f9-b99e-476d-bae1-d17cb8a78fac             |
| ip_version        | 4                                                |
| ipv6_address_mode |                                                  |
| ipv6_ra_mode      |                                                  |
| name              | subnet1                                          |
| network_id        | 9a1c106f-5fc7-4fbd-b4ed-663385343177             |
| subnetpool_id     |                                                  |
| tenant_id         | 2220b4c8bbb44d859a4ffa4e4804baa7                 |
+-------------------+--------------------------------------------------+
# neutron router-create router1
Created a new router:
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| admin_state_up        | True                                 |
| distributed           | False                                |
| external_gateway_info |                                      |
| ha                    | False                                |
| id                    | 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23 |
| name                  | router1                              |
| routes                |                                      |
| status                | ACTIVE                               |
| tenant_id             | 2220b4c8bbb44d859a4ffa4e4804baa7     |
+-----------------------+--------------------------------------+
# neutron router-gateway-set 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23 9a1c106f-5fc7-4fbd-b4ed-663385343177
Bad router request: Network 9a1c106f-5fc7-4fbd-b4ed-663385343177 is not an external network
# neutron net-create ext-net --router:external True
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 86cc9bed-f006-4386-942b-0df4bc307451 |
| mtu                       | 0                                    |
| name                      | ext-net                              |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 75                                   |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 2220b4c8bbb44d859a4ffa4e4804baa7     |
+---------------------------+--------------------------------------+
# neutron router-gateway-set 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23 86cc9bed-f006-4386-942b-0df4bc307451
Set gateway for router 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23
# neutron router-gateway-set 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23 323561f9-b99e-476d-bae1-d17cb8a78fac
Added interface bed45cb2-807e-4444-b4bb-263b71c06a24 to router 20d32ce1-6af9-48bf-bb61-f9c6a6e5dc23.
```

* 管理画面の「プロジェクト > ネットワーク > ネットワークトポロジー」で表示を確認
    * router1, net1, ext-net が結合されて表示されていることを確認

## フレーバー作成

* CentOS7のインスタンスを作りたいので、「管理 > システム > フレーバー」から
    * メモリ: 512MB
    * HDD: 10GB  
    
くらいのフレーバーを作成しておく


## インスタンス起動

* 「コンピュート > イメージ」で、登録したイメージと、上記のネットワーク(net1)、フレーバーを指定して「インスタンスの起動」を実行したがエラー
    * libvirtError: internal error: process exited while connecting to monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory

* `free`コマンドでメモリ確認したところ、ほとんどのメモリが使われていた。。
    * vagrantで割り当てメモリを6144にあげて再実行したところ無事に起動できた