CentOS 7でのOpenStackの構築手順
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/5593_main_0_8.png?itok=1JmYxSLV)
この連載が、書籍『CentOS 7 実践ガイド』になりました!
IT技術者のための現場ノウハウ CentOS 7 実践ガイド
CentOS 7を取り巻く市場動向、サーバーシステムの選定、システム設計、構築手順など![Amazon詳細ページへ](/sites/default/files/articles/assocbutt_or_detail._V371070159_.png)
連載最終回は、2015年2月時点でのOpenStackの最新版「Juno」のインストール手順を取り上げます。
RDOを使ったOpenStack Junoの構築
オープンソースのクラウド基盤としてOpenStackに注目が集まっています。OpenStackは、当初、NASAや米国の大手ホスティング企業であるRackspace社が取り組み、それにベンダー各社が追随した形で現在も開発が続いています。2015年4月にリリースが予定されている開発コードネーム「Kilo」の開発に貢献している企業の1位はHP、2位がRed Hat社であり、両社だけで36%に上ります。また、HP、Red Hat社だけでなく、SUSE CloudやCanonical社のUbuntu Serverのクラウド基盤もOpenStackがベースであり、主要なベンダーがOpenStackを使ったクラウド基盤を商用製品化しています。
OpenStack JunoとHadoop
2015年2月現在、OpenStackの最新版は、コードネーム「Juno」です。このJunoでは、Hadoopの配備が新機能としてあげられます。OpenStackにおけるHadoopの配備は、Saharaプロジェクトと呼ばれています。まだ発展途上ですが、Hadoopクラスタをクラウドサービスとして展開したいというニーズが高まっており、OpenStackに取り込まれることになりました。2014年4月に米国サンフランシスコで開催されたRed Hat Summit 2014において、既にOpenStackによるHadoopの配備がデモンストレーションされています。
Saharaプロジェクトに関する情報
https://wiki.openstack.org/wiki/Sahara
OpenStack JunoをCentOS 7にインストールする
本連載では、2015年2月時点でOpenStackの最新版である「Juno」をCentOS 7にインストールする手順を紹介します。OpenStackは、Red Hat社が主導しているRDOと呼ばれるコミュニティの成果物であるpackstackを使うと、RHEL互換OSであるCentOS上にOpenStackのテスト環境を簡単に構築することができます。CentOS 7がリリースされた当初は、OSの仕組みが大きく変わったことが影響し、packstackでのインストールでいくつかの問題がありましたが、現時点では、致命的な問題が解消されてきており、比較的簡単に構築ができるようになっています。以下では、注意点も交えながら、packstackを使ったインストール手順を紹介します。まず、OpenStackを構築する際に注意すべき点は、物理メモリの容量があげられます。必要な最低限のメモリ容量については、以下のOpenStackのドキュメントが参考になりますので、必ず参照してください。
OpenStack Installation Guide for Red Hat Enterprise Linux 7, CentOS 7, and Fedora 20 - juno
上記URLには、最小メモリ要件が記載されていますが、もしこのメモリ容量よりも下回る環境でインストールを行うと、メモリ不足に陥り、packstackによるOpenStackの構築処理が停止するか、挙動が不安定になります。とくにCentOS 7の場合は、OSの安定稼働に必要なメモリ容量も従来のCentOSに比べて大きくなっていますので、注意が必要です。本番環境では、サービス毎に物理サーバーを複数台に分け、サービスの高可用性を考慮してOpenStackを構築する必要がありますが、今回、RDOで提供されているpackstackを使うため、OpenStackを構築する物理サーバーは1台です。まず、物理サーバーにCentOS 7をインストールします。構築するサーバーがプロキシ経由でインターネットにアクセスする場合は、yum.confファイルを編集します。
# vi /etc/yum.conf ... proxy=http://proxy.your.site.com:8080 ←自社のプロキシサーバーのFQDNとポート番号を指定 ...
Packstackでのインストールでは、プロキシーサーバーを経由した場合のインストールが完了できない問題に対処する必要がありますので、それも踏まえて以後説明します。packstackをインストールする前に、CentOS 7を最新にアップデートします。
# yum update -y # reboot
次にRDOのコミュニティが提供しているリポジトリをインストールします。
# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm
リポジトリを登録したら、packstackをインストールします。
# yum install -y openstack-packstack
仮想化関連のパッケージをインストールしておきます。
# yum install -y qemu-kvm
SSHの公開鍵を生成します。
# ssh-keygen -t rsa
プロキシーサーバーを経由してpackstackを使ったOpenStack環境を構築する場合、ディスクイメージ等を管理するGlanceと呼ばれるプログラムがデモ用のOSイメージファイルの入手に失敗します。これを回避するため、イメージファイルをダウンロードするためのWebサーバーを別途1台用意します。WebサーバーであればOSのバージョンは問いません。Webサーバー上にデモ用のOSイメージファイル「cirros-0.3.2-x86_64-disk.img」をダウンロードします。今回は、仮に上記のWebサーバーのIPアドレスを172.16.31.8/16とすると、「http://172.16.31.8/cirros-0.3.2-x86_64-disk.img」でアクセスできるようにWebサーバーを構築し、イメージを配置しておきます。以下は、CentOS 7のWebサーバーでの設定例です。
websvr # cd /var/www/html/ websvr # wget http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img websvr # ls -l -rw-r--r-- 1 root root 13167616 Mar 18 2014 cirros-0.3.2-x86_64-disk.img websvr # systemctl start httpd websvr # systemctl stop firewalld
再度、packstackをインストールしたサーバーに戻って作業を続行します。HTTPのアクセスをプロキシーサーバー経由で行う場合は、$HOME/.bash_profileファイルにプロキシのための環境変数を設定しておきます。ここで、no_proxyを適切に設定します。この設定を誤ると後述のpackstackによるOpenStackの構築が正常に完了できません。
# vi /root/.bash_profile ... export http_proxy="http://proxy.your.site.com:8080" ←自社のプロキシサーバーのFQDNとポート番号を指定 export https_proxy="http://proxy.your.site.com:8080" ←自社のプロキシサーバーのFQDNとポート番号を指定 export no_proxy="localhost,127.0.0.1,172.16.31.71,172.16.31.8" ... # source /root/.bash_profile
上記では、no_proxyにローカルホスト(127.0.0.1)とOpenStackを構築するサーバー(172.16.31.71)、別途構築したWebサーバー(172.16.31.8)を登録しています。環境変数が適切に設定されているかを確認します。
# printenv |grep proxy http_proxy= http://proxy.your.site.com:8080 https_proxy= http://proxy.your.site.com:8080 no_proxy=localhost,127.0.0.1,172.16.31.71,172.16.31.8
OpenStackのパラメータに関する初期設定の雛型ファイル(アンサーファイルと言います)をpackstackコマンドで生成します。今回、初期設定ファイルの名前は、param.txtとしました。
# packstack --gen-answer=param.txt
アンサーファイルをエディタで開いてパラメータを設定します。
# vi param.txt ... CONFIG_NTP_SERVERS=172.16.31.8 (1) ... CONFIG_CINDER_VOLUMES_SIZE=20G (2) ... CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat (3) ... CONFIG_PROVISION_CIRROS_URL=http://172.16.31.8/cirros-0.3.3-x86_64-disk.img (4) ...
- OpenStackが接続するNTPサーバーを指定
- ブロックストレージの容量を指定
- 仮想ネットワーク用のドライバを指定
- Webサーバーを指定
アンサーファイルをpackstackにロードし、OpenStackの構築を開始します。
# packstack --answer-file=param.txt Welcome to the Packstack setup utility The installation log file is available at: /var/tmp/packstack/20150101-213846-QQ23jZ/openstack-setup.log Installing: Clean Up [ DONE ] Setting up ssh keys [ DONE ] Discovering hosts' details [ DONE ] Adding pre install manifest entries [ DONE ] Installing time synchronization via NTP [ DONE ] Preparing servers [ DONE ] Adding AMQP manifest entries [ DONE ] Adding MariaDB manifest entries [ DONE ] Adding Keystone manifest entries [ DONE ] ... ... 172.16.31.73_nagios_nrpe.pp: [ DONE ] Applying 172.16.31.73_postscript.pp 172.16.31.73_postscript.pp: [ DONE ] Applying Puppet manifests [ DONE ] Finalizing [ DONE ] **** Installation completed successfully ****** (1) Additional information: * Warning: NetworkManager is active on 172.16.31.73. OpenStack networking currently does not work on systems that have the Network Manager service enabled. * File /root/keystonerc_admin has been created on OpenStack client host 172.16.31.73. To use the command line tools you need to source the file. * To access the OpenStack Dashboard browse to http://172.16.31.73/dashboard . Please, find your login credentials stored in the keystonerc_admin in your home directory. * To use Nagios, browse to http://172.16.31.73/nagios username: nagiosadmin, password: f1af230ed8d34b76 * The installation log file is available at: /var/tmp/packstack/20150108-093956-ElAfcp/openstack-setup.log * The generated manifests are available at: /var/tmp/packstack/20150108-093956-ElAfcp/manifests
- 正常終了した場合に表示される
構築が正常に完了すると、上記のように「 **** Installation completed successfully ******」と表示されます。
【注意】NTPサーバーにおけるエラーメッセージ
packstackは、アンサーファイル内の「CONFIG_NTP_SERVERS=」で指定したNTPサーバーへの接続に失敗するとインストールが中断されます。また、「CONFIG_NTP_SERVERS=」で指定したNTPサーバーが、インターネット上にある上位のNTPサーバーに適切に接続できないと、NTPによる時刻同期が適切に行われません。代表的なエラーメッセージとしては、「no server suitable for synchronization found」と表示され、NTPサーバー自体の設定が正しくても、上位にあるインターネット上のNTPサーバーと時刻同期ができない場合が相当します。OpenStack側で指定したNTPサーバーが、上位にあるインターネット上のNTPサーバーと時刻同期ができる必要がありますが、企業内におけるプロキシーサーバーやデータセンターにおける構築スケジュールの関係上、NTPサーバーが上位のインターネット上のNTPサーバーと接続できない場合も少なくありません。そこで、OpenStackの接続先となるNTPサーバーが、上位にあるインターネット上のNTPサーバーと同期できない場合、OpenStackの接続先のNTPサーバーのリアルタイムクロック(RTC)を使用することで代用が可能です。この設定は、OpenStackの接続先となるNTPサーバーのntp.confファイルに設定を施します。以下は、NTPサーバー上での設定例です。
ntpsvr01 # vi /etc/ntp.conf ... restrict 172.16.0.0 mask 255.255.0.0 notrap (1) ... server 127.127.1.0 ...
- NTPの接続元のネットワークを設定
NTPサーバー上でntp.confファイルの設定を変更したら、NTPサービスを再起動します。NTPの設定において、通常は、「server」行で接続先のNTPサーバーを指定しますが、「server 127.127.1.0」を指定すると、上位にあるインターネット上のNTPサーバーに接続できない場合、自身のRTCを使用します。インターネット上のNTPサーバーを利用できない場合に有用ですが、RTCが提供する時刻は精度が低いため、あくまでテスト環境などでの一時的な利用に留めておいて下さい。HAクラスタ、マスタースレーブ方式のデータベースサーバー、Hadoopや分散ストレージ基盤などの複数のサーバー間で同期を取るようなシステムにおいては、時刻同期が適切に行われていないと動作が不安定になりますので、本番環境においては、RTCではなく必ずNTPサーバーによる時刻同期を行って下さい。
OpenStackの設定
OpenStackの初期設定を行います。OpenStackではソフトウェア定義ネットワークを実現するOpen vSwitchを使った仮想ネットワークを構成する必要があります。RDOが提供するpackstackを使ったインストールを行うと、Open vSwitchのための設定ファイルの雛型(ifcfg-eth0とifcfg-br-ex)が/etc/sysconfig/network-scriptsディレクトリに生成されています。まずは、ifcfg-eth0を編集します。
# cd /etc/sysconfig/network-scripts/ # cp ifcfg-br-ex org.ifcfg-br-ex # cp ifcfg-eth0 org.ifcfg-eth0 # vi ifcfg-eth0 DEVICE="eth0" ONBOOT=yes HWADDR=52:54:00:6C:BD:2C NM_CONTROLLED=yes TYPE=OVSPort (1) OVS_BRIDGE=br-ex (2)
- タイプにOVSPortを指定
- 紐づけるブリッジとしてbr-exを指定
次に、ifcfg-br-exを編集します。
# vi ifcfg-br-ex DEVICE=br-ex DEVICETYPE=ovs (1) TYPE=OVSBridge (2) BOOTPROTO=none IPADDR=172.16.31.71 NETMASK=255.255.0.0 GATEWAY=172.16.1.1 ONBOOT=yes NM_CONTROLLED=yes
- デバイスタイプとして「ovs」を指定
- Open vSwitchが提供する仮想ブリッジとして振る舞う
CentOS 7において、Open vSwitchのサービスが、NetworkManagerの後に起動するように、Afterの行にNetworkManager.serviceを追加します。
# vi /usr/lib/systemd/system/openvswitch.service [Unit] Description=Open vSwitch After=syslog.target network.target openvswitch-nonetwork.service NetworkManager.service Requires=openvswitch-nonetwork.service [Service] Type=oneshot ExecStart=/bin/true ExecStop=/bin/true RemainAfterExit=yes [Install] WantedBy=multi-user.target
br-exのポートをeth0に紐づけます。もしeth0経由で遠隔から設定を行っている場合、以下のコマンドを入力すると、ネットワークが切断されますので、別途用意した管理用のネットワーク、あるいは、ローカルマシンで直接操作を行うか、サーバーに搭載されている遠隔管理チップの仮想端末経由などで作業するようにして下さい。
# ovs-vsctl add-port br-ex eth0
OSを再起動します。
# reboot
OSを再起動後、br-exという名前の仮想ブリッジの状態を確認します。Open vSwitchが提供する仮想ブリッジの状態を確認するには、ovs-vsctlコマンドにshowを付与します。
# ovs-vsctl show ... Bridge br-ex Port "eth0" Interface "eth0" Port "qg-3d4570df-7f" Interface "qg-3d4570df-7f" type: internal Port br-ex Interface br-ex type: internal ovs_version: "2.1.3" ...
上記のように、仮想ブリッジbr-exにおいて、eth0のポートとbr-exのポートが両方表示されているかどうかを確認してください。ipコマンドで、IPアドレスの付与状況の確認と、仮想ブリッジのbr-ex経由で外部のネットワークと通信が可能かどうかも確認してください。
# ip a 1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN 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 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000 link/ether 52:54:00:e7:05:bb brd ff:ff:ff:ff:ff:ff 3: ovs-system: <broadcast,multicast> mtu 1500 qdisc noop state DOWN link/ether 32:f4:8f:99:ca:2e brd ff:ff:ff:ff:ff:ff 4: br-ex: <broadcast,multicast,up,lower_up> mtu 1500 qdisc noqueue state UNKNOWN link/ether e2:00:92:c0:43:41 brd ff:ff:ff:ff:ff:ff inet 172.16.31.73/16 brd 172.16.255.255 scope global br-ex valid_lft forever preferred_lft forever inet6 fe80::e000:92ff:fec0:4341/64 scope link valid_lft forever preferred_lft forever 5: br-int: <broadcast,multicast> mtu 1500 qdisc noop state DOWN link/ether 42:b6:94:8d:de:45 brd ff:ff:ff:ff:ff:ff 8: br-tun: <broadcast,multicast> mtu 1500 qdisc noop state DOWN link/ether ca:32:bb:f5:90:47 brd ff:ff:ff:ff:ff:ff </broadcast,multicast></broadcast,multicast></broadcast,multicast,up,lower_up></broadcast,multicast></broadcast,multicast,up,lower_up></loopback,up,lower_up>
以上で、packstackによるOpenStackのインストールは完了しましたので、OpenStackの管理GUIであるHorizonにログインできるかを確認します。Horizonにadminアカウントでログインするために、adminアカウントのパスワードを確認します。adminアカウントのパスワードは、/root/keystonerc_adminファイル内に記述された環境変数「OS_PASSWORD」の値です。
# cat /root/keystonerc_admin export OS_USERNAME=admin export OS_TENANT_NAME=admin export OS_PASSWORD=ad51908068f34883 export OS_AUTH_URL=http://172.16.31.71:5000/v2.0/ export OS_REGION_NAME=RegionOne export PS1='[\u@\h \W(keystone_admin)]\$ '
OpenStackを構築したサーバーにHTTP経由でアクセスします。
以上で、OpenStack JunoをCentOS 7にインストールする手順を紹介しました。OpenStackは、先進のオープンソースソフトウェアであり、CentOS 7での導入実績もこれから益々増えてくることでしょう。クラウド基盤ソフトウェアは進化が速いため習得が大変ですが、掲載したインストール手順で最新のクラウド基盤を体験してみて下さい。
この連載が書籍になりました! | |
---|---|
![]() 古賀 政純 著 |
CentOS 7実践ガイド本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
|