Blue Flower

    こんにちは、@opt_Hohenheimです。

    きょうは、CloudStack4のインスタンスにheat環境を用意して

    heatテンプレートを動かしてみようと思います。

 

 1.CloudStack4のリソース状況を確認する

 CloudStack4のリソース状況 

 

    ダッシュボードでリソースの空き状況を確認します。

    今回使うのは、メモリ2Gbyte CPU 2GHz ディスク20Gbyteくらい使いますので

    そのくらいの空きがあればいいです。

 

 2.CloudStack4のisoテンプレートにcentos7を登録する

     次に今回heat環境をインストールするインスタンス用のisoテンプレートを用意します

    今回は、packstackを使ってCloudStack4のインスタンスにOpenStack heat環境を用意

    するのですが、最近Junoリリースと共にpackstackがRHEL7ベースの動作環境になった

    ので、ここでは、CentOS7を用意して対応します。

    isoイメージは、ここの理研のリポジトリを使います。

 

    次のように準備完了になればOkです。

 

 

 3.登録したisoテンプレートのcentos7をもってインスタンスをデプロイする 

 

    2.で登録したisoテンプレートをもって、メモリ2GByte CPU2GHz ディスク20Gbyteにて

    仮想マシンのインスタンスをデプロイします。

    デプロイ後、/etc/sysconfig/network-scripts/ifcfg-ens3のファイル内

    onboot=noをonboot=yesに変えて以下のコマンドを実行します。

 

    ついでに以下ののpingが通ることを確認しておきます。

# service network restart
# ping www.yahoo.co.jp

 

 4.デプロイしたcentos7のインスタンスにOpenStack heat環境をインストール

    それでは、CloudStack4で払い出したcentos7のインスタンスにOpenStack heatをインストールしましょう。

    CloudStack4で払い出したcentos7のインスタンスにloginして、以下の手順でOkです。

# yum -y update
# yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum install -y https://rdo.fedorapeople.org/rdo-release.rpm
# yum install -y openstack-packstack
# packstack --allinone --use-epel=y --os-heat-install=y --os-heat-cfn-install=y --os-ceilometer-install=n

    インストールが終わるとhomeディレクトリ直下にkeystonerc_adminとkeystonerc_demoができているのが確認できると思います。

    adminアカウントとdemoアカウント用の環境変数です。

    次のようにします。(アカウントadminを使う場合) 

# . ~/keystonerc_admin

    では、さっそくheatコマンドが使えるか試してみましょう。

# heat stack-list
+----+------------+--------------+---------------+ | id | stack_name | stack_status | creation_time | +----+------------+--------------+---------------+ +----+------------+--------------+---------------+

    heatテンプレートは、stackという単位で管理されて、1つのテンプレートでデプロイされたリソースは、stackを消すと

    stackに紐づくすべてのリソースがリソースプールに戻ります。

    いまは、何もテンプレートを実行していないためstackリストは、空です。しかしながらheatの空リストがかえっているので

    heat環境は、できていると考えられます。

 

 5.glanceマシンイメージを用意する

    heatテンプレートは、インスタンスをデプロイする際glanceのマシンイメージを使います。

    そこでCloudStack4とそのインスタンスのOpenStackがたまたまkvmのハイパーバイザを使用している環境だったので

    CloudStack4のデフォルトのcentos5のマシンイメージのスナップショットを取得し、それをダウンロード(QCOW2)して

    OpenStackのインスタンスに転送します。

    インスタンスメニューで「表示・ボリューム」を選択します。

    下図、「ボリュームのダウンロード」を選択

    下図、ダウンロードリンクをクリックして、ダウンロードする

 

    OpenStackのHorizon(GUI)でglanceのマシンイメージも登録できますが

    uploadに時間がかかるものは、Horizonがセッションタイムアウトして途中で切れてしまいます。

    なのでマシンイメージは、OpenStackのインスタンスにsftpなどで転送し、glanceコマンドで登録します。

    上記ダウンロードしたマシンイメージをOpenStackのインスタンスに転送したら、下記glanceコマンドでマシンイメージを登録します。

