designetwork

ネットワークを軸としたIT技術メモ

(Pike)PackStackで実用的なOpenStackスタンドアロン検証環境を構築する

f:id:daichi703n:20180304191716p:plain

OpenStack環境を簡単に構築できるPackStackで、少しのカスタマイズを加えて実用的なOpenStack検証環境を構築する。

OpenStackバージョン: Pike (Version: 12.0.2)

※あくまで検証環境ですので、セキュリティ、可用性、拡張性、マルチテナント等には課題が残ります。

PackStackインストール環境の課題

PackStackでのOpenStackインストールを試す中で、以下の点が課題と感じた。

  • Cinderのデフォルト容量が20GBのみ
  • Swiftのデフォルト容量が2GBのみ

いずれもストレージの課題で、インスタンスやオブジェクト数が増えてくるとすぐ容量不足となり使用できなくなる。

前提環境

物理サーバ

使用しているサーバはこちらで選定したDell PowerEdge T110 Ⅱ

designetwork.hatenablog.com

CPU: Intel XeonE3-1220v2
RAM: 24GB
DISK: 3TB

仮想サーバ

ハイパーバイザ: ESXi 6.5 スタンドアロン
ゲストOS: CentOS7(1708) Minimal
CPU: 4vCPU (ハードウェア仮想化ON)
RAM: 16GB
DISK: 32GB(OS), 128GB(Cinder), 128GB(Swift)

DISKはOS, Cinder, Swiftそれぞれ用として複数マウントする。

CentOS7セットアップ

詳細割愛。パーティション等は自動で問題なし。

ストレージ領域作成

OpenStackで使用するストレージ用にDISK設定をする。

用途は次の通り
/dev/sdb: Cinder
/dev/sdc: Swift

DISKパーティションを作成する。

[root@openstack1 ~]# fdisk /dev/sdb
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-268435455, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-268435455, default 268435455): 268435455
Partition 1 of type Linux and of size 128 GiB is set

Command (m for help): t
Hex code (type L to list all codes): 8e
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   268435455   134216704   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

[root@openstack1 ~]# fdisk /dev/sdc
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-268435455, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-268435455, default 268435455): 268435455
Partition 1 of type Linux and of size 128 GiB is set

Command (m for help): t
Hex code (type L to list all codes): 8e
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048   268435455   134216704   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

