FC2ブログ

ホーム

スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告

CentOS6.2にOpenStack(Essex)をインストールしてみたよ -KeyStone編-

2012年05月23日 01:54

どうもご無沙汰してます :-)

プロジェクトの狭間で、ちょいと休みが取れることになったので、腰を据えてOpenStack(Essex)をCentOS6.2にインストールすることにしましたヽ(=´ω`=)/

OpenStackのインストール手順書やパッケージはUbuntuメインになっているけど、実運用で使うならRedHat系で動作させたくなるので、どうせなら棘の道を進んでみることにしましたw
どうせ棘の道なら....ということで、GitHubから取得してビルドしてみることにしました。

で、一番最初はOpenStackの認証の要になるKeyStoneです。OpenStackを構成するほかのコンポーネントが、認証にKeyStoneを使っているため、最初にインストールしておく必要があります...多分

この休みの間に、OpenStackのコンポーネントを
  1. KeyStone
  2. Glance
  3. Nova
  4. Horizon
の順番にインストールしていこうと思っています。
休みの間に全部インストールして、動作させることができるといいなぁ...

インストールの参考にしたページは

http://2done.org/openstack/index.html
http://lowlevellife.com/docs/essex-4/index.html
http://aikotobaha.blogspot.jp/2012/04/openstackessex-configuration-01db-queue.html http://aikotobaha.blogspot.jp/2012/04/openstackessex-configuration-02keystone.html

です。
インストール対象のOSはCentOS6.2 x64_86で、すべてのコンポーネントを1つのNodeにインストールします。
なので、ここで説明する設定は、すべて1つのノードにインストールする設定になっています。

それでは、インストール手順の説明をします。

※なお、ここからのインストールは、基本的にroot権限で行います。
 特別な説明がない限り、すべてrootでコマンドを実行しています。

1.事前準備

まずは、各種依存ライブラリやコマンドのインストールを行います。

1)Python環境の整備

GitHubから取得したイメージからインストールするために使う、Pythonパッケージ管理システムをインストールします。 Rubyのgemと同じようなものです :-)
$yum install setuptools $easy_install pip

2)共通パッケージのインストール

$yum install -y ntp man wget openssh-clients
NTPは必須。ファイルの時刻でタイミングを図っている機能があったはずなので...
何だったっけ?あとで調べよう...

GitHubから取得してインストールするので、gitをインストールしてない場合は
$yum install -y git
も忘れずに...

2.MySQLのインストールと設定

今回は、データベースにMySQLを使います。なので、MySQLのインストールおよび、ユーザ追加とデータベース生成を行います。

1)MySQLインストール

$yum install mysql-server $chkconfig mysqld on $/etc/init.d/mysqld start
※MySQLのrootパスワード変更を忘れずに...
※すでにMySQLがインストールされている場合は、ここの操作は不要です。

2)OpenStack用ユーザとデータベース生成

OpenStackでは、個々のコンポーネントごとのMySQLユーザとデータベースを用意する必要があります。 MySQLユーザとデータベースの追加手順は以下の通りです。
$mysql -uroot
mysql> grant all privileges on nova.* to nova@localhost identified by 'homuhomu';
mysql> grant all privileges on glance.* to glance@localhost identified by 'homuhomu';
mysql> grant all privileges on keystone.* to keystone@localhost identified by 'homuhomu';
mysql> grant all privileges on horizon.* to horizon@localhost identified by 'homuhomu';
mysql> create database nova;
mysql> create database glance;
mysql> create database keystone;
mysql> CREATE DATABASE horizon CHARACTER SET UTF8;
mysql> exit;
MySQLユーザのパスワードは、すべて"homuhomu"にしています。まっとうなシステムにインストールするなら、個別のパスワードを設定してくださいw

それから、horizon以外をUTF8にすると、

MySQL の仕様で主キーの合計が1000バイトを超えるテーブルの作成は行えません。

とのこと... なので、UTF8にするのはhorizonのみだそうな...
追加に成功すると、以下のようにデータベースが生成されているはずです...
mysql> SELECT host,user FROM mysql.user;
+-----------+----------+
| host | user |
+-----------+----------+
| localhost | glance |
| localhost | horizon |
| localhost | keystone |
| localhost | nova |
+-----------+----------+

3.Apache QPIDの設定(QPID)

コンポーネント間のメッセージングに用いるMessageQueueの設定です。 参考にしているブログにあわせて、ここではCentOS6.2には標準でインストールされているApache QPIDを使います。

1)動作していることの確認

$chkconfig --list | grep qpid
qpidd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ps -aef | grep qpid
qpidd 2156 1 0 09:03 ? 00:00:01 /usr/sbin/qpidd --data-dir /var/lib/qpidd --daemon

2)クライアントツール インストール

$yum install qpid-tools.noarch

3)設定変更

/etc/qpidd.conf を編集して、OpenStack用の定義を追加します。
cluster-mechanism=DIGEST-MD5 ANONYMOUS
auth=yes
realm=openstack
追加したのは realm=openstack です。

4)SASLのアクセス権限追加

OpenStackのNovaとGlanceから、/var/lib/qpidd/qpidd.sasldb へのアクセスする許可を追加します。
このときに設定するパスワードは "homuhomu"
※MySQLと同じにする必要はないと思うけど、面倒なので...

Nova、Glance用のユーザとして、qpid-nova、qpid-glanceを追加します。
このときのrealmはopenstackとします。
これは、/etc/qpidd.conf にrealmで追加したものです。 実際に追加するには
$saslpasswd2 -f /var/lib/qpidd/qpidd.sasldb -u openstack qpid-nova
$saslpasswd2 -f /var/lib/qpidd/qpidd.sasldb -u openstack qpid-glance
とコマンドを実行します。 設定完了後、Apache QPIDを再起動します。
$/etc/init.d/qpidd restart

4.KeyStoneのインストール

やっと本命のKeyStoneのインストールを行います。

1)GitHubから取得

$cd /usr/local/src/
$git clone https://github.com/openstack/keystone.git -b stable/essex
$git clone https://github.com/openstack/python-keystoneclient.git -b stable/essex
Essexから(?)サーバとクライアントの2つに分かれたみたい... なので、両方ビルド/インストールする必要があります。

2)依存ライブラリのインストール

KeyStoneで用いる、Pythonライブラリをインストールします。
GitHubから取得したファイルの中に、依存関係定義ファイル(keystone/tools/pip-requires)が存在するので、このファイルを使って依存するライブラリをインストールします。
$pip install -r /usr/local/src/keystone/tools/pip-requires
次に、MySQL用Pythonライブラリをインストールします。
$yum install MySQL-python

3)KeyStoneのビルド&インストール

KeyStoneのサーバおよびクライアントコマンドのビルドとインストールを行います。

・keystone

$cd /usr/local/src/keystone
$python setup.py build
$python setup.py install --record installfile.txt
インストールされると、 /usr/bin/ に、keystone-allとkeystone-manageがインストールされています。
/usr/lib/python2.6/site-packages/keystone-2012.1-py2.6.egg の下に、keystoneのPythonスクリプト一式がインストールされています。

・python-keystoneclient

$cd /usr/local/src/python-keystoneclient
$python setup.py build
$python setup.py install --record installfile.txt
インストールされると、 /usr/bin/ に、keystoneがインストールされています。
/usr/lib/python2.6/site-packages/python_keystoneclient-2012.2-py2.6.egg の下に、keystoneのPythonスクリプト一式がインストールされています。

5.KeyStone関係のディレクトリ生成とユーザ生成

$mkdir /etc/keystone /var/lib/keystone /var/log/keystone
$useradd -r -d /var/lib/keystone -s /bin/bash keystone

1)定義ファイルのコピー

GitHubから取得した定義ファイルを、インストールしたKeyStoneが参照するディレクトリにコピーします。
$cp -p /usr/local/src/keystone/etc/* /etc/keystone/
$chown -R keystone:keystone /etc/keystone/ /var/lib/keystone/ /var/log/keystone/

2)定義ファイルの設定変更

コピーした定義ファイルを、インストールした環境に合わせて設定します。

・/etc/keystone/keystone.conf

[DEFAULT]
#bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
admin_token = ADMIN
compute_port = 8774
verbose = True
debug = True
#log_config = ./etc/logging.conf.sample
log_file = /var/log/keystone/keystone.log # Add

# ================= Syslog Options ============================
# Send logs to syslog (/dev/log) instead of to file specified
# by `log-file`
use_syslog = False

# Facility to use. If unset defaults to LOG_USER.
# syslog_log_facility = LOG_LOCAL0

[sql]
#connection = sqlite:///keystone.db
connection = mysql://keystone:homuhomu@localhost/keystone  # Mod MySQL
idle_timeout = 200

[ldap]
#url = ldap://localhost
#tree_dn = dc=example,dc=com
#user_tree_dn = ou=Users,dc=example,dc=com
#role_tree_dn = ou=Roles,dc=example,dc=com
#tenant_tree_dn = ou=Groups,dc=example,dc=com
#user = dc=Manager,dc=example,dc=com
#password = freeipa4all
#suffix = cn=example,cn=com

[identity]
driver = keystone.identity.backends.sql.Identity

[catalog]
driver = keystone.catalog.backends.templated.TemplatedCatalog
#template_file = ./etc/default_catalog.templates
template_file = /etc/keystone/default_catalog.templates # Mod Path

[token]
driver = keystone.token.backends.kvs.Token

# Amount of time a token should remain valid (in seconds)
expiration = 86400

[policy]
driver = keystone.policy.backends.rules.Policy

[ec2]
#driver = keystone.contrib.ec2.backends.kvs.Ec2
driver = keystone.contrib.ec2.backends.sql.Ec2 # Mod kvs -> sql
....

・/etc/keystone/default_catalog.templates

1つのノードなので特に修正なし。 OpenStackを複数のノードで実現する場合は、変更が必要です。この辺は、

http://aikotobaha.blogspot.jp/2012/04/openstackessex-configuration-02keystone.html

を参考にしてください。

・/etc/keystone/policy.json

修正なし

6.KeyStone実行

$keystone-all &
正常に動作していれば、/var/log/keystone/keystone.logにDEBUGメッセージだけが出力されるはずです。

...
2012-05-22 19:32:51    DEBUG [root] starting server {(None, '/v2.0'): <keystone.middleware.core.TokenAuthMiddleware object at 0x2d86dd0>, (None, ''): <keystone.middleware.core.XmlBodyMiddleware object at 0x2d8b050>} on port 35357
2012-05-22 19:32:51    DEBUG [keystone.common.wsgi] Starting /usr/bin/keystone-all on 0.0.0.0:35357
2012-05-22 19:32:51    DEBUG [root] starting server {(None, '/v2.0'): <keystone.middleware.core.TokenAuthMiddleware object at 0x2d92510>, (None, ''): <keystone.middleware.core.XmlBodyMiddleware object at 0x2d92690>} on port 5000
2012-05-22 19:32:51    DEBUG [keystone.common.wsgi] Starting /usr/bin/keystone-all on 0.0.0.0:5000
2012-05-22 19:32:51    DEBUG [eventlet.wsgi.server] (10472) wsgi starting up on http://0.0.0.0:35357/

2012-05-22 19:32:51    DEBUG [eventlet.wsgi.server] (10472) wsgi starting up on http://0.0.0.0:5000/

7.KeyStoneの設定

それでは最後にKeyStoneにユーザなどの登録を行います。
この登録のため、環境変数に以下の値を設定します。
export SERVICE_ENDPOINT=http://localhost:35357/v2.0 export SERVICE_TOKEN=ADMIN
ここで設定している値は、keystone.confの
admin_port = 35357
admin_token = ADMIN
と関連しています。

1)DB初期化

KeyStoneデータベースの初期化は、keystone-manageコマンドで、以下のように行います。
$keystone-manage db_sync

2)DB初期化の確認

初期化によって生成されたテーブルを確認します。

$mysql -h localhost -ukeystone -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
...

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> use keystone
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------+
| Tables_in_keystone     |
+------------------------+
| ec2_credential         |
| endpoint               |
| metadata               |
| migrate_version        |
| role                   |
| service                |
| tenant                 |
| token                  |
| user                   |
| user_tenant_membership |
+------------------------+
10 rows in set (0.00 sec)

mysql>

3)アカウント情報の登録

keystoneコマンドを使って、tenantやuserなどのアカウント情報登録を行います。
本来は、実現するOpenStackの利用状況に沿ったuserなどの登録を行うのですが、今回はサンプルとして用意されている
$/usr/local/src/keystone/tools/sample_data.sh
を実行して、とりあえずアカウント情報を登録してみました。
登録された情報は、keystoneコマンドから一覧表示することができます。

$keystone tenant-list

+----------------------------------+--------------------+---------+
|                id                |        name        | enabled |
+----------------------------------+--------------------+---------+
| 06c894cba21347a8b99afa2b5219d0bb |        demo        |   True  |
| 0a33dfcc8bba40c3ae2a02eead19d2eb |      service       |   True  |
| d3d8a5a8230e468bb11a32647346dd5f |       admin        |   True  |
| f1d3100748a449b6965376fa0dd9689b | invisible_to_admin |   True  |
+----------------------------------+--------------------+---------+

$keystone service-list

+----------------------------------+-------------+-----------+---------------------------+
|                id                |     name    |    type   |        description        |
+----------------------------------+-------------+-----------+---------------------------+
| 48b2440992884edf93eff8384f9b00c9 |   keystone  |  identity | Keystone Identity Service |
| 9ed16d2b402d4ccba02ea80468ab6114 | nova-volume |   volume  |    Nova Volume Service    |
| be84d39455b0494ca7e05f3a526e88e1 |    glance   |   image   |    Glance Image Service   |
| c52eee2d625a490c96a7f2e2105f3a72 |     ec2     |    ec2    |  EC2 Compatibility Layer  |
| db03a14d1a434618b7e9644a543850b5 |   horizon   | dashboard |    OpenStack Dashboard    |
| eaf64df7c8964c5580d1fb849db5a93a |     nova    |  compute  |    Nova Compute Service   |
+----------------------------------+-------------+-----------+---------------------------+

$keystone user-list

+----------------------------------+---------+--------------------+--------+
|                id                | enabled |       email        |  name  |
+----------------------------------+---------+--------------------+--------+
| 53190ebb00d74849a14a57bc80cd1458 |   True  |  nova@example.com  |  nova  |
| 624513a6f8c44e4ab1654daf08a1b07a |   True  | glance@example.com | glance |
| c5d03d8bca1c401c81997f64aa091196 |   True  | admin@example.com  | admin  |
| eac892451fe748b2b58bb53836e15358 |   True  | admin@example.com  |  demo  |
+----------------------------------+---------+--------------------+--------+

$keystone role-list

+----------------------------------+----------------------+
|                id                |         name         |
+----------------------------------+----------------------+
| 022c655838ba488fb3f79989ab45b0d4 |    KeystoneAdmin     |
| 0f0e98c80ad341ec8b55f06c02613c75 |        Member        |
| 2e39e54a5d8d40a7b65f52b1d7ec26d1 |       netadmin       |
| cc444f170d944201bd0ea0612c46b2f0 |        admin         |
| ebe51c5953b540e28ee6e0adc95cd228 |       sysadmin       |
| fd77f9edf8464d4b8ddf9ce1f63661cf | KeystoneServiceAdmin |
+----------------------------------+----------------------+

補足説明 sample_data.shでインストールすると、passwordがデフォルトで"secrete"となります...
環境変数にパスワードを設定すれば、異なる文字列を設定できます。
詳しいことは...sample_data.shを読め!

4)実際にAPIを叩いてKeyStoneから情報を取得してみるテスト

これで、ひとまずKeyStoneのインストールと設定が完了したので、実際にKeyStoneのAPIを叩いてテストしてみます。以下のようにコマンドを実行して、結果が返ってくれば成功です :-)

$curl -d '{"auth": {"tenantName": "admin", "passwordCredentials":{"username": "admin", "password": "secrete" }}}' -H "Content-type:application/json" http://localhost:35357/v2.0/tokens | python -mjson.tool


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0   102      0  82994 --:--:-- --:--:-- --:--:-- 82994
108  1965  103  1965    0   102  31703   1645 --:--:-- --:--:-- --:--:-- 31050
{
    "access": {
        "serviceCatalog": [
            {
                "endpoints": [
                    {
                        "adminURL": "http://localhost:8776/v1/d3d8a5a8230e468bb11a32647346dd5f",
                        "internalURL": "http://localhost:8776/v1/d3d8a5a8230e468bb11a32647346dd5f",
                        "publicURL": "http://localhost:8776/v1/d3d8a5a8230e468bb11a32647346dd5f",
                        "region": "RegionOne"
                    }
                ],
                "endpoints_links": [],
                "name": "Volume Service",
                "type": "volume"
            },
            {
                "endpoints": [
                    {
                        "adminURL": "http://localhost:9292/v1",
                        "internalURL": "http://localhost:9292/v1",
                        "publicURL": "http://localhost:9292/v1",
                        "region": "RegionOne"
                    }
                ],
                "endpoints_links": [],
                "name": "Image Service",
                "type": "image"
            },
            {
                "endpoints": [
                    {
                        "adminURL": "http://localhost:8774/v1.1/d3d8a5a8230e468bb11a32647346dd5f",
                        "internalURL": "http://localhost:8774/v1.1/d3d8a5a8230e468bb11a32647346dd5f",
                        "publicURL": "http://localhost:8774/v1.1/d3d8a5a8230e468bb11a32647346dd5f",
                        "region": "RegionOne"
                    }
                ],
                "endpoints_links": [],
                "name": "Compute Service",
                "type": "compute"
            },
            {
                "endpoints": [
                    {
                        "adminURL": "http://localhost:8773/services/Admin",
                        "internalURL": "http://localhost:8773/services/Cloud",
                        "publicURL": "http://localhost:8773/services/Cloud",
                        "region": "RegionOne"
                    }
                ],
                "endpoints_links": [],
                "name": "EC2 Service",
                "type": "ec2"
            },
            {
                "endpoints": [
                    {
                        "adminURL": "http://localhost:35357/v2.0",
                        "internalURL": "http://localhost:5000/v2.0",
                        "publicURL": "http://localhost:5000/v2.0",
                        "region": "RegionOne"
                    }
                ],
                "endpoints_links": [],
                "name": "Identity Service",
                "type": "identity"
            }
        ],
        "token": {
            "expires": "2012-05-23T13:37:16Z",
            "id": "51ed4a8dc8db4f1780b9fbecdd5b0582",
            "tenant": {
                "description": null,
                "enabled": true,
                "id": "d3d8a5a8230e468bb11a32647346dd5f",
                "name": "admin"
            }
        },
        "user": {
            "id": "c5d03d8bca1c401c81997f64aa091196",
            "name": "admin",
            "roles": [
                {
                    "id": "cc444f170d944201bd0ea0612c46b2f0",
                    "name": "admin"
                },
                {
                    "id": "022c655838ba488fb3f79989ab45b0d4",
                    "name": "KeystoneAdmin"
                },
                {
                    "id": "fd77f9edf8464d4b8ddf9ce1f63661cf",
                    "name": "KeystoneServiceAdmin"
                }
            ],
            "roles_links": [],
            "username": "admin"
        }
    }
}

以上で、KeyStoneのインストールは完了です(`・ω・´) シャキーン
今回、手を抜いてsample_data.shを使ってアカウント情報登録を行ったので、あとでアカウント情報をリセットして、手で打ってみる予定...

そんなこんなで、実質4時間ぐらいでCentOSにインストールができました :-)
先人の知恵のおかげで、思っていたよりもはまることなくインストールができました~

次は、Glanceか...
スポンサーサイト

OpenStack コメント: 0 トラックバック: 0

< 前の記事 ホーム 次の記事 >

コメントを書く






    



管理者にだけ公開させる

ホーム

プロフィール

PANTOMAIMU

Author:PANTOMAIMU
本当は仕様を決めたり設計だけじゃなく、プログラミングもしたいのに~というジレンマを抱えながらも、時間があれば家でプログラムを作ったりしている、しがないSE....
趣味はお絵描きに曲作りに自転車 :-)

Twitter @PANTOMAIMU

カレンダー

03 | 2019/04 | 05
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -

FC2カウンター

最新トラックバック

検索フォーム

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。