このエントリーをはてなブックマークに追加

5.2.9. Heatのインストール

Heatは、AWSのCloudFormationやCloudWatchなどを実装するプロジェクトです。
説明は <Heatの説明 http://www.slideshare.net/dbelova/openstack-heat-slides>_ に分かりやすいものが有りました。
DevStackでのインストール方法も載っています。
CloudFormatinonはプロビジョニングツールでオートスケールやテンプレートからクラウドの構築、CloudWatchはクラウドの監視などを行います。

5.2.9.1. Heatプロジェクトのロードマップ

今はまだインキュベーションプロジェクトにもなっていないので実際にエンドユーザが利用できるようになるまでは1年くらいかかるみたいです。

5.2.9.1.1. Targeted at Folsom

気になるところとしてはオートスケールを試してみたいところです。

  1. Complete integration with Common, Glance, Keystone, Swift, and Nova
  2. Complete implementation of the AWS CloudFormation API
  3. Usable implementation of AWS CloudWatch API
  4. Complete implementation for all non-VPC related resource types in CloudFormation
  5. Instance and application high availability
  6. Autoscaling
  7. Nested Stacks

5.2.9.1.2. Targeted at G release

  1. incubation
  2. Optimizing project governance to match OpenStack standards
  3. Complete implementation of AWS CloudWatch API, contributing appropriate technology into Ceilometer
  4. Complete integration with Quantum, providing complete VPC feature coverage

5.2.9.1.3. Targeted at H release:

  1. Hardening of source tree
  2. Improving source tree to meet OpenStack design principles
  3. Promotion to core

5.2.9.2. Heatのダウンロード

まだパッケージ化などはされていないみたいなのでインストールはソースから行う必要があります。
Heat Wiki の中のUbuntuのページを参考にインストールを行いました。
OpenStackの環境が一通り設定できていて利用可能になっているものとして記述しています。

5.2.9.2.1. Heatのダウンロード及びインストール

バージョンは6にしていますが発展途上中なので最新版を利用したほうが面白いかもしれません。
$ sudo git clone git://github.com/heat-api/heat.git /opt/heat
$ cd /opt/heat && sudo git checkout -b version6 refs/tags/v6.release
$ sudo pip install -r /opt/heat/tools/pip-requires
$ sudo ./install.sh

5.2.9.3. Heatのコンフィグ

Heatのコンフィグを行います。
バックアップをディレクトリごととっておきましょう。
$ sudo cp -a /etc/heat /etc/heat_bak

5.2.9.3.1. 共通設定

デフォルトではQpidに接続する設定になっていますのでRabbitMQに接続するように変更します。

$ cd /etc/heat
$ sudo vi heat-api.conf heat-api-cfn.conf heat-api-cloudwatch.conf heat-engine.conf heat-metadata.conf

bind_host = 0.0.0.0
↓変更
bind_host = 192.168.10.50

rpc_backend=heat.openstack.common.rpc.impl_qpid
↓変更
rpc_backend=heat.openstack.common.rpc.impl_kombu

最下行に以下をを追加
rabbit_host=stack01
rabbit_virtual_host=/nova
rabbit_userid=nova
rabbit_password=password

5.2.9.3.2. Keystoneへの接続設定

Keystoneへの接続設定パスワードを変更しておきます。

$ vi heat-api-cfn-paste.ini heat-api-cloudwatch-paste.ini heat-api-paste.ini
admin_tenant_name = admin
admin_user = admin
admin_password = verybadpass
↓変更

admin_tenant_name = service
admin_user = heat
admin_password = password

5.2.9.3.3. データベース接続設定の変更

$ sudo vi heat-engine.conf
sql_connection = mysql://heat:heat@localhost/heat

sql_connection = mysql://heat:password@stack01/heat?charset=utf8

5.2.9.3.4. IPアドレス関連の設定

