Mesosphere DCOSでつくるクラウドアプリケーション

第2回DCOSでアプリケーションを実行してみよう

前回は、DCOS環境の構築方法と、アプリケーションの実行について解説しました。今回はDCOSとDockerを組み合わせた場合を含めた、より踏み込んだアプリケーションの実行方法について、いくつか例を挙げて解説します。

Worker Nodeの種類 ─Public Worker NodeとPrivate Worker Node

DCOSで実際にアプリケーションを動作させるノードをWorker Nodeと呼び、Publicゾーンに配置されるノード数と、Privateゾーンに配置されるノード数を任意に変更することができます。

Private Worker Nodeは内部ネットワークのIPアドレスだけが割り当てられ、インターネットからのアクセスができないのに対し、Public Worker Nodeは、グローバルIPアドレスが割り当てられ、インターネットからアクセスすることが可能です。

Public Worker Node、Private Worker Nodeを含むDCOSの各コンポーネントの関係図を以下に示しますMesosphere DCOS documentationより抜粋⁠⁠。

画像

通常DCOSでアプリケーションの動作を開始すると、アプリケーションは自動的にPrivateゾーンのWorkerノードに配置されるため、インターネットからアクセスすることができません(Private Worker Nodeからインターネットへのアウトバウンド・アクセスは可能です⁠⁠。これはApache Spark、Apache Cassandraのような、特段インターネットからのアクセスを必要としないアプリケーションであれば問題はありません。

しかし、ブラウザ経由でユーザとのやりとりを必要とするようなアプリケーション(たとえばWordpressのようなWebアプリケーション)の場合はインターネットとの疎通が必要であるため、Private Worker Nodeに配置すると、実質的に意味がなくなってしまいます。その場合は、WebサーバをPublic Worker Nodeに配置し、データベースをPrivate Worker Nodeに配置するようにDCOSに指示することで対応することができるようになります。

また、いずれのWorker NodeもCoreOSで動作しており、一般的なスクリプト(python/sh/bash)も動作させるることができます。

アプリケーションの実行方法

DCOSでのアプリケーション実行方法は大きく分けて2種類あります。

  1. DCOSアプリケーションリポジトリにあるアプリケーションの実行
  2. 独自アプリケーションの実行

DCOSアプリケーションリポジトリにあるアプリケーションの実行は非常に簡単で、⁠dcos package install ⁠と実行するだけで、DCOSクラスタ上でアプリケーションの実行が開始します(詳細は後述⁠⁠。ただしDCOSアプリケーションリポジトリに登録されているアプリケーションに限られます。

DCOSアプリケーションリポジトリにない独自アプリケーションも、JSONファイルを記述することで実行することが可能です。複数の入力ファイルや実行プログラムのオンデマンドの配信(ステージイン)も行うことができます。Dockerと連携したアプリケーション実行もこの方法でサポートされています。こちらも後ほど実際のサンプルアプリケーションを用いて手順を記述します。

DCOSアプリケーションリポジトリ

DCOSの大きな特長の1つが、独自のアプリケーションリポジトリを有することです。これにより、ユーザはコマンド1つで複数のノードから構成されるクラスタアプリケーションをデプロイすることが可能です。現時点で対応しているアプリケーションは以下のとおりです。

  • Marathon
  • Chronos
  • Apache Spark
  • Apache Kafka
  • Kubernetes
  • HDFS
  • Apache Cassandra

アプリケーションリポジトリ自体はGitHub上でメンテナンスされており、今後Mesosphere社によって順次拡充されていくものと思われます⁠。

※)
DCOSのリファレンスページで現在利用可能なアプリケーションと、計画中のアプリケーションの一覧を見ることができます。

アプリケーション例① Apache Spark

1つめの例がApache Sparkです。Apache SparkはDCOSアプリケーションリポジトリに登録されているアプリケーションで、1コマンドで実行することができます。前回記事で解説した通り、CUIから以下のコマンドを実行すると、DCOSクラスタでApache Sparkが起動します。

$ dcos package install spark

同様にDCOSアプリケーションリポジトリに登録されているアプリケーションは、⁠dcos package install <アプリケーション名>⁠で実行することができます。

アプリケーション例② スクリプト

次に簡単なPythonスクリプトを動作させてみましょう。DCOSのWorker NodeにはPython3が標準で入っていますので、Pythonスクリプトを直接実行することができます。

以下が実際に動作させるPythonスクリプトです。10秒sleepして経過時間を標準出力に書き出します。

リスト1 test.py
#!/usr/bin/env python3
import time
start = time.time()
time.sleep(10)
end = time.time()
elapsed = end - start
print("elapsed: ", elapsed)

DCOSはWorker Nodeへのデータの受け渡しにhttpを使います。今回は上記のスクリプトをgistに置き、Worker Nodeに渡すようにしました。

最後にDCOSにジョブとして投入するためのJSON定義ファイルを作成します。

リスト2 python-sleep.json
{
    "id": "python-sleep",
    "cmd": "chmod u+x test.py && ./test.py",
    "cpus": 0.1,
    "mem": 10.0,
    "instances": 1,
    "uris": [    "https://gist.githubusercontent.com/mkiuchi/b59989d37f65b1823994/raw/41412a57384a9ed6adb35800c5aa483419e67e41/test.py"
    ]
}

最後にdcosコマンドでDCOSクラスタにジョブとして投入します

$ dcos marathon app add python-sleep.json

DCOS GUIの左側の[Services]を選択すると、marathonサービスでtaskが1つ動作していることを確認することができます。

画像

“marathon⁠の文字をクリックすると、新しいブラウザウィンドウで詳細が表示されます。

画像

DCOS GUIのURLを⁠http://<DCOSのホスト名>/mesos⁠とすると、実際のジョブの実行状態を表示することができます。

画像

各ジョブの右側の⁠Sandbox⁠をクリックすると、それぞれのジョブの標準出力、標準エラー出力の内容を確認することができます。

画像
標準出力の例
標準出力の例
標準エラー出力の例
標準エラー出力の例

marathonはスクリプトが終了すると自動的に起動しなおすため、最後にmarathonからジョブを削除します。

$ dcos marathon app remove /python-sleep

アプリケーション例③ Dockerコンテナと連携したアプリケーション

DCOSはDockerと連携することで、Worker Nodeにインストールされていない環境を自動的に展開した上で、アプリケーションを実行することが可能です。ここでは、Public Worker Nodeでnginxを使ったウェブブラウザ向けのアプリケーションを動かすことにします。

以下のファイルが、DCOSで実行するためのJSON定義ファイルです。

リスト3 webgl-earth.json
{
 "container": {
   "type": "DOCKER",
   "docker": {
     "network": "BRIDGE",
     "portMappings": [
        { "containerPort": 80, "hostPort": 80 }
     ],
     "image": "mkiuchi/webglearth"
   }
 },
 "acceptedResourceRoles": ["slave_public"],
 "ports": [80],
 "requirePorts": true,
 "id": "webgl-earth",
 "cpus": 0.01,
 "mem": 256
}

DCOS CLIからこのJSONファイルを使ってジョブを投入します。

$ dcos marathon app add webgl-earth.json

1~2分ほど待ってからMarathonの管理インターフェイスを見ると、アプリケーションが実行されていることがわかります。

画像

AWS-CloudFoundation管理コンソールの[Output]タブを選択し、⁠PublicSlaveDnsAddress⁠の値をコピーし、Webブラウザで開きます。

成功すると、以下のようにWebGLで描画された地球が表示されます。

画像

アプリケーションを終了するにはDCOS CLIから以下のようにコマンドを実行します

$ dcos marathon app remove /webgl-earth

さいごに

DCOSを使うことで、昨今主流になりつつあるクラスタ型のアプリケーションから、一般的な処理で用いるようなシェルスクリプト、さらにはWebアプリケーションまで、多様なアプリケーションをあたかも1台のコンピュータの中で実行しているかのように操作できることがおわかりいただけたかと思います。

現在DCOS Community EditionはAWS上での動作に限られていますが、今後はGoogle Cloud PlatformやMicrosoft Azureにもその対象を広げていく予定です。またDCOS Enterprise Editionはオンプレミス環境、プライベートクラウド環境でも動作させることが可能です。これにより、地理的に分散したコンピュータ資源を自分の手元のパソコンの延長のように扱うことが可能になります。まさにDCOSは次世代のオペレーティングシステムのひとつの形を示していると言ってもよいでしょう。

弊社ではDCOSの普及及び具体的な事例に即したコンサルテーションを行っています。ご興味がありましたらぜひ sales@creationline.com までお寄せください。

おすすめ記事

記事・ニュース一覧