Heat を使ったオーケストレーション

これまでの操作は、単に仮想マシンを作成したり、ストレージを接続したりと、従来のオペレーションと大きな差はありません。 しかし、Heat や Ansible等のツールと組み合わせることで、これまではできなかった新しいシステム構築・管理を行う事が可能になります。

2つのテンプレートをダウンロード。このテンプレートは、N台のWEBサーバーを起動して、自動的にロードバランサー配下で動作するように設定しています。

In [1]:
wget https://raw.githubusercontent.com/irixjp/josug-34th-materials/master/cluster.yaml
--2017-06-09 13:52:41--  https://raw.githubusercontent.com/irixjp/josug-34th-materials/master/cluster.yaml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.8.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.8.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3187 (3.1K) [text/plain]
Saving to: ‘cluster.yaml.1’

100%[======================================>] 3,187       --.-K/s   in 0s      

2017-06-09 13:52:42 (58.1 MB/s) - ‘cluster.yaml.1’ saved [3187/3187]

In [2]:
wget https://raw.githubusercontent.com/irixjp/josug-34th-materials/master/lb_server.yaml
--2017-06-09 13:52:43--  https://raw.githubusercontent.com/irixjp/josug-34th-materials/master/lb_server.yaml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.8.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.8.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1904 (1.9K) [text/plain]
Saving to: ‘lb_server.yaml.1’

100%[======================================>] 1,904       --.-K/s   in 0s      

2017-06-09 13:52:44 (71.2 MB/s) - ‘lb_server.yaml.1’ saved [1904/1904]

スタックの作成

2台のWEBサーバーを起動して、LB配下に収めます。

In [3]:
heat stack-create -f cluster.yaml -P 'cluster_size=2' lbv2
WARNING (shell) "heat stack-create" is deprecated, please use "openstack stack create" instead
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+--------------------------------------+------------+--------------------+----------------------+--------------+
| id                                   | stack_name | stack_status       | creation_time        | updated_time |
+--------------------------------------+------------+--------------------+----------------------+--------------+
| 869d331d-cc74-4cba-87cf-16f6c7a82dad | lbv2       | CREATE_IN_PROGRESS | 2017-06-09T04:52:50Z | None         |
+--------------------------------------+------------+--------------------+----------------------+--------------+
In [5]:
heat resource-list -n 2 lbv2
WARNING (shell) "heat resource-list" is deprecated, please use "openstack stack resource list" instead
+---------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+-------------------------------+
| resource_name | physical_resource_id                 | resource_type                                              | resource_status    | updated_time         | stack_name                    |
+---------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+-------------------------------+
| floating_ip   | 7814b6fd-1ce9-4e56-bb9c-b5a381ce8072 | OS::Neutron::FloatingIP                                    | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                          |
| listener      | 114ac517-de54-4dea-8b61-2fff2127c82f | OS::Neutron::LBaaS::Listener                               | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                          |
| loadbalancer  | d6da234e-a3bf-43bd-a64a-016acbff4a3e | OS::Neutron::LBaaS::LoadBalancer                           | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                          |
| monitor       | 94ac5c01-0850-4ea4-a42d-ddb199bdbac9 | OS::Neutron::LBaaS::HealthMonitor                          | CREATE_IN_PROGRESS | 2017-06-09T04:52:51Z | lbv2                          |
| pool          | 61a813e2-6de9-478f-92f0-d960009b6fb5 | OS::Neutron::LBaaS::Pool                                   | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                          |
| sec_group     | 42892932-cac5-41bc-8a3e-b0259bb523db | OS::Neutron::SecurityGroup                                 | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                          |
| web_cluster   | 02746a9d-36dd-4194-aae8-2ac6a90fe544 | OS::Heat::ResourceGroup                                    | CREATE_IN_PROGRESS | 2017-06-09T04:52:51Z | lbv2                          |
| 0             |                                      | file:///home/openstack/josug-34th-materials/lb_server.yaml | CREATE_IN_PROGRESS | 2017-06-09T04:53:06Z | lbv2-web_cluster-tkp5b4dvjpmh |
| 1             |                                      | file:///home/openstack/josug-34th-materials/lb_server.yaml | CREATE_IN_PROGRESS | 2017-06-09T04:53:06Z | lbv2-web_cluster-tkp5b4dvjpmh |
+---------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+-------------------------------+
In [6]:
nova list
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------+
| ID                                   | Name                                                  | Status | Task State | Power State | Networks |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------+
| da158627-bfce-4e87-9f71-f704b406d779 | lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4 | BUILD  | spawning   | NOSTATE     |          |
| 9351a738-e7f8-43e0-98e8-3592b9bc3a89 | lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3 | BUILD  | spawning   | NOSTATE     |          |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------+