$ NOVA_CONTOLLER_HOSTNAME=stack01
$ sudo sed -i "s/verybadpass/password/"               /etc/heat/heat-api-cfn-paste.ini
$ sudo sed -i "s/localhost/$NOVA_CONTOLLER_HOSTNAME/" /etc/heat/heat-api-cfn-paste.ini
$ sudo sed -i "s/127.0.0.1/$NOVA_CONTOLLER_HOSTNAME/" /etc/heat/heat-api-cfn-paste.ini
$ sudo sed -i "s/verybadpass/password/"               /etc/heat/heat-api-cloudwatch-paste.ini
$ sudo sed -i "s/localhost/$NOVA_CONTOLLER_HOSTNAME/" /etc/heat/heat-api-cloudwatch-paste.ini
$ sudo sed -i "s/127.0.0.1/$NOVA_CONTOLLER_HOSTNAME/" /etc/heat/heat-api-cloudwatch-paste.ini

5.2.9.3.5. データベースの作成

Keystoneが利用するデータベースを作成します。
Keystoneのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意して下さい。
データベース名heat、ユーザ名heat、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
同期する際の-rオプションの箇所についてはMySQLのrootユーザのパスワードを入力してください。
$ mysql -u root -pnova -e "drop database heat;"
$ mysql -u root -pnova -e "create database heat character set utf8;"
$ mysql -u root -pnova -e "grant all privileges on heat.* to 'heat'@'%' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on heat.* to 'heat'@'localhost' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on heat.* to 'heat'@'stack01' identified by 'password';"
$ sudo heat-db-setup deb -r nova

5.2.9.3.6. Keystoneへの設定追加

Keystoneの設定で行なっていればここでの作業は必要無いです。
最初の引数だけ注意して下さい。
全てコピペして貼り付ければ問題ありません。
SERVICE_PASSWORD=password
SERVICE_HOST=stack01

function get_id () {
    echo `"$@" | awk '/ id / { print $4 }'`
}
ADMIN_ROLE=$(keystone role-list | grep " admin" | awk '{print $2}')
SERVICE_TENANT=$(keystone tenant-list | grep service | awk '{print $2}')

HEAT_USER=$(get_id keystone user-create --name=heat \
                                          --pass="$SERVICE_PASSWORD" \
                                          --tenant_id $SERVICE_TENANT \
                                          --email=heat@example.com)
keystone user-role-add --tenant_id $SERVICE_TENANT \
                       --user_id $HEAT_USER \
                       --role_id $ADMIN_ROLE
HEAT_CFN_SERVICE=$(get_id keystone service-create \
    --name=heat-cfn \
    --type=cloudformation \
    --description="Heat CloudFormation Service")
keystone endpoint-create \
    --region RegionOne \
    --service_id $HEAT_CFN_SERVICE \
    --publicurl "http://$SERVICE_HOST:8000/v1" \
    --adminurl "http://$SERVICE_HOST:8000/v1" \
    --internalurl "http://$SERVICE_HOST:8000/v1"
HEAT_SERVICE=$(get_id keystone service-create \
    --name=heat \
    --type=orchestration \
    --description="Heat Service")
keystone endpoint-create \
    --region RegionOne \
    --service_id $HEAT_SERVICE \
    --publicurl "http://$SERVICE_HOST:8004/v1/\$(tenant_id)s" \
    --adminurl "http://$SERVICE_HOST:8004/v1/\$(tenant_id)s" \
    --internalurl "http://$SERVICE_HOST:8004/v1/\$(tenant_id)s"

5.2.9.4. OZのインストール

OZはAiolusプロジェクトの中のOSイメージを作成するコンポーネントです。

$ sudo git clone https://github.com/clalancette/oz.git /opt/oz
$ cd /opt/oz
$ apt-get install gcc build-essential devscripts debhelper python-all gdebi -y
$ make deb
$ cd ..
$ sudo gdebi oz_0.9.0-1_all.deb --non-interactive

5.2.9.5. heat-jeosのインストール

Heatが利用する仮想マシンビルドツールです。
$ sudo git clone git://github.com/heat-api/heat-jeos.git /opt/heat-jeos
$ cd /opt/heat-jeos
$ sudo python setup.py install

5.2.9.6. 仮想マシン用ISOイメージの用意

heat-jeosが利用する各OSのインストール用ISOイメージをダウンロードします。
勝手にダウンロードしてくれればいいのにとちょっと思ってしまいますが。
/var/lib/libvert/images に配置しますす。
おまけで用意されているワードプレスが入ったOS起動イメージを作成するにはUbuntu10が必要みたいです。
テンプレートにはやたらとワードプレスがあります。OpenShiftなどもあるみたいです。
$ cd /var/lib/libvirt/images
$ sudo wget http://ftp.riken.go.jp/Linux/ubuntu-iso/CDs/10.04/ubuntu-10.04.4-server-amd64.iso
$ sudo wget http://download.fedoraproject.org/pub/fedora/linux/releases/17/Fedora/x86_64/iso/Fedora-17-x86_64-DVD.iso
$ sudo wget http://ftp.riken.go.jp/Linux/centos/6.3/isos/x86_64/CentOS-6.3-x86_64-bin-DVD1.iso

