Queens RDO Setup log

ProLiant G7 ML110 にて、ESXi 5.5をUSBブート（の上で、OpenStackをNested）して使っていたが、ノベルティのUSBフラッシュメモリだったのでやっぱり壊れた。
なので素でOpenStackを入れ直した時のメモ。

# 環境
* HP ProLiant G7 ML110
  * Memory 16GB
  * SSD 250 + 120 , HDD 250
  * Gigabit Ether x2 
* CentOS 7 17.08

HP ProLiant G7 ML110にて、いったん初期化した
https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c03576963

# OpenStack Queens Release 

セットアップ時点でリリースは「**Queens**」
手順は下記の通り。いつものように自分評価・デモ用なのでオールインワンで十分。

https://www.rdoproject.org/install/packstack/

packstackを実行したら以下のエラー

```shell-session
ERROR:root:Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/packstack/installer/run_setup.py", line 991, in main
    optParser = initCmdLineParser()
  File "/usr/lib/python2.7/site-packages/packstack/installer/run_setup.py", line 840, in initCmdLineParser
    parser = OptionParser(usage=usage, version="%prog {0}".format(version_info.version_string()))
  File "/usr/lib/python2.7/site-packages/pbr/version.py", line 466, in version_string
    return self.semantic_version().brief_string()
  File "/usr/lib/python2.7/site-packages/pbr/version.py", line 461, in semantic_version
    self._semantic = self._get_version_from_pkg_resources()
  File "/usr/lib/python2.7/site-packages/pbr/version.py", line 438, in _get_version_from_pkg_resources
    import pkg_resources
ImportError: No module named pkg_resources
```

pythonのsetuptoolsがあったら良いっぽいから、python-pip をインストールして同時にいれたら回避された。

* python2-setuptools-22.0.5-1.el7.noarch.rpm
* python-pip-8.1.2-1.el7.noarch.rpm

# Answer ファイル作成

```shell-session
[root@openstack ~]# packstack --gen-answer-file=./answerfile
Packstack changed given value  to required value /root/.ssh/id_rsa.pub
```

必要なのだけ「y」にして実行

```shell_session
[root@openstack ~]# packstack --answer-file=./answerfile
```

問題なく完了。
ただ、インターネット環境が若干しょぼいので時間がかかった。

# 環境再セットアップ

## admin , demo パスワード変更

```shell_session
# openstack user set --password 'hogehoge' demo
# openstack user set --password 'fugafuga' admin
```

## ネットワーク周り

**いったんパブリックサブネットとルータを消す**

```shell-session
(admin) # openstack
(openstack) router unset --external-gateway router1
(openstack) subnet delete public_subnet
(openstack) router remove subnet router1 private_subnet
(openstack) router delete router1
```

**再作成**

```shell-session
(admin) # openstack subnet create --network public \
--allocation-pool start=192.168.0.70,end=192.168.0.90 \
--dns-nameserver 192.168.0.2 \
--gateway 192.168.0.1 \
--no-dhcp \
--subnet-range 192.168.0.0/24 public_subnet


(demo) # openstack 
(openstack) subnet set --dns-nameserver 192.168.0.2 private_subnet

(demo) # openstack
(openstack) router create demo-router
(openstack) router add subnet demo-router private_subnet
(openstack) router set --external-gateway public demo-router
```

**ICMP通信許可**

インスタンスへのping許可、すべてのコードとすべての種類のICMP通信が許可される

```shell-session
(demo) # openstack
(openstack) security group rule create --protocol icmp default
```

**SSH通信許可**

インスタンスへのTCP 22 ポートへの通信許可、すべてのコードとすべての種類のSSH通信が許可される

```shell-session
(demo) # openstack
(openstack) security group rule create default --protocol tcp \
--dst-port 22:22 --remote-ip 0.0.0.0/0
```

> 参考：
> (openstack) security group rule create default --protocol tcp --remote-ip 0.0.0.0/0 
> TCP 受信フルアクセス

https://docs.openstack.org/ja/user-guide/cli-nova-configure-access-security-for-instances.html

```shell-session
これをやらんと外との通信がとれない。

外部論理ブリッジとの紐づけ確認（br-ex）
# ovs-vstcl show 

Link UPしてる同一L2SWに刺さってるサーバ側ネットワークインタフェース確認（enp2s0）
# ip addr show

# ovs-vsctl add-port br-ex enp2s0

# ovs-vsctl
    Bridge br-ex ★
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port br-ex
            Interface br-ex
                type: internal
        Port phy-br-ex
            Interface phy-br-ex
                type: patch
                options: {peer=int-br-ex}
        Port "enp2s0"　★
            Interface "enp2s0" ★ 
```


> ひとまず、SSH秘密鍵とフローティングIPアドレスあHorizon UIから作った。
> 備忘： # openstack floating ip create public

