クラウドオーケストレーション「openstack heat」に迫る!
DESCRIPTION
TRANSCRIPT
ver1.1 中井悦司Twitter @enakai00
オープンクラウド・キャンパス
クラウドオーケストレーション「OpenStack Heat」に迫る!
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
自己紹介
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)
「Linux独習書の新定番」書きました!
読者の声より ――「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく なっているのは不幸なことだと思う。そんな中、この本はすごくいい」「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。 脳みそに染みこんで来ます」
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
日経LinuxでOpenStackの連載を書いてます!
OpenStackの自動化機能
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
デプロイ自動化の現状
クラウド/仮想化環境での自動化3大パターン
1. 仮想アプライアンス(ゴールデンイメージ)方式• アプリケーション導入済みの環境をマシンイメージ化して利用。• 巨大なテンプレートファイルの保守管理、インフラ間の可搬性が
課題。
2. JEOS(Just Enough Operating System)方式• 最小限のOS環境をマシンイメージ化して利用。アプリケーション
の導入・設定は、別途、ツールで自動化。
3. 自動インストール方式• OSのインストールからアプリケーションの導入・設定まで、すべ
ての作業を自動化して適用。
クラウドで主流になりつつある手法
仮想化環境でよく利用される方法
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
カスタマイズ・スクリプト(User Data)による自動化
マシンインスタンス起動時に「カスタマイズ・スクリプト(User Data)」を与えると任意のテキストをメタデータとしてゲストOSに受け渡すことができます。
Cloud-Initは、カスタマイズ・スクリプトを解釈して、自動化を実現します。–下図はシェルスクリプトを渡して、「/etc/motd」を設定しています。–この他にもCloud-Init独自の構文で、処理内容を指示することができます。
http://cloudinit.readthedocs.org/en/latest/
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
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
カスタマイズ・スクリプトとGithub/Puppetの連携
カスタマイズ・スクリプトからGithub/Puppetを連携させて、仮想マシンインスタンスを自動構築することができます。
GitHubVM
YUMリポジトリ
アプリ設定情報(Puppetマニフェスト)
カスタマイズ・スクリプト
ソフトウェアパッケージ
pgsql
https://github.com/enakai00/pgsql_puppet
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
カスタマイズ・スクリプトの限界
カスタマイズ・スクリプトだけでは複数VMの連携処理ができない・・・
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をどうやって知る・・・
やりたいこと
そこで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つの「スタック」としてテンプレートに記述
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 |+--------------------------------------+--------------------------------------------++------------------------------------------+
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が通知を受けるまで待機するダミーリソース
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が完了してから構築開始
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
Heatのアーキテクチャー(詳細版)
REST APIを提供
Heat Engine仮想マシン
インスタンス
Heat API
テンプレート
カスタマイズスクリプト
cfntools
仮想マシンインスタンス
Novaカスタマイズスクリプト
cfntools
シグナル送信
仮想マシンインスタンス起動
Cinder Neutron
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
Open Cloud Campus
クラウドオーケストレーション「OpenStack Heat」に迫る!
(参考)Tuskarのアーキテクチャー
Nova IronicHeat
Tuskar API
物理サーバー ・・・
コントローラーノード
コンピュートノード
REST APIを提供
コントローラーノードやコンピュートノードを構築
オーバークラウド
アンダークラウド
Tuskar Manager
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月号)で解説
中井悦司Twitter @enakai00
オープンクラウド・キャンパス
これからもクラウドと自動化の未来を一緒に考えましょう!