OZの要件による設定変更

$ sudo chmod 644 /boot/vmlinuz*
$ sudo update-guestfs-appliance

5.2.9.7. Heat用JEOSイメージ作成

heat-jeos list で利用できるイメージを確認できます。

$ heat-jeos list
+-------------------------------+----------+---------+--------------+
| Name                          |    OS    | Version | Architecture |
+-------------------------------+----------+---------+--------------+
| CentOS-6.3-x86_64-cfntools    | CentOS-6 |    3    |    x86_64    |
| F16-i386-cfntools             |  Fedora  |    16   |     i386     |
| F16-i386-gold                 |  Fedora  |    16   |     i386     |
| F16-x86_64-cfntools-openshift |  Fedora  |    16   |    x86_64    |
| F16-x86_64-cfntools           |  Fedora  |    16   |    x86_64    |
| F16-x86_64-gold               |  Fedora  |    16   |    x86_64    |
| F17-i386-cfntools             |  Fedora  |    17   |     i386     |
| F17-i386-gold                 |  Fedora  |    17   |     i386     |
| F17-x86_64-cfntools           |  Fedora  |    17   |    x86_64    |
| F17-x86_64-gold               |  Fedora  |    17   |    x86_64    |
| U10-x86_64-cfntools           |  Ubuntu  |  10.04  |    x86_64    |
+-------------------------------+----------+---------+--------------+
とりあえずWikiにもあるUbuntu10のイメージを作成してGlanceに登録出来ることを確認します。
CentOS6.3、Fedora16もダウンロードして配置しておけば利用出来ます 。
結局はGlanceを利用するのでOpenStackの環境変数を読みこませる必要があります。
また、リストを見るのと違い登録に関してはroot権限が必要です。
最初にエラーみたいな文言が表示されますが問題ありません。
結構時間が掛かる(30分くらい?)ので他のことやってましょう。
$ sudo -E heat-jeos -y -v -d create U10-x86_64-cfntools --register-with-glance
$ sudo -E heat-jeos -y -v -d create CentOS-6.3-x86_64-cfntools --register-with-glance
$ glance image-list
+--------------------------------------+----------------------------+-------------+------------------+-----------+--------+
| ID                                   | Name                       | Disk Format | Container Format | Size      | Status |
+--------------------------------------+----------------------------+-------------+------------------+-----------+--------+
| 1343897f-bcf4-4c98-86de-ff807226c98c | CentOS-6.3-x86_64-cfntools | qcow2       | bare             | 539099136 | active |
| 749391f2-dfe9-4d96-9446-becb29701fb2 | U10-x86_64-cfntools        | qcow2       | bare             | 392232960 | active |
+--------------------------------------+----------------------------+-------------+------------------+-----------+--------+

5.2.9.7.1. 他の方法

<Githubに予め作成されたイメージ https://github.com/heat-api/prebuilt-jeos-images/downloads>_ がありますのでそれをダウンロードしてGlanceに登録してもHeatで利用できます。
ISOのダウンロードや元のイメージの領域も作成時間も必要無いので一度登録方法を実施してやり方がわかっていればそちらのほうが楽ちんかもしれません。
CentOSは結局無いんですけど。

5.2.9.7.1.1. U10-x86_64-cfntools

$ cd /var/lib/libvirt/images
$ sudo wget https://github.com/downloads/heat-api/prebuilt-jeos-images/U10-x86_64-cfntools.qcow2
$ glance add name="U10-x86_64-cfntools" is_public=true container_format=bare disk_format=qcow2 < U10-x86_64-cfntools.qcow2

5.2.9.7.1.2. F16-x86_64-cfntools-openshift

$ cd /var/lib/libvirt/images
$ sudo wget https://github.com/downloads/heat-api/prebuilt-jeos-images/F16-x86_64-cfntools-openshift.qcow2
$ glance add name="F16-x86_64-cfntools-openshift" is_public=true container_format=bare disk_format=qcow2 < F16-x86_64-cfntools-openshift.qcow2