[root@localhost ~(keystone_admin)]# glance image-create --name centos5-image --disk-format qcow2 --container-format bare --is-public True --file ./centos5.qcow2
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 00926eb83a373e38455232d05247b3aa     |
| container_format | bare                                 |
| created_at       | 2014-12-03T19:34:22                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 12f71527-7160-4956-a6ce-0610745094fc |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | centos5-image                        |
| owner            | 36e79999f5ca494c9b2015723347ed53     |
| protected        | False                                |
| size             | 1711472640                           |
| status           | active                               |
| updated_at       | 2014-12-03T19:35:19                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+
[root@localhost ~(keystone_admin)]#

    ここで、ついでにセキュリティグループを登録しておきましょう。

    今回は、gitlabをデプロイするので80ポートとlogin等用に22ポートを開けておきます。

[root@localhost blog(keystone_admin)]# neutron security-group-create gitlabservers --description "security group for gitlabservers"
Created a new security_group:
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                | Value                                                                                                                                                                                                                                                                                                                         |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| description          | security group for gitlabservers                                                                                                                                                                                                                                                                                              |
| id                   | 0961ee55-3897-40ec-a1e4-c28cffd740ca                                                                                                                                                                                                                                                                                          |
| name                 | gitlabservers                                                                                                                                                                                                                                                                                                                 |
| security_group_rules | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "36e79999f5ca494c9b2015723347ed53", "port_range_max": null, "security_group_id": "0961ee55-3897-40ec-a1e4-c28cffd740ca", "port_range_min": null, "ethertype": "IPv4", "id": "68a6b53a-1f00-4797-bfdc-144e2540e66b"} |
|                      | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "36e79999f5ca494c9b2015723347ed53", "port_range_max": null, "security_group_id": "0961ee55-3897-40ec-a1e4-c28cffd740ca", "port_range_min": null, "ethertype": "IPv6", "id": "78810ddc-bf18-42c1-bf55-68365bc9b3b2"} |
| tenant_id            | 36e79999f5ca494c9b2015723347ed53                                                                                                                                                                                                                                                                                              |
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[root@localhost blog(keystone_admin)]# neutron security-group-rule-create --direction ingress --protocol tcp --port_range_min 80 --port_range_max 80 0961ee55-3897-40ec-a1e4-c28cffd740ca
Created a new security_group_rule:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| id                | 534f1373-5af2-4d5b-86b8-1140738c7f86 |
| port_range_max    | 80                                   |
| port_range_min    | 80                                   |
| protocol          | tcp                                  |
| remote_group_id   |                                      |
| remote_ip_prefix  |                                      |
| security_group_id | 0961ee55-3897-40ec-a1e4-c28cffd740ca |
| tenant_id         | 36e79999f5ca494c9b2015723347ed53     |
+-------------------+--------------------------------------+
[root@localhost blog(keystone_admin)]# neutron security-group-rule-create --direction ingress --protocol tcp --port_range_min 22 --port_range_max 22 0961ee55-3897-40ec-a1e4-c28cffd740ca
Created a new security_group_rule:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| direction         | ingress                              |
| ethertype         | IPv4                                 |
| id                | 5648579e-8f9b-40d6-a501-7dfb95fca7ab |
| port_range_max    | 22                                   |
| port_range_min    | 22                                   |
| protocol          | tcp                                  |
| remote_group_id   |                                      |
| remote_ip_prefix  |                                      |
| security_group_id | 0961ee55-3897-40ec-a1e4-c28cffd740ca |
| tenant_id         | 36e79999f5ca494c9b2015723347ed53     |
+-------------------+--------------------------------------+
[root@localhost blog(keystone_admin)]#

    ついでなので、heatでインスタンスをデプロイする際のnovaのkeypairを登録します。 

