2016年12月24日土曜日

OpenStack入門:OpenStack勉強用環境をAWS上に構築する

RDOは、CentOS、Fedora、およびRed Hat Enterprise Linuxを使用してOpenStackを構築する人々のためのコミュニティです。


RDOに All-In-One Quickstart というガイドがあるので、これを参考に手軽に環境構築をしましょう。

All-In-Oneとは、すべてのコンポーネントを1つのサーバ上で構築することを意味します。OpenStackにはたくさんのコンポーネントがあり、本番環境を構築・運用するにはコンポーネントごとにサーバーを分ける必要がありますし、冗長構成についても考える必要があります。しかしそれは非常に難しいので、まずOpenStackを勉強したいという人には高い高いハードルとなります。All-In-One Quickstartは、わずらわしい環境構築をすべてすっ飛ばして、とりあえず動作する環境を作るためのです。

ハマリポイント

  • 6GBのメモリが必要なので、AWSのインスタンスは t2.large で作ること
  • sshログインユーザはcentos
  • OpenStackインストール後、apacheのバーチャルホストの設定を修正する(後述)



AWSのインスタンスを作成


AWSのアカウントを作成しておいてください。クレジットカードが必要です。
AWSコンソールからEC2を開きます。

[インスタンスの作成]をクリック。
[AWS Marketplace]をクリック。
「CentOS」で検索。CentOS 7 (x86_64) - with Updates HVMを使うので[選択]ボタンをクリック。
ここがハマリポイント。必ず t2.large(以上)を選択すること。[確認と作成]ボタンをクリック。
6G(以上)のメモリがないとインストールの途中でメモリ不足でエラーとなる。ドキュメントでは4GB以上となっているが僕の経験では4Gでもダメだった。
[ステップ7: インスタンス作成の確認]ではt2.largeを選択しているので無料枠ではないという警告が出る。1時間0.1ドル程度のものなのでOpenStackの勉強の為に支払えるかは各自判断しよう。

画面を下にスクロールして[セキュリティグループ]の編集をする。
[ルールの追加]をクリック。
タイプに[HTTP]を選択し、[確認と作成]をクリック。
AWSへ接続するための鍵を作ります(既にある方はそれを選択すれば良いです)。
キーペアに自身にとって分かりやすい名前をつけて、[キーペアのダウンロード]をクリック。[キーペア名].pmというファイルがダウンロードされます。これはとても大切なファイルなので無くさないように、また他人に盗まれないように保管しましょう。
[インスタンスの作成]をクリク。
作成ステータス画面を下にスクロールして[インスタンスの表示]ボタンをクリック。
インスタンスが稼働(running)してるが、まだ初期化中ということがわかる。
この間に名前をつけておこう。Nameをクリックして「OpenStack All-In-One」など分かりやすい名前をつけておく。
「2/2のチェックに合格しました」となればOK。
仮想サーバーが起動したのでsshで接続します。
インスタンスを選択した状態で[アクション]ボタンをクリック。[接続]をクリック。

sshの接続のコマンド例が記載されているので、これをコマンドラインにコピペして接続しよう。
このコマンドに含まれるサーバーの名前(パブリックDNS)は、インスタンスの停止・起動を行うと変化するので注意。毎回この手順で確認すること。

この時、先ほど作成・ダウンロードしたキーペアのファイルが必要になる。sshコマンドを実行するカレントディレクトリに置いておこう。
$ cp  Downloads/aws-grgrjnjn.pem   ./
使用したイメージはsshからrootのログインは許可していないので、コピペしたコマンドのrootをcentosに修正してから実行する。
Are you sure you want to continue connecting (yes/no)? と聞かれたら yes を入力。
$ ssh -i "aws-grgrjnjn.pem" centos@ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com (52.198.51.3)' can't be established.
ECDSA key fingerprint is SHA256:gFIkSijmJVDHwoEY0ZUWGjb/qWEeDV23E+rXf/b4708.
Are you sure you want to continue connecting (yes/no)? yes
ログインできたらプロンプトが変わっていることが確認できる。
hostnameも確認しておこう。ホスト名はそれぞれの環境で異なる。
$ ssh -i "aws-grgrjnjn.pem" centos@ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com
[centos@ip-172-31-15-175 ~]$ hostname
ip-172-31-15-175



トラブルシューティング