5.2.9.8. Heatのプロセスを起動

起動スクリプトなどは用意されていないのでとりあえず手動で必要なプロセスを起動します。
他にもいくつかプロセスがありますがまだわかっていませんので取り敢えず以下の3つだけ起動します。
$ heat-engine &
$ heat-api-cfn &
$ heat-metadata &

5.2.9.9. Heatを利用する為のSSH鍵をNovaへ登録

Heatのテンプレートで作成したインスタンスへのログインは ~/.ssh/id_rsa を利用するとログインできます。
Novaで作成しているものも Keyname で利用できますのでその場合は作成する必要はありません。
$ ssh-keygen -t rsa
$ nova keypair-add --pub_key ~/.ssh/id_rsa.pub ${USER}_key
$ nova keypair-list

5.2.9.10. Heatの利用

オートスケール、高可用性、運用監視など色々あるみたいなのでわかった時点で付け足していきます。

5.2.9.10.1. WordPressが利用できるインスタンスを起動

5.2.9.10.1.1. テンプレートを利用したインスタンスの確認

Heatで起動したインスタンスを確認します。
まだ作成していないので何もありません。
$ heat list
<ListStacksResponse>
  <ListStacksResult>
    <StackSummaries/>
  </ListStacksResult>
</ListStacksResponse>

5.2.9.10.1.2. WordPressを利用するテンプレートからインスタンスを起動

WordPressが利用できるテンプレートを作成します。
テンプレートの設定上でフレーバーは m1.large 以上で64bit、それ以下の場合は32bitのイメージが必要な設定になっています。
しかし私の環境ではラージだと8GB以上がWordpress用のインスタンスに利用できるようなメモリは積んでいませんのでsedで設定を書き換えてしまいました。
メモリ積みまくりな人は設定の変更は必要ありません。
テンプレートの修正
$ sed -i '74s/32/64/' /opt/heat/templates/WordPress_Single_Instance_deb.template
インスタンスの起動
heatで管理する名前は wordpress としていますが何でも問題ありません。
$ DB_PASS=word01password
$ heat -y -v -d create wordpress --template-file=/opt/heat/templates/WordPress_Single_Instance_deb.template --parameters="InstanceType=m1.small;DBUsername=${USER};DBPassword=${DB_PASS};KeyName=${USER}_key;LinuxDistribution=U10"
$ heat list

確認した時のステータスがCREATE_COMPRETEでもまだmysqlやらapacheの設定中の可能性があります。

5.2.9.10.1.3. セキュリティグループとフローティングIPの割り当て

内部IPだけだと外部から接続が出来ないのでフローティングIPを割り当てます。
また、Wordpress用はApacheを利用していてポート80を利用するのでセキュリティグループの設定にポート80を開放する設定が必要です。

フローティングIPの確保

$ nova floating-ip-create
+----------------+-------------+----------+------+
| Ip             | Instance Id | Fixed Ip | Pool |
+----------------+-------------+----------+------+
| 192.168.10.113 | None        | None     | nova |
+----------------+-------------+----------+------+

Heatで作成されたインスタンスの確認

$ nova list
+--------------------------------------+---------------------+--------+------------------------+
| ID                                   | Name                | Status | Networks               |
+--------------------------------------+---------------------+--------+------------------------+
| 7965f4cd-a1f0-44c5-827d-f5a1c9276e74 | wordpress.WebServer | ACTIVE | nova_network1=10.0.0.2 |
+--------------------------------------+---------------------+--------+------------------------+

インスタンスへのフローティングIPの割り当て

$ nova add-floating-ip 7965f4cd-a1f0-44c5-827d-f5a1c9276e74 192.168.10.113
インスタンスへのフローティングIPの割り当て
192.168.10.113のIPアドレスが割り当てられてるのが確認出来ます。
$ nova list
+--------------------------------------+---------------------+--------+----------------------------------------+
| ID                                   | Name                | Status | Networks                               |
+--------------------------------------+---------------------+--------+----------------------------------------+
| 7965f4cd-a1f0-44c5-827d-f5a1c9276e74 | wordpress.WebServer | ACTIVE | nova_network1=10.0.0.2, 192.168.10.113 |
+--------------------------------------+---------------------+--------+----------------------------------------+
セキュリティグループの設定
セキュリティグループはデフォルトの default を利用しているものとします。
現在の設定を確認します。
$ nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

