クラウドオーケストレーション「openstack heat」に迫る!

20
ver1.1 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス クラウドオーケストレーション 「OpenStack Heat」に迫る!

Upload: etsuji-nakai

Post on 15-Jan-2015

6.776 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: クラウドオーケストレーション「OpenStack Heat」に迫る!

ver1.1 中井悦司Twitter @enakai00

オープンクラウド・キャンパス

クラウドオーケストレーション「OpenStack Heat」に迫る!

Page 2: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

自己紹介

中井悦司(なかいえつじ)– Twitter @enakai00

日々の仕事– Senior Solution Architect and

Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。

昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)

「Linux独習書の新定番」書きました!

読者の声より ――「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく  なっているのは不幸なことだと思う。そんな中、この本はすごくいい」「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。 脳みそに染みこんで来ます」

Page 3: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

日経LinuxでOpenStackの連載を書いてます!

Page 4: クラウドオーケストレーション「OpenStack Heat」に迫る!

OpenStackの自動化機能

Page 5: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

デプロイ自動化の現状

クラウド/仮想化環境での自動化3大パターン

1. 仮想アプライアンス(ゴールデンイメージ)方式• アプリケーション導入済みの環境をマシンイメージ化して利用。• 巨大なテンプレートファイルの保守管理、インフラ間の可搬性が

課題。

2. JEOS(Just Enough Operating System)方式• 最小限のOS環境をマシンイメージ化して利用。アプリケーション

の導入・設定は、別途、ツールで自動化。

3. 自動インストール方式• OSのインストールからアプリケーションの導入・設定まで、すべ

ての作業を自動化して適用。

クラウドで主流になりつつある手法

仮想化環境でよく利用される方法

Page 6: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

カスタマイズ・スクリプト(User Data)による自動化

マシンインスタンス起動時に「カスタマイズ・スクリプト(User Data)」を与えると任意のテキストをメタデータとしてゲストOSに受け渡すことができます。

Cloud-Initは、カスタマイズ・スクリプトを解釈して、自動化を実現します。–下図はシェルスクリプトを渡して、「/etc/motd」を設定しています。–この他にもCloud-Init独自の構文で、処理内容を指示することができます。

http://cloudinit.readthedocs.org/en/latest/

Page 7: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

Github/Puppetと連携するカスタマイズ・スクリプトの例

Githubとは?– Gitは、プログラムソースコードの分散バージョン管理システム。インターネット上にコードリポジトリを作成して無料で利用できるサービス「Github」の登場により、利用者が増加しました。

–下図のカスタマイズ・スクリプトでは、GithubにアップロードしておいたPuppet間に不フェスとをダウンロードして適用しています。

Githubからマニフェストを取得して適用するスクリプトの例

#!/bin/sh -x

yum -y install puppet git

GitRepository=https://github.com/enakai00/pgsql_puppetConfigTag=f19RepoName=${GitRepository##*/}RepoName=${RepoName%.git}

mkdir -p /tmp/gittmpcd /tmp/gittmpgit clone $GitRepositorycd $RepoNamegit checkout $ConfigTagexport FACTER_manifest_dir="/tmp/gittmp/$RepoName"puppet apply main.pp

Page 8: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

カスタマイズ・スクリプトとGithub/Puppetの連携

カスタマイズ・スクリプトからGithub/Puppetを連携させて、仮想マシンインスタンスを自動構築することができます。

GitHubVM

YUMリポジトリ

アプリ設定情報(Puppetマニフェスト)

カスタマイズ・スクリプト

ソフトウェアパッケージ

pgsql

https://github.com/enakai00/pgsql_puppet

Page 9: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

カスタマイズ・スクリプトの限界

カスタマイズ・スクリプトだけでは複数VMの連携処理ができない・・・

Page 10: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

複数VMによる連携処理の例

VM#1を起動して、PostgreSQLサーバーを構築する。 PostgreSQLの構成が完了して、DBに接続可能になるのを待つ。 VM#2を起動して、 Railsアプリケーションをデプロイする。 Railsアプリケーションから、PostgreSQLのDBに接続する。

プライベートIP プライベートIP

フローティングIP

WebアプリケーションにはフローティングIPで接続

DBサーバにはプライベートIPで接続

VM#1VM#2

DBの構築完了をどうやって検知する・・・

DBサーバのプライベートIPをどうやって知る・・・

やりたいこと

Page 11: クラウドオーケストレーション「OpenStack Heat」に迫る!

そこでHeatなわけですよ!

Page 12: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

Heatのアーキテクチャー