次のようなワーニングが出たらキーペアのファイル(.pem)のパーミッションに問題がある。
Warning: Permanently added 'ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com,52.198.51.3' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'aws-grgrjnjn.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "aws-grgrjnjn.pem": bad permissions
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
パーミッションを変更しよう。
$ chmod 600 aws-grgrjnjn.pem
 ls -l *.pem
-rw-------@ 1 tokushima  staff  1696 12 23 22:46 aws-grgrjnjn.pem


次のようなメッセージが出てAWS上の仮想サーバーに接続できない時は、コマンドのrootをcentosに修正して再実行しよう。
$ ssh -i "aws-grgrjnjn.pem" root@ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com
Please login as the user "centos" rather than the user "root".

Connection to ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com closed.





OpenStackオールインワンのインストール


仮想サーバーの準備が整ったのでOpenStackのインストールに移ろう。


Step 0: 事前準備


SELinuxの停止。悪しき習慣とわかっていてもやめられないSELinuxの停止をまずは実施。
$ sudo vi /etc/selinux/config
赤字の1箇所を修正。
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
設定を反映するためにサーバーを再起動する。
$ sudo shutdown -r now


Step 1: Yumリポジトリの設定


RHELを使っている場合はリポジトリが異なるのでAll-in-one quickstartを参照しよう。
$ sudo yum install -y centos-release-openstack-newton


Step 2: Yumアップデート


すべて最新の状態にしておく。
$ sudo yum update -y


Step 3: OpenStackインストーラーをインストールする


RDOが提供するOpenStackのインストーラーであるPackstackをインストールする。
$ sudo yum install -y openstack-packstack


Step 4: OpenStackインストーラーを実行


Packstackを実行。
$ sudo packstack --allinone



インストール後のバーチャルホストの設定


ハマリポイント。ダッシュボードと呼ばれる管理画面コンポーネントHorizonをインターネット越しに使うためのAWS特有の設定。 これを書くためにこの記事を書いたと言っても過言ではない。やっときました。ここまで長かった...。

まず、インスタンスのパブリックDNSを確認する。この値はインスタンスの起動のたびに変わるので注意

Horizonのバーチャルホスト設定ファイル 15-horizon_vhost.conf を修正する。
$ sudo vi /etc/httpd/conf.d/15-horizon_vhost.conf
赤字の1行を挿入する。
  ## Server aliases
  ServerAlias ec2-52-198-51-3.ap-northeast-1.compute.amazonaws.com
  ServerAlias 172.31.24.209
  ServerAlias ip-172-31-24-209.ap-northeast-1.compute.internal
  ServerAlias localhost
  WSGIDaemonProcess apache group=apache processes=3 threads=10 user=apache
  WSGIProcessGroup apache
  WSGIScriptAlias /dashboard "/usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi"
設定変更を反映するためにApacheを再起動する。
$ sudo  systemctl  restart  httpd


ではログイン画面が表示されるかアクセスしてみよう。
http://(パブリックDNS)/dashboard/
ログイン画面が表示されれば成功だ。
ログインしてみよう。 管理者のIDは admin だ。パスワードは keystonerc_admin ファイルの中に記載されている。keystonerc_admin ファイルは Packstackを実行したディレクトリにあるはずだ。

$ sudo  cat  /root/keystonerc_admin
unset OS_SERVICE_TOKEN
    export OS_USERNAME=admin
    export OS_PASSWORD=c70188d9723c4122
    export OS_AUTH_URL=http://172.31.24.209:5000/v2.0
    export PS1='[\u@\h \W(keystone_admin)]\$ '
    
export OS_TENANT_NAME=admin
export OS_REGION_NAME=RegionOne


ログインが成功すれば次のような画面となる。



デモユーザでログインしたいならこちら。

$ sudo  cat  /root/keystonerc_demo
unset OS_SERVICE_TOKEN
export OS_USERNAME=demo
export OS_PASSWORD=27fb074855a74b81
export PS1='[\u@\h \W(keystone_demo)]\$ '
export OS_AUTH_URL=http://172.31.15.45:5000/v2.0
    
export OS_TENANT_NAME=demo
export OS_IDENTITY_API_VERSION=2.0

トラブルシューティング


ダッシュボードへのアクセスが 404 Not Found. になる場合は、前述のバーチャルホストの設定がされていないためだろう。インスタンスの起動のたびにパブリックDNSの値は変更されることに注意しながら確認してみよう。



今日はここまで。OpenStackの使い方はまた別の機会に。




0 件のコメント:

コメントを投稿