[root@openstack1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   32G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   31G  0 part
  ├─centos-root 253:0    0 27.8G  0 lvm  /
  └─centos-swap 253:1    0  3.2G  0 lvm  [SWAP]
sdb               8:16   0  128G  0 disk
└─sdb1            8:17   0  128G  0 part
sdc               8:32   0  128G  0 disk
└─sdc1            8:33   0  128G  0 part
sr0              11:0    1 1024M  0 rom

PV, VG, LV, FileSystemを作成する。

[root@openstack1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@openstack1 ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created.
[root@openstack1 ~]# vgcreate cinder-volumes /dev/sdb1
  Volume group "cinder-volumes" successfully created
[root@openstack1 ~]# vgcreate swift-volumes /dev/sdc1
  Volume group "swift-volumes" successfully created
[root@openstack1 ~]# lvcreate -n swift-lvs -l 100%FREE swift-volumes
  Logical volume "swift-lvs" created.
[root@openstack1 ~]# vgs
  VG             #PV #LV #SN Attr   VSize    VFree
  centos           1   2   0 wz--n-  <31.00g    4.00m
  cinder-volumes   1   0   0 wz--n- <128.00g <128.00g
  swift-volumes    1   1   0 wz--n- <128.00g <128.00g
[root@openstack1 ~]# lvs
  LV            VG             Attr       LSize    Pool
  root          centos         -wi-ao----   27.79g
  swap          centos         -wi-a-----   <3.20g
  swift-lvs     swift-volumes  -wi-ao---- <128.00g

[root@openstack1 ~]# mkfs.ext4 /dev/swift-volumes/swift-lvs
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
8388608 inodes, 33553408 blocks
1677670 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2181038080
1024 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@openstack1 ~]# lsblk
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   32G  0 disk
├─sda1                          8:1    0    1G  0 part /boot
└─sda2                          8:2    0   31G  0 part
  ├─centos-root               253:0    0 27.8G  0 lvm  /
  └─centos-swap               253:1    0  3.2G  0 lvm  [SWAP]
sdb                             8:16   0  128G  0 disk
└─sdb1                          8:17   0  128G  0 part
sdc                             8:32   0  128G  0 disk
└─sdc1                          8:33   0  128G  0 part
  └─swift--volumes-swift--lvs 253:2    0  128G  0 lvm
sr0                            11:0    1 1024M  0 rom
[root@openstack1 ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        28G  1.2G   27G   5% /
devtmpfs                devtmpfs  7.8G     0  7.8G   0% /dev
tmpfs                   tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs                   tmpfs     7.8G  8.6M  7.8G   1% /run
tmpfs                   tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  171M  844M  17% /boot
tmpfs                   tmpfs     1.6G     0  1.6G   0% /run/user/0

NIC情報取得

OpenStackインストールに必要となるため、NICの情報を取得しておく。この場合ens192という情報が必要となる。

[root@openstack1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:39:e7:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::a952:db6b:fd90:a906/64 scope link
       valid_lft forever preferred_lft forever

OpenStackインストール

PackStackを使用してOpenStackをインストールする。インストール方法は基本的にこちらを参照。

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

言語設定

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

CentOS各種パッケージを最新化

# yum update -y

ネットワーク環境設定

# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
# setenforce 0
# vi /etc/selinux/config
SELINUX=permissive

PackStackインストール・answer-file生成

# yum install -y centos-release-openstack-pike
# yum update -y
# yum install -y openstack-packstack
# packstack --gen-answer-file=answers.cfg

answer-file編集

生成されたanswer-fileを以下のように編集する。

# diff ./answers.cfg_default ./answers.cfg

< CONFIG_CINDER_VOLUMES_SIZE=20G
---
> CONFIG_CINDER_VOLUMES_SIZE=120G

< CONFIG_NEUTRON_OVS_BRIDGE_IFACES=
---
> CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:ens192

< CONFIG_SWIFT_STORAGES=
---
> CONFIG_SWIFT_STORAGES=/dev/swift-volumes/swift-lvs

< CONFIG_SWIFT_STORAGE_SIZE=2G
---
> CONFIG_SWIFT_STORAGE_SIZE=120G

< CONFIG_PROVISION_DEMO=y
---
> CONFIG_PROVISION_DEMO=n

CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:<ip aで確認したインタフェース>

CONFIG_SWIFT_STORAGES=<作成したLV>

cinderはVG名をcinder-volumesとしておけばここの個別設定不要。

少し古い情報だが、編集内容は以下が参考になる。

access.redhat.com

OpenStackインストール

answerファイルを読み込んでOpenStackをインストールする。puppetで各種インストールが走る。私の環境では30分程度かかった。

# packstack --answer-file=./answers.cfg

セッション断が起こりうるためコンソールから実行するのを推奨する。完了したら再起動する。

# reboot

OpenStack初期セットアップ

http://<IP or FQDN>にアクセスするとOpenStackのダッシュボードが表示される。

クレデンシャル(認証情報)はサーバrootに生成されている。

# cat ~/keystonerc_admin
unset OS_SERVICE_TOKEN
    export OS_USERNAME=admin
    export OS_PASSWORD='PASSWORD'
    export OS_AUTH_URL=http://192.168.1.201:5000/v3
    export PS1='[\u@\h \W(keystone_admin)]\$ '

export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3

キーペアを生成する

OpenStackでデプロイするVMへのアクセスはSSH秘密鍵が必要になる。 キーペアを生成して、ローカルに保存しておく。

f:id:daichi703n:20180304182756p:plain

ネットワークを作成する

今回はホストのCentOSをブリッジングして外部ネットワークと直接接続する。設定は次のようになる。(設定プロンプト割愛)

まずネットワークを作成する。 外部ネットワーク:true, ネットワークタイプ:フラット, 物理ネットワーク:extnet とする。

f:id:daichi703n:20180304182836p:plain

その中にサブネットを作成する。DHCPも有効にしておく。

f:id:daichi703n:20180304182909p:plain

セキュリティグループにICMP・SSH追加

セキュリティグループdefaultにALL ICMP, SSHを0.0.0.0/0で追加しておく。

f:id:daichi703n:20180304182924p:plain

イメージをダウンロードし登録する

OSのイメージをダウンロードする。とりあえずOpenStackテスト用のCirrOSを使用する。

OpenStack Docs: イメージの入手

なお、こちらから直接ダウンロードできる。(v0.4.0)

http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

プロジェクト > コンピュート > イメージ から、ダウンロードしたイメージを登録する。

CirrOSインスタンスを起動する

登録したCirrOSイメージのインスタンスを起動する。

イメージ > cirros > 起動

フレーバーはm1.tinyで起動可能。ネットワーク、セキュリティグループ、キーペアは上記で作成したものを指定する。

作成されたインスタンスのログを確認する。以下のような出力になっていればOK。

=== system information ===
Platform: RDO OpenStack Compute
Container: none
Arch: x86_64
CPU(s): 1 @ 3092.836 MHz
Cores/Sockets/Threads: 1/1/1
Virt-type: AMD-V
RAM Size: 488MB
Disks:
NAME  MAJ:MIN       SIZE LABEL         MOUNTPOINT
vda   253:0   1073741824               
vda1  253:1   1064287744 cirros-rootfs /
vda15 253:15     8388608               
=== sshd host keys ===
-----BEGIN SSH HOST KEY KEYS-----
ssh-rsa AAAAB3...Tb root@cirros
ssh-dss AAAAB3...== root@cirros
-----END SSH HOST KEY KEYS-----
=== network info ===
if-info: lo,up,127.0.0.1,8,,
if-info: eth0,up,192.168.1.217,24,fe80::f816:3eff:fe5d:26c4/64,
ip-route:default via 192.168.1.5 dev eth0 
ip-route:192.168.1.0/24 dev eth0  src 192.168.1.217 
ip-route6:fe80::/64 dev eth0  metric 256 
ip-route6:unreachable default dev lo  metric -1  error -101
ip-route6:ff00::/8 dev eth0  metric 256 
ip-route6:unreachable default dev lo  metric -1  error -101
=== datasource: None None ===
=== cirros: current=0.4.0 uptime=260.09 ===
  ____               ____  ____
 / __/ __ ____ ____ / __ \/ __/
/ /__ / // __// __// /_/ /\ \ 
\___//_//_/  /_/   \____/___/ 
   http://cirros-cloud.net


login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
cirros login: 

CirrOSにSSH接続する

インスタンス情報に表示されているIPアドレス(=上記ログに表示のIPアドレス)にSSH接続する。パスワードはログ中に記載の通り。

$ ssh cirros@192.168.1.217

cirros@192.168.1.217's password: gocubsgo
$ pwd
/home/cirros
$ uname -a
Linux cirros 4.4.0-28-generic #47-Ubuntu SMP Fri Jun 24 10:09:13 UTC 2016 x86_64 GNU/Linux

CirrOSにSSHアクセス・ログインできた。

SSHキーペアでログインできるようにする

上記のままだと登録したSSHキーペアでログインできない。(私の環境ではできなかった)

追加設定でSSH公開鍵によるログインを可能とする。

internalネットワーク・ルータ作成

下図のcirros-03の状態を作る。(cirros-01, 02構成ではSSHキーペアが登録されない)

f:id:daichi703n:20180304190206p:plain

設定概要は次の通り。

内部ネットワークを作成する。私は最終的にBOSH検証環境を構築したいためbosh-internalとしたが名前はなんでも良い。

f:id:daichi703n:20180304185734p:plain

あわせてサブネットも作成する。内部用ということでシェアードアドレスを割り当てる。

f:id:daichi703n:20180304185819p:plain

ルータを作成し、それぞれのネットワークに接続する。

f:id:daichi703n:20180304190038p:plain

Floating IPを作成する。

f:id:daichi703n:20180304190307p:plain

この環境で、internalネットワークを指定してインスタンスを起動、Associate Floating IPでIPアドレスを割り当てればOK。

SSH秘密鍵を指定してSSH接続

キーペアで正常にインスタンスに登録され、秘密鍵を使用してパスワードなしSSHログインが可能となる。

# ssh -i <key> cirros@192.168.1.212
The authenticity of host '192.168.1.212 (192.168.1.212)' can't be established.
ECDSA key fingerprint is SHA256:xxx.
ECDSA key fingerprint is MD5:xxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.212' (ECDSA) to the list of known hosts.
$ uname -a
Linux cirros-03 4.4.0-28-generic #47-Ubuntu SMP Fri Jun 24 10:09:13 UTC 2016 x86_64 GNU/Linux
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:cb:11:e0 brd ff:ff:ff:ff:ff:ff
    inet 100.64.0.19/24 brd 100.64.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fecb:11e0/64 scope link
       valid_lft forever preferred_lft forever

まとめ - PackStackで実用的なOpenStackスタンドアロン検証環境を構築する

OpenStack環境を簡単に構築できるPackStackで、少しだけ実用的なOpenStack検証環境を構築した。

  • Cinderのデフォルト容量が20GBのみ
  • Swiftのデフォルト容量が2GBのみ

というストレージ関連の課題を解消し、検証で使用可能な環境を構築することができた。