[root@localhost blog(keystone_admin)]# nova keypair-add git
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwuQkPyg8YH/ueCCOrF1VIKP6zma2z+pD69q26Zu2xxW6Qpm3
jXrXhYJjsiOVzkOGBu5MMB+mtFokej9T8yGJxR1fmex1KuZGwiYUifbysQPpyMEo
JTMLNHbGgP1lXRFGQg2bvyLHpZfjuo0Kxp47zWOdGpTB0tUoTLASewy77NfpH5P1
zCKWn2+/g+OLfJAjUnLsUKvAUV5AcWuN7tQNX99uczYQ8OGpj+Hke5KXRIEKEiCl
56y9mWWtSfd+eNpY8757nC+YUnYgwoV2xMWoOIeuSZz/TK1+yIqh1e2ujbw1jYb6
qYtVfFtI6w5WG2/XDFGA5CjD4PJIXH5we8hJLQIDAQABAoIBAQCSaz6EKKF7yoGJ
xMQL4S70j939NZQBDrqqtq4XQkKGvd8q7DvH0lObXYOzMSL6TSajjGK3AQCInPSs
12klz7um2NObW9gHO+xLLrrdkCdzMEJy7hNQJ1Iyv02RWU7PJgxH0duCNQoTcdLI
s/A1mmnJfB5q+vnHgRd+zgWEZuPFIn1JI5DydQqf8nT+InIA6Goma6PcpXNJiN+h
bEQbtIOuHgxe4SA+XhDoXz36nxpi9idnKot6I5TwGRIiyHAJNAFwQdsSw6jHgzIi
zuVzI0OHcw5kzb9l0w1nK5ni58dTc4pi23eDjSE4VLGUPCAVjbOLlpPobbUDddeL
7AD65ZYNAoGBAOuuceSo5eWZ9IG9u0HGQbN8ItN5M59Mwj1LZ7xdiDaDYC16yx02
6wsQI+iX087npGRHjYg3lQz3V52muq5bAIQ+GKCPPUq7sGWaN1e1lVLjgK4VjtSf
GXlcppnHnoYxYftepe6RPNbiJb1JfFcUwuTx1QkPNJqHDicP4yIZUuqfAoGBANOx
ccsPkBVTwc/x/aG+3MIWHsuf8EvoTv5bvYFSMZygGlpSn7A3MW7C9Vw9RbSe2WFr
FXXK18TUNS4B/MS2C7sYovk4GOPIDUfzTYr4tADRfckonGDI3Kz0F7ptVYk6fro9
qAjXDoXlCIkC01WsvmDrtQN4dZ9yt/9+jcsqBESzAoGBAJKl0jKQsbRDLrQIJduQ
jFMtW9IwaWGm9noDUIIRxO7+ojrKXFZKVMhme6F/z4i/9Dd9mmB3DWSrBzaOhzx0
XYbryJEnb+Dvlpwx8FvAHjEcZHZt7Zj5gnVUpEmtv0MKuUgbJa6jarLettLoRdk9
juO8Ym2nq3i3rqO5rAAMt95LAoGAUCITWTKC8A/MhdKsl9WP60hEUAAzDgjaHh7M
FW/vp8JTN22fVS0PYUYbatcm08BtuRq3/ObT1oYdu1S1QiFHP4OL7Zr2kQLhRCMt
bzXFramfW84ro9dk8XNUqBVLE6842XcNbIs7zCNun66aIQxK5JVU6ANpQvpB/E0D
j6xQAVECgYBsuxQnq2kev2TTrR4ryYtrZ0GoUiwbe+Dzocwgj8KIag2QTf9yPCxu
oT4lTh2m1lTqzzKkzeJyKhItRJXd6+LjUc/7CMwD5qVgpWsOXhHNf5xoKIA1ZARV
gplSTfBe+NRA37mwCuUpYrnMO0BB75FDlozljLTmlFXqk839LdzZEQ==
-----END RSA PRIVATE KEY-----

[root@localhost blog(keystone_admin)]# nova keypair-list
+------+-------------------------------------------------+
| Name | Fingerprint                                     |
+------+-------------------------------------------------+
| git  | 20:85:ac:9d:c1:ec:01:62:79:ba:fe:ce:59:54:e1:8e |
+------+-------------------------------------------------+
[root@localhost blog(keystone_admin)]#

    ついでなので、flavorを追加しておきましょう。

[root@localhost blog(keystone_admin)]# nova flavor-create m1.micro 6 1024 10 1
+----+----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name     | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+----------+-----------+------+-----------+------+-------+-------------+-----------+
| 6  | m1.micro | 1024      | 10   | 0         |      | 1     | 1.0         | True      |
+----+----------+-----------+------+-----------+------+-------+-------------+-----------+
[root@localhost blog(keystone_admin)]# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |
| 6  | m1.micro  | 1024      | 10   | 0         |      | 1     | 1.0         | True      |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
[root@localhost blog(keystone_admin)]#

 

 6.heatテンプレートを用意する

    それでは、heatテンプレートを用意しましょう。

    ここでは、GitHubクローンのGitLabサーバをデプロイしてみます。

    heatテンプレートフォーマットは、大きく2つのフォーマットがあります。

      ・HOT(ネイティブフォーマット?)

      ・CFN(CloudFormation互換フォーマット)

    さらに時系列のVerで言うと

      ・2010-09-09(CFN)

      ・2012-12-12(CFN・HOTの間?)

      ・2013-05-23(HOT)

    の3種類のVerが存在します。

    CFNのフォーメーション互換フォーマットでテンプレートを作成していて気が付いたのですが

    AWSのドキュメントに記載されているステートメントというかディレクティブというかが

    すべて使えるわけではないということなのです。

    なので、かゆいところに手が届かないことが、たびたびありました。

    HOTでAWSと同等のことをさせることが結構な範囲で可能だったので、今回は、HOTを使います。

    用意したテンプレートは、下記になります。 

