OpenStack環境を簡単に構築できるPackStackで、少しのカスタマイズを加えて実用的なOpenStack検証環境を構築する。
OpenStackバージョン: Pike (Version: 12.0.2)
※あくまで検証環境ですので、セキュリティ、可用性、拡張性、マルチテナント等には課題が残ります。
PackStackインストール環境の課題
PackStackでのOpenStackインストールを試す中で、以下の点が課題と感じた。
- Cinderのデフォルト容量が20GBのみ
- Swiftのデフォルト容量が2GBのみ
いずれもストレージの課題で、インスタンスやオブジェクト数が増えてくるとすぐ容量不足となり使用できなくなる。
- 前提環境
- CentOS7セットアップ
- OpenStackインストール
- OpenStackインストール
- OpenStack初期セットアップ
- CirrOSインスタンスを起動する
- SSHキーペアでログインできるようにする
- まとめ - PackStackで実用的なOpenStackスタンドアロン検証環境を構築する
前提環境
物理サーバ
使用しているサーバはこちらで選定したDell PowerEdge T110 Ⅱ
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
としておけばここの個別設定不要。
少し古い情報だが、編集内容は以下が参考になる。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux_OpenStack_Platform/6/html-single/Deploying_OpenStack_Proof_of_Concept_Environments/index.html#Editing_a_PackStack_Answer_Fileaccess.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秘密鍵が必要になる。 キーペアを生成して、ローカルに保存しておく。
ネットワークを作成する
今回はホストのCentOSをブリッジングして外部ネットワークと直接接続する。設定は次のようになる。(設定プロンプト割愛)
まずネットワークを作成する。
外部ネットワーク:true
, ネットワークタイプ:フラット
, 物理ネットワーク:extnet
とする。
その中にサブネットを作成する。DHCPも有効にしておく。
セキュリティグループにICMP・SSH追加
セキュリティグループdefaultにALL ICMP, SSHを0.0.0.0/0で追加しておく。
イメージをダウンロードし登録する
OSのイメージをダウンロードする。とりあえずOpenStackテスト用のCirrOSを使用する。
イメージの入手 — Virtual Machine Image Guide ドキュメント
なお、こちらから直接ダウンロードできる。(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キーペアが登録されない)
設定概要は次の通り。
内部ネットワークを作成する。私は最終的にBOSH検証環境を構築したいためbosh-internalとしたが名前はなんでも良い。
あわせてサブネットも作成する。内部用ということでシェアードアドレスを割り当てる。
ルータを作成し、それぞれのネットワークに接続する。
Floating IPを作成する。
この環境で、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のみ
というストレージ関連の課題を解消し、検証で使用可能な環境を構築することができた。