URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

OpenStackにHeatをインストール

 社内のOpenStack環境はPackstackでインストールしたのですが、その時に入れたのは「Nova」「Keystone」「Glance」「Neutron」「Cinder」「Horizon」のみです。
 ただ、OpenStackの環境を十分に活かすためにはオーケストレーションは必須だろうということで「Heat」を追加することにしました。
 基本的にはRed Hat社のマニュアル通りに進めたのですが、その時の手順メモです。

 環境はRHEL 7とRed Hat Enterprise Linux OpenStack Platform 5 [Icehouseベース])の組み合わせです。

 OpenStackは一つノードに全てのコンポーネントを入れており、IPアドレスは"192.168.40.91"としています。

 まずは必要なパッケージをインストール

# yum -y install openstack-heat-* python-heatclient python-openstackclient openstack-utils

 続いてHeat用のデータベース/ユーザーを作成します。
 MySQL(MariaDB)にrootユーザーでアクセスし、次のSQLを実行します。
 ここではHeat用のデータベース/ユーザー/パスワードは全て"heat"にしています。

CREATE DATABASE heat; GRANT ALL ON heat.* TO 'heat'@'%' IDENTIFIED BY 'heat'; GRANT ALL ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'heat'; FLUSH PRIVILEGES;

 Heatの設定ファイル"heat.conf"にデータベースへのアクセス情報を記述します。
 ファイルを"vi"等で変更してもいいのですが、ここでは"crudini"コマンドで操作します(その方が後でスクリプト化しやすいので)。

# crudini --set /etc/heat/heat.conf DEFAULT sql_connection mysql://heat:heat@localhost/heat

 Heat用データベースを初期化します。

# runuser -s /bin/sh heat -c "heat-manage db_sync"

 "heat.conf"内でAPI関連の各セクションに"bind_host"を記述します。

# crudini --set /etc/heat/heat.conf heat_api bind_host 192.168.40.91
# crudini --set /etc/heat/heat.conf heat_api_cfn bind_host 192.168.40.91
# crudini --set /etc/heat/heat.conf heat_api_cloudwatch bind_host 192.168.40.91

 続いてkeystoneでHeat用ユーザー、サービス、エンドポイントを設定します。
 管理者用の認証情報を記載した環境ファイル"keystonerc_admin"ファイルを読み込んでから"keystone"コマンドを実行します。

# . /root/keystonerc_admin
# keystone user-create --name=heat --pass=heat
# keystone user-role-add --user heat --role admin --tenant services
# keystone service-create --name heat --type orchestration
# keystone service-create --name heat-cfn --type cloudformation
# keystone endpoint-create --region RegionOne \
--service heat-cfn \
--publicurl "http://192.168.40.91:8000/v1" \
--adminurl "http://192.168.40.91:8000/v1" \
--internalurl "http://192.168.40.91:8000/v1"
# keystone endpoint-create --region RegionOne \
--service heat \
--publicurl "http://192.168.40.91:8004/v1/%(tenant_id)s" \
--adminurl "http://192.168.40.91:8004/v1/%(tenant_id)s" \
--internalurl "http://192.168.40.91:8004/v1/%(tenant_id)s"

 Keystone v3 APIを使用してHeat用のIdentityドメインを作成します。
 あらかじめ管理トークンを確認します。管理トークンは"keystone.conf"ファイルで"admin_token"に設定されている値です。
 管理トークンは以降のコマンドで繰り返し使うので、変数に入れておきます。

# ADMIN_TOKEN=$(crudini --get /etc/keystone/keystone.conf DEFAULT admin_token)

 ドメイン"heat"、ドメイン管理ユーザー"heat_domain_admin"を作成し、権限を付与します。
 ドメインやユーザーを作成したときに表示されるIDを変数に入れ、後のコマンドで使いやすくしておきます。