ポート80番を開放するコマンドを実施します。

$ nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp         | 80        | 80      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

ポート80番の設定が追加されています。

$ nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range  | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp        | -1        | -1      | 0.0.0.0/0 |              |
| tcp         | 22        | 22      | 0.0.0.0/0 |              |
| tcp         | 80        | 80      | 0.0.0.0/0 |              |
+-------------+-----------+---------+-----------+--------------+

5.2.9.10.1.4. WordPressを利用する

後は、Heatで作成されたWordpressを利用できるテンプレートにフローティングIPににブラウザで接続すれば利用できます。
但し、ワードプレスの設定は内部IPで設定するようなコンフィグが作成されていますのでフローティングIPで設定できるように変更しましょう。
インスタンスへの接続自体は以下のようにすればSSHで接続できます。
$ ssh -i /home/stack/.ssh/id_rsa root@10.0.0.2
Wordpressの設定の変更
$ ssh -i /home/stack/.ssh/id_rsa root@10.0.0.2 mv /etc/wordpress/config-10.0.0.2.php /etc/wordpress/config-192.168.10.113.php
後はブラウザで http://192.168.10.113/wordpress に接続すればWordpressのインストーラが起動しているはずです。
インスタンスを削除する場合は以下のようにすれば nova list の結果からも削除されています。
$ heat delete wordpress

5.2.9.10.2. OpenShiftが利用できるインスタンスを起動

5.2.9.10.2.1. テンプレートを利用したインスタンスの確認

Heatで起動したインスタンスを確認します。
まだ作成していないので何もありません。
$ heat list
<ListStacksResponse>
  <ListStacksResult>
    <StackSummaries/>
  </ListStacksResult>
</ListStacksResponse>

5.2.9.10.2.2. OpenShiftを利用するテンプレートからインスタンスを起動

OpenShiftが利用できるテンプレートを作成します。
インスタンスの起動
heatで管理する名前は openshift としていますが何でも問題ありません。
2台インスタンスが自動的に作成されますが非常に時間がかかります。
$ heat -y -v -d create openshift --template-file=/opt/heat/templates/OpenShift_Prebuilt_JEOS.template --parameters="InstanceType=m1.small;KeyName=${USER}_key"
$ heat list
スペックがショボイのかえらーになりました。
メモリも2Gしか無いところで2G以上必要なインスタンスを2つ稼働させようとしたのが既にダメな原因かと。
もっと潤沢なリソースがあるとこで試さないと。
$ heat list
<ListStacksResponse>
  <ListStacksResult>
    <StackSummaries>
      <member>
        <StackId>arn:openstack:heat::admin:stacks/openshift/10</StackId>
        <LastUpdatedTime>2012-10-21T08:22:42Z</LastUpdatedTime>
        <TemplateDescription>OpenShift Broker/Node Template.</TemplateDescription>
        <StackStatusReason>Resource WaitCondition "WaitCondition" failed with: Timed out waiting for instance</StackStatusReason>
        <CreationTime>2012-10-21T07:45:47Z</CreationTime>
        <StackName>openshift</StackName>
        <StackStatus>CREATE_FAILED</StackStatus>
      </member>
    </StackSummaries>
  </ListStacksResult>
</ListStacksResponse>

$ nova list
+--------------------------------------+---------------------------------+--------+------------------------+
| ID                                   | Name                            | Status | Networks               |
+--------------------------------------+---------------------------------+--------+------------------------+
| ffa0905c-4c83-4e2f-8294-94e52e2c3a21 | openshift.OpenShiftBrokerServer | ACTIVE | nova_network1=10.0.0.2 |
| c9526f9c-1837-4286-b5a3-aab49afa7ff7 | openshift.OpenShiftNodeServer   | ACTIVE | nova_network1=10.0.0.4 |
+--------------------------------------+---------------------------------+--------+------------------------+

5.2.9.11. CloudWatchを利用する

まだです。

目次

前のトピックへ

5.2.8. OpenStackの利用

次のトピックへ

5.3.1. Openstackインストール前のOS設定

このページ