データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

ソースコードからOpenStackを構築する方法【第2回】GlanceとNeutronのインストール

本シリーズの第1回では、ソースコードからOpenStackをインストールする作業を開始しました。認証サービスであるKeystoneのインストールと初期設定を行い、Servicesプロジェクトやadminユーザーなどの基本情報を登録しました。また、準備スクリプトを使って、今後インストールするイメージサービス(Glance)、ネットワーキングサービス(Neutron)、コンピュートサービス(Nova)、ボリュームサービス(Cinder)用のユーザーやディレクトリも作成済みです。

今回はその続きとして、コントローラーノードにGlanceをインストールして起動し、さらにNeutronサーバーのセットアップまで進めていきます。

事前確認:シェル変数の設定

第1回の記事では、bashrcファイルにいくつかのシェル変数を追加しました。これらは以降の手順で使用します。まず、少なくとも以下の変数が設定されていることを確認してください。

echo $MY_IP

Glance(イメージサービス)のインストール

Glanceのインストールを始めるにあたり、追加のサブディレクトリを作成し、適切なパーミッションを設定します(基本となるglanceディレクトリは前回の記事のスクリプトで作成済みです)。

mkdir -p /var/lib/glance/images
mkdir -p /var/lib/glance/scrubber
mkdir -p /var/lib/glance/image-cache

次に、リポジトリをクローンしてGlanceをダウンロードします。

git clone https://github.com/openstack/glance.git -b stable/kilo

補足:上記のコマンドから -b stable/kilo を削除すれば、安定版ではなく開発版(trunk)からインストールすることも可能です。

続いて、設定ファイルをコピーし、Glanceをインストールします。

cp -R glance/etc/* /etc/glance/
cd glance
python setup.py install

glance-api.conf の設定

データベース接続情報、メッセージキュー情報、Keystoneへの接続情報など、基本的な設定を行います。sedコマンドを使って設定ファイルを編集していきます。

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-api.conf
sed -i "s/rabbit_host = localhost/rabbit_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-api.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-api.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-api.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-api.conf
sed -i 's/#show_image_direct_url = False/show_image_direct_url = True/g' /etc/glance/glance-api.conf

glance-registry.conf の設定

Glance Registryにも、上記と同じ情報を設定します。

sed -i "s|#connection = <None>|connection = mysql://glance:glance@$MY_PRIVATE_IP/glance|g" /etc/glance/glance-registry.conf
sed -i "s/auth_host = 127.0.0.1/auth_host = $MY_PRIVATE_IP/g" /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_TENANT_NAME%/service/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_USER%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/%SERVICE_PASSWORD%/glance/g' /etc/glance/glance-registry.conf
sed -i 's/#flavor=/flavor = keystone/g' /etc/glance/glance-registry.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-api.conf
sed -i 's|#connection = <None>|connection = mysql://glance:glance@$MY_IP|g' /etc/glance/glance-registry.conf

MySQLデータベースの作成

Glance用のMySQLデータベースを作成し、必要なテーブルを生成します。

mysql -u root -pmysql -e 'CREATE DATABASE glance;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"
glance-manage db_sync

glance-image-sync の導入

この環境では必須ではありませんが、glance-image-syncをインストールし、定期的に実行されるよう設定しておきます。複数のGlance APIノードを運用している場合、このツールがノード間でイメージを同期してくれます。

git clone https://github.com/rcbops/glance-image-sync
pushd glance-image-sync
mv glance-image-sync.py /usr/local/bin/glance-image-sync
chmod +x /usr/local/bin/glance-image-sync
popd

cat >> /etc/glance/glance-image-sync << EOF
[DEFAULT]
api_nodes = $MY_IP
rsync_user = glance
lock_file = /var/run/glance-image-sync
EOF

cat >>  /etc/cron.d/glance-image-syn << EOF
*/5 * * * * glance /usr/local/bin/glance-image-sync
EOF

ログローテーションの設定

Glanceのログファイルが肥大化しないよう、logrotateの設定も忘れずに行います。

