OpenStack構築上の注意
OpenStackの新連載がスタートします。本連載では、2016年4月にリリースされたOpenStack Mitakaの導入手順をご紹介します。OpenStack Mitakaは、Red Hat系のディストリビューションやUbuntu Serverなどで稼働させることが可能ですが、Red Hat系ディストリビューション向けには、構築を自動化するツール「Packstack」が存在します。今回は、Packstackを使ったOpenStack Mitakaの導入手順、GUIを使っての運用管理手順、ソフトウェア定義型ネットワークの作成、そして、実際にユーザーがOpenStack環境で利用するゲストOSの起動方法などを紹介します。
OpenStack構築上の注意
まず、OpenStackを構築する際に注意すべき点は、インストール対象のサーバーの物理メモリの容量があげられます。必要な最低限のメモリ容量については、以下のOpenStackのドキュメントが参考になりますので、必ず参照してください。
http://docs.openstack.org/mitaka/install-guide-rdo/overview.html#figure-hwreqs
上記URLには、最小メモリ要件が記載されていますが、もしこのメモリ容量よりも下回る環境でインストールを行うと、メモリ不足に陥り、PackstackによるOpenStackの構築処理が停止するか、挙動が不安定になる可能性があります。Packstackに限らず、OpenStackではさまざまなサービスが稼働するため、CPUコア数の要件、最小メモリ要件が設けられています。テスト環境では、少ないメモリ容量も想定されるかと思いますが、メモリ容量が少ない場合は、OpenStackの各種コンポーネントの動作に影響を与えますので、最小メモリ要件を超えるハードウェア環境を用意してください。
ネットワークの設定
本番環境では、サービス毎に物理サーバーを複数台に分け、サービスの高可用性を考慮してOpenStackを構築する必要がありますが、今回、RDOで提供されているPackstackを使うため、OpenStackを構築する物理サーバーは1台ですが、NICは2枚搭載しています。簡易的な開発環境であれば、NICは1枚でもかまいませんが、今回は、NICを2枚搭載した場合のPackstackの設定も含めて解説するため、以下の環境を想定しています。
NIC | ネットワークの種類 |
---|---|
eth0 | パブリックネットワーク(ユーザーが利用するネットワーク) |
ens9 | OpenStackの内部通信用ネットワーク |
今回は、eth0を経由して、インターネットにアクセスでき、パッケージなどのダウンロードができることを前提とします。また、内部通信用のens9には、IPアドレスを付与する必要があります。インターフェースにIPアドレスが付与されていないと、PackstackによるOpenStackの自動構築が途中で停止する場合があります。
CentOS 7インストール後の設定
まず、物理サーバーにCentOS 7.xをインストールします。パッケージは最小限でかまいません。OSのインストールが完了したら、IPv6を無効にします。
# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf # sysctl -p # cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1
/etc/hostsにホスト名を登録しておきます。
# vi /etc/hosts 172.16.1.121 n0121 n0121.jpn.linux.hpe.com
OpenStackの内部通信用のNICのens9の設定ファイルを作成するため、MACアドレスを調べます。
# ip a ... 2: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:da:2b:9a brd ff:ff:ff:ff:ff:ff ...
ens9用の設定ファイルを作成します。調べたMACアドレスを含めて記述します。
# vi /etc/sysconfig/network-scripts/ifcfg-ens9 NAME="ens9" HWADDR=52:54:00:da:2b:9a ONBOOT=yes BOOTPROTO=static TYPE=Ethernet IPADDR=192.168.1.121 PREFIX=24
現時点でのネットワークの設定ファイルの状況を確認しておきます。後にブリッジを構成しますので、ここでは、PackstackによるOpenStackの自動構築のための一時的なネットワーク設定です。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 NAME="eth0" HWADDR=52:54:00:72:8C:0A ONBOOT=yes NETBOOT=yes UUID="5b4d4e97-71eb-4f46-8e05-3065c92a262d" BOOTPROTO=none TYPE=Ethernet DNS1="172.16.1.1" DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPADDR=172.16.1.121 PREFIX=16 GATEWAY=172.16.1.1 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes # cat /etc/sysconfig/network-scripts/ifcfg-ens9 NAME="ens9" HWADDR=52:54:00:da:2b:9a ONBOOT=yes BOOTPROTO=static TYPE=Ethernet IPADDR=192.168.1.121 PREFIX=24
CentOS 7.xの場合は、NetworkManagerを停止し、OS起動時のサービスの自動起動を無効に設定しておきます。
# systemctl status NetworkManager # systemctl stop NetworkManager # systemctl disable NetworkManager
テスト環境向けのセキュリティー設定
今回は、SELinuxとファイアウォールをオフに設定します。
# vi /etc/sysconfig/selinux ... SELINUX=disabled ... # systemctl stop firewalld # systemctl disable firewalld
ネットワークとSELinuxの設定をシステムに反映するため、OSを再起動します。
# reboot
OS再起動後の設定確認
OS再起動後、NetworkManager、SELinux、ファイアウォールが無効になっており、OpenStackの内部通信用のNICにIPアドレスが正しく設定されていることを確認しておきます。
# systemctl status NetworkManager ●NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled) Active: inactive (dead) # getenforce Disabled # systemctl status firewalld ●firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Apr 29 03:00:36 n0121 systemd[1]: Stopped firewalld - dynamic firewall daemon. # ip a |grep inet inet 127.0.0.1/8 scope host lo inet 192.168.1.121/24 brd 192.168.1.255 scope global ens9 inet 172.16.1.121/16 brd 172.16.255.255 scope global eth0
cinder用のLVMボリュームの作成
PackstackによるOpenStackの自動構築では、cinderによる外部ストレージ用のサービスを設定することができます。しかし、外部ストレージが接続されていないサーバー単体の環境でcinderのテストを行う場合は、サーバーのローカルディスク内に作成したイメージファイルを使って、cinder用のLVMボリュームを作成する必要があります。Packstackの設定ファイルでcinderを有効にしたにもかかわらず、cinder用のLVMボリュームが存在しない場合、Packstackによる自動構築が失敗しますので、この時点でcinder用のLVMボリュームを作成しておくことをお勧めします。今回は、サーバーのローカルディスク内に作成したイメージファイルを使って、cinder用のLVMボリュームを作成します。まず、cinder用のLVMボリュームとなるイメージファイルcinder.imgをddコマンドで作成します。今回は、テスト用として、32Gバイトのイメージファイルを/rootディレクトリに作成することにします。
# dd if=/dev/zero of=/root/cinder.img bs=1024M count=32
CentOS 7.2では、ループバックデバイスを使ってイメージをマウントしますので、現在のループバックデイバスの状況を確認します。
# losetup -a
何も表示されない場合は、/dev/loop0を利用することが可能ですので、cinder.imgファイルをループバックデバイス/dev/loop0に割り当てます。
# losetup /dev/loop0 /root/cinder.img
ループバックデバイスにLVMパーティションを作成します。今回、パーティションは、GPTで割り当てます。
# parted -s /dev/loop0 'mklabel gpt' # parted -s /dev/loop0 'mkpart primary 0 -1' Warning: The resulting partition is not properly aligned for best performance. # parted -s /dev/loop0 'set 1 lvm on' # parted -s /dev/loop0 'print' Model: Loopback device (loopback) Disk /dev/loop0: 34.4GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 34.4GB 34.4GB primary lvm
ループバックデバイス/dev/loop0にLVMボリュームグループを作成します。vgcreateコマンドによりボリュームグループを作成する際に、ボリュームグループ名に「cinder-volumes」を指定します。
# partprobe /dev/loop0 # cat /proc/partitions major minor #blocks name 11 0 1048575 sr0 8 0 134217728 sda 8 1 512000 sda1 8 2 132656128 sda2 8 3 1048576 sda3 7 0 33554432 loop0 259 0 33553439 loop0p1 # pvcreate -y -ff /dev/loop0p1 Physical volume "/dev/loop0p1" successfully created # vgcreate -y -f cinder-volumes /dev/loop0p1 Volume group "cinder-volumes" successfully created
以上で、cinder用のLVMボリュームグループの作成は完了しました。