COMPETEになるのを待ちます。

In [9]:
heat stack-list
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+--------------------------------------+------------+-----------------+----------------------+--------------+
| id                                   | stack_name | stack_status    | creation_time        | updated_time |
+--------------------------------------+------------+-----------------+----------------------+--------------+
| 869d331d-cc74-4cba-87cf-16f6c7a82dad | lbv2       | CREATE_COMPLETE | 2017-06-09T04:52:50Z | None         |
+--------------------------------------+------------+-----------------+----------------------+--------------+
In [10]:
heat output-show lbv2 --all
WARNING (shell) "heat output-show" is deprecated, please use "openstack stack output show" instead
"http://192.168.99.207:80"
In [11]:
URL=http://192.168.99.207:80
echo $URL
http://192.168.99.207:80
In [12]:
#watch -n 1 -d curl -s $URL
curl -s $URL
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
In [13]:
curl -s $URL
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
In [15]:
for i in {0..10}; do echo `curl -s $URL`; sleep 1; done
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3

スタックのアップデート

サーバー台数を5台に変更します。

In [16]:
heat stack-list
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+--------------------------------------+------------+-----------------+----------------------+--------------+
| id                                   | stack_name | stack_status    | creation_time        | updated_time |
+--------------------------------------+------------+-----------------+----------------------+--------------+
| 869d331d-cc74-4cba-87cf-16f6c7a82dad | lbv2       | CREATE_COMPLETE | 2017-06-09T04:52:50Z | None         |
+--------------------------------------+------------+-----------------+----------------------+--------------+
In [17]:
heat stack-update -f cluster.yaml -P 'cluster_size=5' lbv2
WARNING (shell) "heat stack-update" is deprecated, please use "openstack stack update" instead
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+--------------------------------------+------------+--------------------+----------------------+----------------------+
| id                                   | stack_name | stack_status       | creation_time        | updated_time         |
+--------------------------------------+------------+--------------------+----------------------+----------------------+
| 869d331d-cc74-4cba-87cf-16f6c7a82dad | lbv2       | UPDATE_IN_PROGRESS | 2017-06-09T04:52:50Z | 2017-06-09T04:58:25Z |
+--------------------------------------+------------+--------------------+----------------------+----------------------+
In [18]:
nova list
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------------------+
| ID                                   | Name                                                  | Status | Task State | Power State | Networks             |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------------------+
| da158627-bfce-4e87-9f71-f704b406d779 | lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4 | ACTIVE | -          | Running     | work-net=172.16.11.6 |
| 9351a738-e7f8-43e0-98e8-3592b9bc3a89 | lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3 | ACTIVE | -          | Running     | work-net=172.16.11.2 |
| 1f724095-7271-4372-883f-3dc208cd2208 | lb-er-tkp5b4dvjpmh-2-yojpnxusewf4-server-vf76a3q67zzc | BUILD  | spawning   | NOSTATE     |                      |
| 399ff877-0e75-4d79-9a7d-b4982d7970e0 | lb-er-tkp5b4dvjpmh-3-if6qrgbagned-server-kysxv6ztj4pz | BUILD  | spawning   | NOSTATE     |                      |
| 6b261ad9-1d61-455e-9922-5d0ed3b9ed2f | lb-er-tkp5b4dvjpmh-4-zelct2mvwmdu-server-r2ltebdlwtwi | BUILD  | spawning   | NOSTATE     |                      |
+--------------------------------------+-------------------------------------------------------+--------+------------+-------------+----------------------+
In [19]:
heat resource-list -n 2 lbv2
WARNING (shell) "heat resource-list" is deprecated, please use "openstack stack resource list" instead
+-------------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+----------------------------------------------+
| resource_name     | physical_resource_id                 | resource_type                                              | resource_status    | updated_time         | stack_name                                   |
+-------------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+----------------------------------------------+
| floating_ip       | 7814b6fd-1ce9-4e56-bb9c-b5a381ce8072 | OS::Neutron::FloatingIP                                    | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| listener          | 114ac517-de54-4dea-8b61-2fff2127c82f | OS::Neutron::LBaaS::Listener                               | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| loadbalancer      | d6da234e-a3bf-43bd-a64a-016acbff4a3e | OS::Neutron::LBaaS::LoadBalancer                           | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| monitor           | 94ac5c01-0850-4ea4-a42d-ddb199bdbac9 | OS::Neutron::LBaaS::HealthMonitor                          | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| pool              | 61a813e2-6de9-478f-92f0-d960009b6fb5 | OS::Neutron::LBaaS::Pool                                   | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| sec_group         | 42892932-cac5-41bc-8a3e-b0259bb523db | OS::Neutron::SecurityGroup                                 | CREATE_COMPLETE    | 2017-06-09T04:52:51Z | lbv2                                         |
| config_simple_web | 036b05e6-766d-4dd9-8952-b36a4477ae92 | OS::Heat::SoftwareConfig                                   | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-1-a32yubr5zi4t |
| config_simple_web | 7c6f5345-9638-433e-988c-c2f8cbc89940 | OS::Heat::SoftwareConfig                                   | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-0-cbwjvkjueslv |
| member            | 6f5110d7-c18b-433c-b6ff-39639aee1c48 | OS::Neutron::LBaaS::PoolMember                             | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-0-cbwjvkjueslv |
| member            | 8c9a9d59-96ca-44d3-8d36-af69a599f54c | OS::Neutron::LBaaS::PoolMember                             | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-1-a32yubr5zi4t |
| server            | 9351a738-e7f8-43e0-98e8-3592b9bc3a89 | OS::Nova::Server                                           | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-1-a32yubr5zi4t |
| server            | da158627-bfce-4e87-9f71-f704b406d779 | OS::Nova::Server                                           | CREATE_COMPLETE    | 2017-06-09T04:53:11Z | lbv2-web_cluster-tkp5b4dvjpmh-0-cbwjvkjueslv |
| web_cluster       | 02746a9d-36dd-4194-aae8-2ac6a90fe544 | OS::Heat::ResourceGroup                                    | UPDATE_IN_PROGRESS | 2017-06-09T04:58:27Z | lbv2                                         |
| 0                 | 2149bbd2-9d85-4cfe-94ae-a476fe6e3d99 | file:///home/openstack/josug-34th-materials/lb_server.yaml | UPDATE_COMPLETE    | 2017-06-09T04:58:29Z | lbv2-web_cluster-tkp5b4dvjpmh                |
| 1                 | cc334989-b68d-4f4f-940a-43c5f2c42e2e | file:///home/openstack/josug-34th-materials/lb_server.yaml | UPDATE_COMPLETE    | 2017-06-09T04:58:29Z | lbv2-web_cluster-tkp5b4dvjpmh                |
| 2                 | 691c7410-ca75-4f0b-ad63-1dd8d55e1245 | file:///home/openstack/josug-34th-materials/lb_server.yaml | CREATE_IN_PROGRESS | 2017-06-09T04:58:29Z | lbv2-web_cluster-tkp5b4dvjpmh                |
| 3                 | 20c8dcbe-4193-45ac-aabd-7c7e0df84811 | file:///home/openstack/josug-34th-materials/lb_server.yaml | CREATE_IN_PROGRESS | 2017-06-09T04:58:29Z | lbv2-web_cluster-tkp5b4dvjpmh                |
| 4                 | c6ea0089-10dd-4bd3-905f-0de0840b136c | file:///home/openstack/josug-34th-materials/lb_server.yaml | CREATE_IN_PROGRESS | 2017-06-09T04:58:29Z | lbv2-web_cluster-tkp5b4dvjpmh                |
| config_simple_web | 35f9de4a-dcfc-48c7-9e4e-d1517da58728 | OS::Heat::SoftwareConfig                                   | CREATE_COMPLETE    | 2017-06-09T04:58:35Z | lbv2-web_cluster-tkp5b4dvjpmh-2-yojpnxusewf4 |
| member            |                                      | OS::Neutron::LBaaS::PoolMember                             | INIT_COMPLETE      | 2017-06-09T04:58:35Z | lbv2-web_cluster-tkp5b4dvjpmh-2-yojpnxusewf4 |
| server            | 1f724095-7271-4372-883f-3dc208cd2208 | OS::Nova::Server                                           | CREATE_IN_PROGRESS | 2017-06-09T04:58:35Z | lbv2-web_cluster-tkp5b4dvjpmh-2-yojpnxusewf4 |
| config_simple_web | e553de38-2cc1-45fa-9873-4123337d8e2b | OS::Heat::SoftwareConfig                                   | CREATE_COMPLETE    | 2017-06-09T04:58:36Z | lbv2-web_cluster-tkp5b4dvjpmh-4-zelct2mvwmdu |
| member            |                                      | OS::Neutron::LBaaS::PoolMember                             | INIT_COMPLETE      | 2017-06-09T04:58:36Z | lbv2-web_cluster-tkp5b4dvjpmh-4-zelct2mvwmdu |
| server            | 6b261ad9-1d61-455e-9922-5d0ed3b9ed2f | OS::Nova::Server                                           | CREATE_IN_PROGRESS | 2017-06-09T04:58:36Z | lbv2-web_cluster-tkp5b4dvjpmh-4-zelct2mvwmdu |
| config_simple_web | f7561eef-ed77-4834-9530-b5f22a1fa1f4 | OS::Heat::SoftwareConfig                                   | CREATE_COMPLETE    | 2017-06-09T04:58:38Z | lbv2-web_cluster-tkp5b4dvjpmh-3-if6qrgbagned |
| member            |                                      | OS::Neutron::LBaaS::PoolMember                             | INIT_COMPLETE      | 2017-06-09T04:58:38Z | lbv2-web_cluster-tkp5b4dvjpmh-3-if6qrgbagned |
| server            | 399ff877-0e75-4d79-9a7d-b4982d7970e0 | OS::Nova::Server                                           | CREATE_IN_PROGRESS | 2017-06-09T04:58:38Z | lbv2-web_cluster-tkp5b4dvjpmh-3-if6qrgbagned |
+-------------------+--------------------------------------+------------------------------------------------------------+--------------------+----------------------+----------------------------------------------+