# イメージ整備

**イメージダウンロード**

* CentOS 7
* Ubuntu 14.04 , 16.04
* Windows Server 2012

https://docs.openstack.org/ja/image-guide/obtain-images.html


> 備忘：
> ```# curl <url> -o <file name>```
> ```# xz -dv XXX.xz```


**イメージ登録**

```shell-session
(admin) # openstack image create \
--disk-format qcow2 \
--container-format bare \
--public \
--file ./CentOS-7-x86_64-GenericCloud
-1802.qcow2 CentOS-7-X86_64-1802
```

# 補足

* SELinux Disableにしとく
* いったんメモリ節約のため **Swift , Magnum , Manila , Heat**をstop and disable
* デフォルトのflavorは粗いので自分で適当に作る
 * CentOS イメージはRAMサイズと ルートディスクサイズに注意（1GB RAM, 10GB Diskはあった方が良い） 
* メモリのオーバーコミット率あげとく

```conf:nova.conf
ram_allocation_ratio = 1.5 （=> 3.0）
```

* 永続ブロックデバイス使うときは、cinder-volume の pool 容量に注意（デフォで20GB）
* Horizon UI からインスタンスあげると、ブロックデバイス作成が走る！？（CentOSイメージがHorizon UIからだとあがらない）

* centos_openstack-home を解除（lv を消して centos_openstack-rootを拡張）

```shell-session
/et/fstab の /home エントリをコメントアウト 
#/dev/mapper/centos_openstack-home      /home   xfs     defaults        0       0

アンマウント
# umount /home

該当のlv削除
# lvremove /dev/centos_openstack/home
Do you really want to remove active logical volume centos_openstack/home? [y/n]: y
  Logical volume "home" successfully removed

「centos_openstack」VGの容量確認
# vgdisplay 

空いている分全部割り当てる
# lvextend -l +100%FREE /dev/centos_openstack/root
  Size of logical volume centos_openstack/root changed from 50.39 GiB (12900 extents) to <224.01 GiB (57346 extents).
  Logical volume centos_openstack/root successfully resized.

xfs ファイルシステム最大まで拡張（xfsはオンラインで拡張可能）
# xfs_growfs /dev/mapper/centos_openstack-root
meta-data=/dev/mapper/centos_openstack-root isize=512    agcount=4, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=13107200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 13107200 to 58722304

確認（50GB => 最大に引き上げた）
# df -h /
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/centos_openstack-root  224G   14G  211G   6% /
```

> xfs_growfs /mount/point -D size
> https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/storage_administration_guide/xfsgrow


# オマケ

コマンドラインインスタンス起動

```shell-session
# openstack server create \
--flavor mid_c2_m2_d20 \
--image c06ed2c0-1b53-484f-beeb-04795038c6b3 \
--security-group default \
--key-name kurakey \
--network private \
centos-test
```
https://docs.openstack.org/ja/user-guide/cli-nova-launch-instance-from-image.html

# Nested KVM 

インスタンス上でもKVMを使う予定があるので。

https://docs.openstack.org/devstack/latest/guides/devstack-with-nested-kvm.html

## OpenStack ホスト側

KVM の Nested を有効にしておく。

* /sys/module/kvm_intel/parameters/nested（デフォルト：N）
* 起動しているインスタンスがあれば停止する（lsmod）
* kvm_intel をアンロード（modprobe -r kvm_intel）
* /etc/modprobe.d/kvm.conf　編集

```conf:/etc/modprobe.d/kvm.conf
# For Intel
options kvm_intel nested=1
```

* kvm_intel をロード（modprobe kvm_intel）
* /sys/module/kvm_intel/parameters/nested（Y）
* nova.conf の cpu_mode を変更（host-passthrough）
* nova-compute を再起動
* インスタンスの起動

> （注意）：インスタンス側のCPU Mode（XML形式）を```virsh edit```により**host-passthrough**に変えてやるだけでは反映しなかった。

## ついでにKVMのUI

評価検証時のデバッグするのにもあると便利。見たところ、**WebVirtMgr** というのが良さそうだったので入れてみる。

https://github.com/retspen/webvirtmgr

NestedしたインスタンスはCentOS7にしてたので、セットアップ手順は下記のページのまんま。
https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

補足だけ

* supervisord の部分は systemctl オペレーションにて
* ハイパーバイザの登録をローカルソケット経由で
 * ちょっとだけ準備が必要、といってもコマンド２，３発
 * https://github.com/retspen/webvirtmgr/wiki/Setup-Local-connection
* UIからのインスタンス起動は、Network , Storage 等を準備してから
* 既存Flavor経由だと作った環境だと上手くいかなそうだったのでCustomでインスタンス作成試行
   

# 参考

* https://docs.openstack.org/ja/user-guide/