# openstack --os-token $ADMIN_TOKEN --os-url=http://192.168.40.91:5000/v3 \
--os-identity-api-version=3 domain create heat \
--description "Owns users and projects created by heat"
# DOMAIN_ID=$(openstack --os-token $ADMIN_TOKEN --os-url=http://192.168.40.91:5000/v3 --os-identity-api-version=3 domain list | awk '/heat/ {print $2}')
# openstack --os-token $ADMIN_TOKEN --os-url=http://192.168.40.91:5000/v3 \
--os-identity-api-version=3 user create heat_domain_admin \
--password heat --domain ${DOMAIN_ID} \
--description "Manages users and projects created by heat"
# DOMAIN_ADMIN_ID=$(openstack --os-token $ADMIN_TOKEN --os-url=http://192.168.40.91:5000/v3 --os-identity-api-version=3 user list | awk '/heat_domain_admin/ {print $2}')
# openstack --os-token $ADMIN_TOKEN --os-url=http://192.168.40.91:5000/v3 \
--os-identity-api-version=3 role add \
--user ${DOMAIN_ADMIN_ID} --domain ${DOMAIN_ID} admin

 ここまで作成した認証情報やエンドポイントの情報を"heat.conf"に記述していきます。

# crudini --set /etc/heat/heat.conf DEFAULT stack_domain_admin_password heat
# crudini --set /etc/heat/heat.conf DEFAULT stack_domain_admin ${DOMAIN_ADMIN_ID}
# crudini --set /etc/heat/heat.conf DEFAULT stack_user_domain ${DOMAIN_ID}
# crudini --set /etc/heat/heat.conf DEFAULT heat_metadata_server_url http://192.168.40.91:8000
# crudini --set /etc/heat/heat.conf DEFAULT heat_waitcondition_server_url http://192.168.40.91:8000/v1/waitcondition
# crudini --set /etc/heat/heat.conf DEFAULT heat_watch_server_url http://192.168.40.91:8003
# crudini --set /etc/heat/heat.conf DEFAULT heat_stack_user_role heat_stack_user
# crudini --set /etc/heat/heat.conf keystone_authtoken admin_tenant_name services
# crudini --set /etc/heat/heat.conf keystone_authtoken admin_user heat
# crudini --set /etc/heat/heat.conf keystone_authtoken admin_password heat
# crudini --set /etc/heat/heat.conf keystone_authtoken service_host 192.168.40.91
# crudini --set /etc/heat/heat.conf keystone_authtoken auth_host 192.168.40.91
# crudini --set /etc/heat/heat.conf keystone_authtoken auth_uri http://192.168.40.91:35357/v2.0
# crudini --set /etc/heat/heat.conf keystone_authtoken keystone_ec2_uri http://192.168.40.91:35357/v2.0

 RabbitMQを使うための設定を追加します。

# crudini --set /etc/heat/heat.conf DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
# crudini --set /etc/heat/heat.conf DEFAULT rabbit_host 192.168.40.91
# crudini --set /etc/heat/heat.conf DEFAULT rabbit_port 5672
# crudini --set /etc/heat/heat.conf DEFAULT rabbit_userid guest
# crudini --set /etc/heat/heat.conf DEFAULT rabbit_password guest

 Heat関連サービスの起動、自動起動の有効化をします。

# systemctl start openstack-heat-api
# systemctl start openstack-heat-api-cfn
# systemctl start openstack-heat-api-cloudwatch
# systemctl start openstack-heat-engine
# systemctl enable openstack-heat-api
# systemctl enable openstack-heat-api-cfn
# systemctl enable openstack-heat-api-cloudwatch
# systemctl enable openstack-heat-engine

 以上で設定は完了です。
 "openstack-status"コマンドや"/var/log/heat"ディレクトリ以下のログファイルを確認してエラーがないことを確認します。
 また、Horizonに「オーケストレーション」メニューが追加されます。

 あとは実際にテンプレートを作成して動作確認ですが、とりあえずここまで。