・リソース[VM#1] カスタマイズスクリプトでDB構築 カスタマイズスクリプトから構築完了をHeatエンジンに通知

・リソース[WaitHandle] VM#1からの構築完了通知を受けとる

・リソース[WaitCondition] WaitHandleが通知を受けとるまで待機

・リソース[VM#2] カスタマイズスクリプトでRailsアプリ構築 VM#1のプライベートIPをカスタマイズスクリプトに埋め込む

Heatテンプレート

Heatエンジン

HeatのAPIからテンプレート投入

スタックを自動構築

このかたまりを1つの「スタック」としてテンプレートに記述

Page 13: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

デモンストレーション# heat stack-create -f dengonban.template -P "KeyName=mykey" dengonban+--------------------------------------+------------+--------------------+----------------------+| id | stack_name | stack_status | creation_time |+--------------------------------------+------------+--------------------+----------------------+| 642c1678-8966-461c-bbfe-c75c17b75e95 | dengonban | CREATE_IN_PROGRESS | 2014-02-06T07:01:16Z |+--------------------------------------+------------+--------------------+----------------------+

# heat stack-list+--------------------------------------+------------+-----------------+----------------------+| id | stack_name | stack_status | creation_time |+--------------------------------------+------------+-----------------+----------------------+| 642c1678-8966-461c-bbfe-c75c17b75e95 | dengonban | CREATE_COMPLETE | 2014-02-06T07:01:16Z |+--------------------------------------+------------+-----------------+----------------------+

# nova list+--------------------------------------+--------------------------------------------++------------------------------------------+| ID | Name || Networks |+--------------------------------------+--------------------------------------------++------------------------------------------+| c7b48220-ea3c-4053-b699-d3bed8cde657 | dengonban-PgSQLDatabaseServer-wptgqlxdmbt6 || private01=192.168.101.3 || 5896b645-a398-4827-9d76-306f7ec9c418 | dengonban-WebServer-s3n5y4wshlq2 || private01=192.168.101.4, 192.168.199.105 |+--------------------------------------+--------------------------------------------++------------------------------------------+

Page 14: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

テンプレートの概要 (1/2){ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "A Database instance running a local PostgreSQL server",・・・ "Resources" : { "PgSQLDatabaseServer": { "Type": "AWS::EC2::Instance", "Properties": { "SubnetId" : "013cd465-7e75-4edc-ae83-6476fcf9178b", "ImageId" : { "Ref" : "ImageName" }, "InstanceType" : { "Ref" : "InstanceType" }, "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -x\n",・・・ "# All is well so signal success\n", "/opt/aws/bin/cfn-signal -e 0 -r \"PostgreSQL Database setup complete\" '", { "Ref" : "PgSQLWaitHandle" }, "'\n" ]]}} } },

"PgSQLWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" },

"PgSQLWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "PgSQLDatabaseServer", "Properties" : { "Handle" : {"Ref" : "PgSQLWaitHandle"}, "Timeout" : "6000" } },

VM#1のカスタマイズスクリプト

カスタマイズスクリプトの中から、「WaitHandle」への完了通知コマンドを実行

WaitHandleが通知を受けるまで待機するダミーリソース

Page 15: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

テンプレートの概要 (1/2) "WebServer": { "Type": "AWS::EC2::Instance", "DependsOn": "PgSQLWaitCondition", "Properties": { "SubnetId" : "013cd465-7e75-4edc-ae83-6476fcf9178b", "ImageId" : { "Ref" : "ImageName" }, "InstanceType" : { "Ref" : "InstanceType" }, "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -x\n", "export DB_IP=", { "Fn::GetAtt" : [ "PgSQLDatabaseServer", "PublicIp" ] }, "\n",・・・ "sed -i \"s/ username:.*/ username: rails/\" /root/rails/dengonban/config/database.yml\n", "sed -i \"s/ password:.*/ password: pas4rails\\n host: $DB_IP/\" /root/rails/dengonban/config/database.yml\n",・・・ ]]}} } },

"WebServerIPAssoc" : { "Type" : "AWS::EC2::EIPAssociation", "Properties" : { "InstanceId" : { "Ref" : "WebServer" }, "EIP" : "192.168.199.105" } } }}

VM#2のカスタマイズスクリプト

VM#1のプライベートIPに置換される

WaitConditionが完了してから構築開始

Page 16: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

Heatのアーキテクチャー(詳細版)

REST APIを提供

Heat Engine仮想マシン

インスタンス

Heat API

テンプレート

カスタマイズスクリプト

cfntools

仮想マシンインスタンス

Novaカスタマイズスクリプト

cfntools

シグナル送信

仮想マシンインスタンス起動

Cinder Neutron

Page 17: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

Heatの今後の展開

Heatは、構築済みスタックを後から構成変更することもできます。–テンプレートを修正して、Heatエンジンに再投入すると差分を検出して、追加の構築/削除処理を実施します。

これを利用するとオートスケールを実現することができます。– VMの負荷に応じてテンプレートにVMを追加/削除して、HeatからVMを追加構築/削除

します。–開発コミュニティでは、Ceilometerと連携する方向での実装が検討されています。

Baremetal Deployment(Ironic)を利用して、Heatからコンピュートノードを追加構築するような試みもあります。–参考:Triple O / Tuskar– https://wiki.openstack.org/wiki/TripleO/Tuskar

Page 18: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

(参考)Tuskarのアーキテクチャー

Nova IronicHeat

Tuskar API

物理サーバー ・・・

コントローラーノード

コンピュートノード

REST APIを提供

コントローラーノードやコンピュートノードを構築

オーバークラウド

アンダークラウド

Tuskar Manager

Page 19: クラウドオーケストレーション「OpenStack Heat」に迫る!

Open Cloud Campus

クラウドオーケストレーション「OpenStack Heat」に迫る!

参考資料

本日のデモ環境の構築手順– RDO(Havana)でHeatを試す– http://d.hatena.ne.jp/enakai00/20140205/1391604332

HeatとCloud-Initの連携の詳細を紹介– OpenStack HeatがCloud-Init / cfntoolsと連携する様子を覗きこむ– http://d.hatena.ne.jp/enakai00/20131226/1388021566

Heatテンプレートは、AWS CloudFormation互換なので、CloudFormationの知識も有用– CloudFormation 詳細 -ほぼ週刊AWSマイスターシリーズ第6回- – http://www.slideshare.net/kentamagawa/cloudformation-aws5

PuppetとGitHubの連携は、日経Linux連載記事(2013年9月号〜2014年2月号)で解説

Page 20: クラウドオーケストレーション「OpenStack Heat」に迫る!

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

これからもクラウドと自動化の未来を一緒に考えましょう!