Mesosphere DCOSをAWSにデプロイする

2015.06.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
昨日Mesosphere DCOSのクローズドベータが取れ、GAがリリースされました。DCOSのCommunity EditionをAWSで簡単に構築することができたので、レポートしてみます。

Mesosphere DCOSとは

Mesosphere DataCenter Operation System(DCOS)は複数のホストをクラスタ化し、そこで実行するアプリケーションを管理するソフトウェア群です。

Serviceという単位でHDFSやKafkaSparkといった分散アプリケーション基盤のサポートのほかDockerコンテナをプロセススケジューラのMarathonKubernetes上で実行、管理する機能を持ちます。

オープンソースのMesosをベースに、Web UIとCLIが追加されたMesosクラスタを簡単に構築するCloudFormationテンプレート(AWSの場合)が提供されます。Community EditionとEnterprise Editionがあり、Enterprise Editionには有償サポートが付与されます。今回は、AWSでのDCOS Community Editionの作成を試してみました。

作成手順

MesosphereのAWSセットアップページにアクセスすると、初回はアカウント登録のページにリダイレクトします。メールアドレスを登録しましょう。以下の画面が表示されたら手順に沿って進めていきます。

dcos01

まずは、ステップ1として起動するEC2インスタンスのSSHアクセス用のキーペア作成が促されます。既存のキーでも特に問題は無いので、作成済みであれば飛ばしても構いません。[Create AWS EC2 Key Pair]ボタンをクリックするとAWS Management Console(以下AMC)のキーペア作成画面が表示されます。

dcos02

画面をスクロールすると、ステップ2のDCOSクラスタの作成に進みます。[Select AWS Template]ボタンをクリックすると、CloudFormationテンプレートを選択するダイアログが表示されます。

dcos03

ダイアログでは、実行するCloudFormationテンプレートを選択します。クラスタを起動するリージョンと、Mesos Masterをシングルにするかクラスタ(3ノード)にするかで別れているようです。[Get Started]ボタンをクリックするとAMCのCloudFormationスタック作成画面が表示されます。

dcos04

スタック作成画面では、適当なスタック名(今回はdcos)を入力し、[Next]ボタンをクリックします。

dcos05

パラメータ設定画面では、以下のように項目を選択、入力します。

項目名 説明
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)で良いでしょう。

dcos06

[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となっており、スタック作成時の指定の台数になっていることがわかります。

dcos07

CloudFormationの画面に戻り、作成したスタックの[Output]タブにある[DnsAdress](Mesosphereの管理画面のURL(Mesos MasterクラスタのフロントであるELB)にWebブラウザでアクセスします。

dcos08

DCOSのWeb画面が表示されました。メールアドレスを入力、[Try Mesosphere DCOS]ボタンをクリックすればセットアップ完了です。

dcos09

前述のServiceの管理はCLIで行うため、引き続きDCOS CLIのセットアップを行います。ウィザードの表示の通り、curlpipvirtualenvを事前にインストールし、表示されているコマンドラインを実行します。今回はMac OS X YosemiteにHomebrewでインストールしました。

dcos10

$ 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ブラウザでアクセスし、確認コードを確認します。

dcos11

[Allow]をクリックすると、確認コードが表示されるので、これを端末にコピー&ペーストします。

dcos12

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

dcos21

動作確認

初期状態で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ベースなのもシステムのアップデート・運用が考慮されていてイマドキですよね。肝心のリソース管理機能はまだちゃんと触れていませんが、これだけきちんと構成が整備されているプロダクトであればクラウドのマネージドサービスに依らない、マルチクラウドを目当てとする自前構成も十分検討できるのでは、と期待しています。