heat_template_version: 2013-05-23

parameters:
  flavor:
    type: string
    description: flavor used by the servers
  image:
    type: string
    description: image name
  secgroup:
    type: string
    description: security group name

resources:
  git-lab:
    type: OS::Nova::Server
    properties:
      flavor: { get_param: flavor }
      key_name: "git"
      security_groups: [{ get_param: secgroup }]
      name: "gitlab_svr"
      image: { get_param: image }
      user_data: |
        #!/bin/bash -v
        /usr/bin/sudo -s
        curl -O https://downloads-packages.s3.amazonaws.com/centos-6.6/gitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64.rpm
        yum -y install openssh-server
        yum -y install postfix
        yum -y install cronie
        service postfix start
        chkconfig postfix on
        rpm -i gitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64.rpm
        gitlab-ctl reconfigure
        lokkit -s http -s ssh
        gitlab-ctl start
        exit

    今回用意したテンプレートは、cloudstack4からマイグレーションしたCentOS5のマシンイメージを使ってインスタンスをデプロイし、

    デプロイ時にGitlabのインストールスクリプトを実行して、Gitlabサーバをheat実行時に構築するものです。

    では、実行してみましょう。

[root@localhost blog(keystone_admin)]# heat stack-create gitlab -f gitlab.yaml -P "flavor=m1.micro;image=centos5-image;secgroup=gitlabservers"
+--------------------------------------+------------+--------------------+----------------------+
| id                                   | stack_name | stack_status       | creation_time        |
+--------------------------------------+------------+--------------------+----------------------+
| 93e0a0b2-235c-44ed-b8ea-4169186fcd4e | gitlab     | CREATE_IN_PROGRESS | 2014-12-09T08:55:47Z |
+--------------------------------------+------------+--------------------+----------------------+
[root@localhost blog(keystone_admin)]# 

    heatでstack-createすると「CREATE_IN_PROGRESS」という状態に入ります。

    インスタンスをデプロイしますので、ちょっとだけ時間がかかります。

    うまくいくと、状態が、「CREATE_COMPLETE」に変わり、heatの実行が、終わります。

[root@localhost blog(keystone_admin)]# heat stack-list
+--------------------------------------+------------+-----------------+----------------------+
| id                                   | stack_name | stack_status    | creation_time        |
+--------------------------------------+------------+-----------------+----------------------+
| 93e0a0b2-235c-44ed-b8ea-4169186fcd4e | gitlab     | CREATE_COMPLETE | 2014-12-09T08:55:47Z |
+--------------------------------------+------------+-----------------+----------------------+
[root@localhost blog(keystone_admin)]#

    インスタンスのデプロイは、できているでしょうか?

[root@localhost blog(keystone_admin)]# nova list
+--------------------------------------+------------+--------+------------+-------------+---------------------+
| ID                                   | Name       | Status | Task State | Power State | Networks            |
+--------------------------------------+------------+--------+------------+-------------+---------------------+
| 0f47fffd-cb54-4b75-a44e-78bb21066031 | gitlab_svr | ACTIVE | -          | Running     | public=172.24.4.234 |
+--------------------------------------+------------+--------+------------+-------------+---------------------+
[root@localhost blog(keystone_admin)]#

    大丈夫そうですね。後で、コンソール等で確認してみてください。

 

 7.heatをGUIでみてみる(おまけ)

    OpenStack Hrizon(GUI)でオーケストレーションメニューがあるので見てみます。

    先程stack-createしたスタックが見えてます。スタック名をクリックしてみます。

    デプロイされたtype: OS::Nova::Serverのサーバが見えてますね。

    もっと複雑なheatテンプレートを実行するとネットワークが見えるのですが、ここでは簡単に済ませます。

    

    以上で12/11分は、終わりになります。

    最後までお読みいただきありがとうございました。

 


CloudManagerAdvance 2.2 以上
カテゴリ: ツール
Google Playで詳細を見る