Mesosphere DCOSをAWSにデプロイする
ども、大瀧です。
昨日Mesosphere DCOSのクローズドベータが取れ、GAがリリースされました。DCOSのCommunity EditionをAWSで簡単に構築することができたので、レポートしてみます。
Mesosphere DCOSとは
Mesosphere DataCenter Operation System(DCOS)は複数のホストをクラスタ化し、そこで実行するアプリケーションを管理するソフトウェア群です。
Serviceという単位でHDFSやKafka、Sparkといった分散アプリケーション基盤のサポートのほかDockerコンテナをプロセススケジューラのMarathonやKubernetes上で実行、管理する機能を持ちます。
オープンソースのMesosをベースに、Web UIとCLIが追加されたMesosクラスタを簡単に構築するCloudFormationテンプレート(AWSの場合)が提供されます。Community EditionとEnterprise Editionがあり、Enterprise Editionには有償サポートが付与されます。今回は、AWSでのDCOS Community Editionの作成を試してみました。
作成手順
MesosphereのAWSセットアップページにアクセスすると、初回はアカウント登録のページにリダイレクトします。メールアドレスを登録しましょう。以下の画面が表示されたら手順に沿って進めていきます。
まずは、ステップ1として起動するEC2インスタンスのSSHアクセス用のキーペア作成が促されます。既存のキーでも特に問題は無いので、作成済みであれば飛ばしても構いません。[Create AWS EC2 Key Pair]ボタンをクリックするとAWS Management Console(以下AMC)のキーペア作成画面が表示されます。
画面をスクロールすると、ステップ2のDCOSクラスタの作成に進みます。[Select AWS Template]ボタンをクリックすると、CloudFormationテンプレートを選択するダイアログが表示されます。
ダイアログでは、実行するCloudFormationテンプレートを選択します。クラスタを起動するリージョンと、Mesos Masterをシングルにするかクラスタ(3ノード)にするかで別れているようです。[Get Started]ボタンをクリックするとAMCのCloudFormationスタック作成画面が表示されます。
スタック作成画面では、適当なスタック名(今回はdcos)を入力し、[Next]ボタンをクリックします。
パラメータ設定画面では、以下のように項目を選択、入力します。
項目名 | 説明 |
---|---|
AcceptEULA | [Yes]を選択 |
AdminLocation | Mesos Masterに紐付くセキュリティグループの設定に反映されます。全トラフィックへの許可ルールになるので、0.0.0.0/0は避け、手元の回線のグローバルIPなどに絞るのが推奨です。 |
KeyName | ステップ1で作成したキーペア名 |
PublicSlaveInstanceCount | 公開するServiceを実行するMesos Slaveインスタンス数。Auto Scaling Groupの希望(Desired)数に反映されます。 |
SlaveInstanceCount | バッチなど非公開Serviceを実行するMesos Slaveインスタンス数。Auto Scaling Groupの希望(Desired)数に反映されます。 |
既定ではそれなりの台数が入っていますが、いずれのインスタンスもm3.xlargeで上がってくるので、検証目的であれば最小台数(すべて1)で良いでしょう。
[Next]ボタンを何度かクリックし、IAMの権限で[I acknowledge that this template might cause AWS CloudFormation to create IAM resources.]のチェックをオン、[Create]ボタンをクリックすればスタック作成が開始します。 しばらく待つと、AutoScalingグループが3つとNATインスタンス1台(m3.medium)が作成されることが確認できます。以下はAuto Scaling Groupの一覧です。MasterServerGroup/PublicSlaveServerGroup/SlaveServerGroupとなっており、スタック作成時の指定の台数になっていることがわかります。
CloudFormationの画面に戻り、作成したスタックの[Output]タブにある[DnsAdress](Mesosphereの管理画面のURL(Mesos MasterクラスタのフロントであるELB)にWebブラウザでアクセスします。
DCOSのWeb画面が表示されました。メールアドレスを入力、[Try Mesosphere DCOS]ボタンをクリックすればセットアップ完了です。
前述のServiceの管理はCLIで行うため、引き続きDCOS CLIのセットアップを行います。ウィザードの表示の通り、curl
、pip
、virtualenv
を事前にインストールし、表示されているコマンドラインを実行します。今回はMac OS X YosemiteにHomebrewでインストールしました。
$ mkdir -p dcos && cd dcos && curl -O https://downloads.mesosphere.io/dcos-cli/install.sh && bash ./install.sh . http://dcos-elasticloadba-XXXXXXXXXXXX-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com && source ./bin/env-setup % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1630 100 1630 0 0 871 0 0:00:01 0:00:01 --:--:-- 871 Installing DCOS CLI from PyPI... New python executable in /Users/ryuta/Desktop/dcos/bin/python2.7 Also creating executable in /Users/ryuta/Desktop/dcos/bin/python Installing setuptools, pip, wheel...done. https://mesosphere.com/amazon/ Go to the following link in your browser: https://accounts.mesosphere.com/oauth/authorize?scope=&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&client_id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&access_type=offline Enter verification code:
verification codeの入力のところでコマンド実行が止まるので、直前のURLにWebブラウザでアクセスし、確認コードを確認します。
[Allow]をクリックすると、確認コードが表示されるので、これを端末にコピー&ペーストします。
Enter verification code: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Updating source [https://github.com/mesosphere/universe/archive/version-1.x.zip] Finished installing and configuring DCOS CLI. Run this command to set up your environment and to get started: source /Users/ryuta/Desktop/dcos/bin/env-setup && dcos help $
CLIがインストールされました。最後に表示されたコマンドラインを実行し、DCOS CLIの動作を確認します。
$ source /Users/ryuta/Desktop/dcos/bin/env-setup && dcos help Command line utility for the Mesosphere Datacenter Operating System (DCOS). The Mesosphere DCOS is a distributed operating system built around Apache Mesos. This utility provides tools for easy management of a DCOS installation. Available DCOS commands: config Get and set DCOS CLI configuration properties help Display command line usage information marathon Deploy and manage applications on the DCOS package Install and manage DCOS software packages service Get the status of DCOS services task Get the status of DCOS tasks Get detailed command description with 'dcos <command> --help'. $
動きました!
構成
CloudFormationによって作成されるAWSコンポーネントは以下の通りです。
- Auto ScalingによるEC2インスタンス3グループ。いずれもCoreOS Stable AMIからユーザーデータによってMesosの初期構成が行われます。いずれもm3.xlargeです。
- Mesos Masterクラスタ用、公開Service用のELB
動作確認
初期状態でMarathonが実行されるので、Marathon上でDockerコンテナを実行してみます。Marathonのアプリケーション定義はJSONテキストで記述します。
{ "container": { "type": "DOCKER", "docker": { "image": "superguenter/demo-app" } }, "cmd": "python -m SimpleHTTPServer $PORT", "id": "demo", "cpus": 0.01, "mem": 256, "ports": [3000] }
dcos marathon app addコマンドでアプリケーションを登録します。
$ dcos marathon app add definition.json $ dcos marathon app list ID MEM CPUS DEPLOYMENTS TASKS CONTAINER CMD /demo 256.0 0.01 1 0/1 DOCKER python -m SimpleHTTPServer $PORT $
しばらく待つと、TASKSが1/1に代わり、SlaveServerGroupのいずれかのインスタンスでDockerコンテナが実行されます。
まとめ
Auto Scalingを駆使したスケーラブルで実用的なアプリ実行基盤がCloudFormationでサクッと構築できて、よさげな印象です。CoreOSベースなのもシステムのアップデート・運用が考慮されていてイマドキですよね。肝心のリソース管理機能はまだちゃんと触れていませんが、これだけきちんと構成が整備されているプロダクトであればクラウドのマネージドサービスに依らない、マルチクラウドを目当てとする自前構成も十分検討できるのでは、と期待しています。