cat >> /etc/logrotate.d/glance << EOF
/var/log/glance/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

Keystone署名証明書の配置

Identityサービス(Keystone)の署名証明書をImageサービス側に配置しないと、Image APIへのリクエストが失敗します。以下のコマンドでKeystoneの署名証明書をGlance用にコピーしておきましょう。

cp /etc/keystone/ssl/certs/ca.pem /var/lib/glance/cacert.pem
cp /etc/keystone/ssl/certs/signing_cert.pem /var/lib/glance/
chown glance:glance /var/lib/glance/*
chmod 600 /var/lib/glance/cacert.pem
chmod 600 /var/lib/glance/signing_cert.pem

Upstartスクリプトの作成

Glanceを起動する前に、Upstartスクリプトを作成する必要があります。

補足:これらのスクリプトは、Ubuntuのパッケージ版Glanceがインストールするものを流用したものです。

cat >> /etc/init/glance-api.conf << EOF
description "Glance API server"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-api -- --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini
EOF

cat >> /etc/init/glance-registry.conf << EOF
description "Glance registry server"
author "Soren Hansen <soren@linux2go.dk>"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec start-stop-daemon --start --chuid glance --exec /usr/local/bin/glance-registry -- --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini

EOF

Glanceの起動と動作確認

Glanceを起動し、正常に稼働しているか確認します。

start glance
start glance-registry

約15秒待ってから、以下のコマンドでGlanceが起動していることを確認してください。

ps aux|grep glance

正常に起動していれば、実行中のプロセスに関する行が出力されます。もし起動しない、またはプロセスがすぐ終了してしまう場合は、以下のコマンドで手動起動してトラブルシューティングを行います。

sudo -u glance glance-api --config-file=/etc/glance/glance-api.conf --config-file=/etc/glance/glance-api-paste.ini > /dev/null 2>&1 &

sudo -u glance glance-registry --config-file=/etc/glance/glance-registry.conf --config-file=/etc/glance/glance-registry-paste.ini > /dev/null 2>&1 &

ヒント: /etc/glance/glance.conf 内で debug = True を設定すると、ログ出力が増えるため、障害調査の際に役立ちます。

Cirrosイメージの登録

次に、OpenStackのインストール完了後にVMのベースとして使うためのイメージをGlanceに登録します。ここでは、Ubuntuベースの軽量クラウドイメージ「Cirros」を使用します。Glanceが起動している状態で、Cirrosイメージをダウンロードして登録しましょう。

wget https://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img

glance image-create --name=cirros-qcow2 \
                    --disk-format=qcow2 \
                    --container-format=bare \
                    --is-public=true < cirros-0.3.3-x86_64-disk.img

これで2つ目のプロセスが稼働しました。次はネットワーキングサービス(Neutron)のインストールに取り掛かります。Neutronのインストールは全部で3回必要です。コントローラーノード上のneutron-server、そしてネットワークノードとコンピュートノード上のneutron-agentです。

Sudo権限の設定

Nova、Neutron、Glanceの各プロセスは、さまざまなタスクを実行するためにrootまたはsudo権限を必要とします。そこで、これらのプロセスユーザー向けに特別なsudo権限を作成します。OpenStackではrootwrapという仕組みで権限の範囲を制限しています。以下のスクリプトを実行してsudo権限を設定してください。

for SERVICE in neutron nova cinder
do
echo $SERVICE
cat > '/etc/sudoers.d/'$SERVICE'_sudoers' << EOF
Defaults:$SERVICE !requiretty

$SERVICE ALL = (root) NOPASSWD: /usr/local/bin/$SERVICE-rootwrap  /etc/$SERVICE/rootwrap.conf *
EOF

chmod 440 /etc/sudoers.d/$SERVICE_sudoers
done
chmod 750 /etc/sudoers.d

Neutron(ネットワーキングサービス)のインストール

pipの前提パッケージの中には、自動的にインストールされない依存パッケージがいくつかあります。先にこれらをインストールしておきます。

apt-get -y install git mysql-client python-dev libxml2-dev libffi-dev

Neutronのリポジトリをクローンします。

git clone https://github.com/openstack/neutron.git -b stable/kilo

同梱されている設定ファイルをコピーします。

cp neutron/etc/* /etc/neutron/

必要な設定サブディレクトリもコピーします。

cp -R neutron/etc/neutron/plugins/ml2/* /etc/neutron/plugins/ml2
cp -R neutron/etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d

Neutronをインストールします。

cd neutron
python setup.py install
cd ~

MySQLデータベースの作成

Neutron用のMySQLデータベースを作成します。

mysql -u root -pmysql -e 'CREATE DATABASE neutron;'
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';"
mysql -u root -pmysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';"

Keystoneへのユーザー登録

前回の記事で実行したサンプルデータスクリプトには、Neutronサービスのデータが含まれていません。そこで、KeystoneにNeutronサービスユーザーを作成します。

keystone user-create --tenant service --name neutron --pass neutron

作成したNeutronサービスユーザーに「admin」ロールを付与します。

keystone user-role-add --user neutron --tenant service --role admin

ユーザー作成が正しく行われたか確認しましょう。サービスユーザーとロールの一覧を表示し、neutronユーザーが存在しadminロールを持っていることをチェックします。

keystone user-list --tenant Services
keystone user-role-list --tenant service --user neutron

上記2つのコマンドの出力で、neutronユーザーが作成され適切な権限を持っていることが確認できたら、Keystoneのサービスカタログにneutronサービスを登録します。

keystone service-create --name=neutron --type=network --description="Neutron Network Service"

続いて、neutronのエンドポイント情報をサービスカタログに登録します。

keystone endpoint-create --region RegionOne --service neutron --publicurl=https://$MY_PUBLIC_IP:9696 --internalurl=https://$MY_PRIVATE_IP:9696 --adminurl=https://$MY_PRIVATE_IP:9696

SERVICE_TENANT_ID=`keystone tenant-get service | awk '/ id / { print $4 }'`

neutron.conf の設定

最後にNeutronの設定を行います。パッケージ提供の基本設定ファイルは非常に長く編集が難しいため、削除してシンプルな内容に置き換えます(元のファイルはクローンしたneutronディレクトリ内に残っているので、後で参照することも可能です)。

rm /etc/neutron/neutron.conf

cat > /etc/neutron/neutron.conf << EOF
[DEFAULT]
verbose = True
debug = True
core_plugin = ml2
service_plugins = router
auth_strategy = keystone
allow_overlapping_ips = True
dhcp_agents_per_network = 1
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = https://$MY_PRIVATE_IP:8774/v2
nova_admin_username = nova
nova_admin_tenant_id = $SERVICE_TENANT_ID
#nova_admin_tenant_name = service
nova_admin_password = nova
nova_admin_auth_url = https://$MY_PRIVATE_IP:35357/v2.0

[agent]
root_helper=sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[keystone_authtoken]
auth_uri = https://$MY_PRIVATE_IP:35357/v2.0/
identity_uri = https://$MY_PRIVATE_IP:5000
admin_tenant_name = service
admin_user = neutron
admin_password = neutron
[database]
connection = mysql://neutron:neutron@$MY_PRIVATE_IP/neutron

[oslo_concurrency]
lock_path = /var/lock/neutron

[oslo_messaging_rabbit]
rabbit_host = $MY_PRIVATE_IP
EOF

Neutronのログファイルについても、logrotateの設定を行います。

cat >> /etc/logrotate.d/neutron << EOF
/var/log/neutron/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}
EOF

ML2プラグインの設定

NeutronはML2プラグインを通じて、複数のレイヤー2ネットワーク技術をサポートしています。ここでは、プロジェクトネットワークの分離にGREトンネルを使用するようML2プラグインを設定します。このエージェント自体はコントローラーノード上では動作しませんが、neutron-serverはプラグインの情報を把握している必要があります。

rm /etc/neutron/plugins/ml2/ml2_conf.ini
cat > /etc/neutron/plugins/ml2/ml2_conf.ini  << EOF

[ml2]
type_drivers = gre
tenant_network_types = gre
mechanism_drivers = openvswitch

[ml2_type_gre]
tunnel_id_ranges = 1:1000

[securitygroup]
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
EOF

chown neutron:neutron /etc/neutron/*.{conf,json,ini}
chown -R neutron:neutron /etc/neutron/plugins

cat > /etc/default/neutron << EOF
--config-file=/etc/neutron/plugins/ml2/ml2_conf.ini
EOF

データベーステーブルの作成

Glanceの場合と同様に、Neutronのデータベーステーブルを作成します。

neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

起動オプションの設定

Neutronサーバーを起動する前に、スタートアップスクリプトにオプション情報を渡し、ml2設定ファイルを読み込むようにします。

cat > /etc/default/neutron-server << EOF
NEUTRON_PLUGIN_CONFIG="/etc/neutron/plugins/ml2/ml2_conf.ini"
EOF

Upstartスクリプトの作成

最後に、neutron-serverプロセスを起動するためのUpstartスクリプトを作成します。

cat > /etc/init/neutron-server.conf << EOF
# vim:set ft=upstart ts=2 et:

start on runlevel [2345]
stop on runlevel [!2345]

script
  [ -r /etc/default/neutron-server ] && . /etc/default/neutron-server
  [ -r "\$NEUTRON_PLUGIN_CONFIG" ] && CONF_ARG="--config-file \$NEUTRON_PLUGIN_CONFIG"
  exec start-stop-daemon --start --chuid neutron --exec /usr/local/bin/neutron-server -- \
    --config-file /etc/neutron/neutron.conf \
    --log-file /var/log/neutron/server.log \$CONF_ARG
end script

EOF

Neutronサーバーの起動と動作確認

Neutronサーバーを起動し、プロセスが継続して稼働していることを確認します。2行目のコマンドで実行中のneutronプロセスの情報が表示されます(2つ目のコマンドを実行する前にも、約15秒ほど待ってください)。

start neutron
ps aux|grep neutron

もしNeutronが起動しない場合は、以下のコマンドで手動起動してみてください。起動時にエラーが発生していれば、デバッグに役立つ出力が得られます。

sudo -u neutron neutron-server --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/ml2/ml2_conf.ini --log-file /var/log/neutron/server.log

まとめと次回予告

今回は、コントローラーノードへのGlance(イメージサービス)のインストール・起動、Cirrosイメージの登録、そしてNeutronサーバーのセットアップまでを行いました。シリーズの次回記事では、コントローラーノードに複数のNovaプロセスをインストールしていきます。

  1. コマンドプロンプトとPowerShellでアプリをインストールする方法|Chocolatey完全ガイド

    ソフトウェアのインストールは、手間がかかり、繰り返し作業になりやすく、ミスも起こりやすいプロセスです。アプリを使い始めるまでに、ダウンロード→インストーラーの起動→完了待ちという流れが必要で、多くの時間を消費します。コマンドプロンプトからのアプリインストール方法を覚えれば、この時間を大幅に節約できます。さらにPowerShellを使えば、複数のアプリを同時にインストールすることも可能です。 PowerShellとコマンドプロンプトは、Windows 10/11上のアプリケーションをスムーズにインストールできるツールです。ただし、それぞれインストール手順には若干の違いがあります。本ガイドでは、コ

  2. 【完全ガイド】USBメモリを使ってWindows 11をゼロからクリーンインストールする方法

    Microsoftは、世界で最も利用されているパソコン向けOS「Windows」の最新バージョンとなるWindows 11を正式リリースしました。Windows 11には、ゲーム機能の強化、洗練されたシンプルなレイアウト、直感的に操作できるショートカットなど、数多くの新機能が搭載されています。Windows 11の最小ハードウェア要件を満たすWindows 10 PCをお持ちであれば、無料でアップグレードすることも可能です。 Windows 11のインストール方法はいくつか存在しますが、本記事では、既存OSからのアップグレードに頼らず、Microsoft公式のISOイメージや起動可能なUSBメ