COMPLETEになるのを待ちます

In [20]:
heat stack-list
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+--------------------------------------+------------+-----------------+----------------------+----------------------+
| id                                   | stack_name | stack_status    | creation_time        | updated_time         |
+--------------------------------------+------------+-----------------+----------------------+----------------------+
| 869d331d-cc74-4cba-87cf-16f6c7a82dad | lbv2       | UPDATE_COMPLETE | 2017-06-09T04:52:50Z | 2017-06-09T04:58:25Z |
+--------------------------------------+------------+-----------------+----------------------+----------------------+
In [21]:
#watch -n 1 -d curl -s $URL
curl -s $URL
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
In [22]:
for i in {0..10}; do echo `curl -s $URL`; sleep 1; done
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-3-if6qrgbagned-server-kysxv6ztj4pz
lb-er-tkp5b4dvjpmh-2-yojpnxusewf4-server-vf76a3q67zzc
lb-er-tkp5b4dvjpmh-4-zelct2mvwmdu-server-r2ltebdlwtwi
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3
lb-er-tkp5b4dvjpmh-0-cbwjvkjueslv-server-7taw4pzl72m4
lb-er-tkp5b4dvjpmh-3-if6qrgbagned-server-kysxv6ztj4pz
lb-er-tkp5b4dvjpmh-2-yojpnxusewf4-server-vf76a3q67zzc
lb-er-tkp5b4dvjpmh-4-zelct2mvwmdu-server-r2ltebdlwtwi
lb-er-tkp5b4dvjpmh-1-a32yubr5zi4t-server-omynekqbbqi3

スタックの削除

In [23]:
heat stack-delete -y lbv2
WARNING (shell) "heat stack-delete" is deprecated, please use "openstack stack delete" instead
Request to delete stack lbv2 has been accepted.
In [26]:
heat stack-list
WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead
+----+------------+--------------+---------------+--------------+
| id | stack_name | stack_status | creation_time | updated_time |
+----+------------+--------------+---------------+--------------+
+----+------------+--------------+---------------+--------------+
In [27]:
nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+