Help us understand the problem. What is going on with this article?

[Azure Container Service版] 30分で作るMesos + Chronos + Marathon + Dockerクラスタ環境

More than 3 years have passed since last update.

当記事は

牛尾さんの記事:瞬殺で作るMesos + Chronos + Marathon + Dockerクラスタ環境をベースにしています。

上記牛尾さんの記事、そのっつさんの正月休みだし Mesos 触ってみたおよび、Azureの公式/非公式な多くのドキュメントを参考にしています。
みなさまありがとうございますmm

TL;DR

Azure Container ServiceがPublic Previewになったので、試してみました。
Public preview: Azure Container Service

AzureのSubscriptionを持っている人なら、待ち時間込みの30分強で誰でもDockerクラスタ環境を手に入れることができちゃいます。

当記事の内容を実施いただくと、去年牛尾さんが書かれていた下記記事と似た構成のDockerクラスタをAzure上にサクッと構築することができます。
瞬殺で作るMesos + Chronos + Marathon + Dockerクラスタ環境

どんなクラスタを構築するの?

今回は↓のARM Templateを使用して構築します。
101-acs-mesos

※ARM Templateについて今回は説明しません。わからなくても問題なくDockerクラスタを構築できますが、気になる人は ARM Templateって何? を読んでみてください。

構成

図1

  • Mesos master xN台とMesos slave xN台な構成です。

図中では

  • Mesos masterはmaster availability set
  • Mesos slaveはagent VM scale set

と表現されています。

  • Mesos slaveで構成されたリソース上でDockerコンテナを動かします。


  • DockerコンテナをデプロイするMesos slaveはLoad Balancer(以下LB)にぶさがっており、LBに割り当てられたPublic IP address/Public DNS nameの80/443/8080番ポートを通してアクセスすることができます。図中のLBでは43となっていますが、443が正しいです。
  • Mesos slave上にデプロイしたアプリケーションやDockerコンテナをどのポートにマッピングするかは、Marathonの管理UIでCreate する際に指定できます。

なお、上記説明は、Mesos Container Service Walkthroughをかいつまみつつ説明したものとなります。

Dockerクラスタを構築する手順

前提

AzureのSubscriptionを持っているだけでOKです。

クラスタのセットアップ

↓のARM Templateを使用して構築します。
101-acs-mesos

やり方はとても簡単。

github

上記githubをブラウザで開き、"Deploy to Azure"ボタンを
クリックします。

Azure Management Portal

するとAzureの管理Portalが開きます。
今回使用するARM Templateに必要なパラメータ、Subscription、Dockerクラスタを構築するResource Group名とロケーションの入力とLegal termへの合意を行います。


  • ARM Templateに必要なパラメータ
    • DNS name prefix : DNS名の頭に付く文字列です。
    • Agent count : Mesos slaveクラスタを構成するAzure VMの数です。試すだけなら1でOK。
    • Agent VM size : Azure VMのスペックです。金額などの詳細はこちらを参照してください。
    • Linux admin user name : SSHログインする際のユーザ名です。
    • Orchestrator type : Dockerクラスタを管理するOrchestratorを選択できます。今はMesosかSwarm(preview)のみ。今回はMesosを選択します。
    • Master count : Mesos masterを構成するAzure VMの数です。試すだけなら1でOK。
    • SSH RSA public key : SSH接続/ポートフォワーディングする際に使用する鍵の公開鍵の中身の文字列をコピペすればOKです。(ssh-keygenで生成した鍵のhoge.pubの中身です。ex. "ssh-rsa AAAAB3Nz~[略]~fuga meado@hoge.com")

  • Subscription
    • 複数持っている場合はここで選択できます。

  • Dockerクラスタを構築するResource Group名とロケーション
    • Resource group name : 今回は"ACSdesuyo"という名前で新しくResource groupを作成しています。Resouce groupはできれば分けておきましょう。あとでまとめて削除できるので便利です。
    • Resource group location : 任意で。今回は西日本リージョンを選択しました。VMが東日本より安いので。。
    • Legal terms : 中身を確認して問題なければCreateボタンを押して合意しましょう。

入力し終わったらCreateボタンを押し、Deployされるのを待ちます。

deploying

↑はデプロイ中のPortalの様子。
20分以上かかると思うので、気長に待ちます。


~~ 20分後 ~~

finish

完成!

動作確認(Mesos masterへの接続)

SSHポートフォワーディング

ブラウザで localhost:80 へアクセスすると、Mesos master上の80番ポートへリクエストが転送されるよう、SSHポートフォワーディングでトンネルを作ります。

ローカルPCのターミナル上で下記コマンドを実行します。

# Windowsの場合は下記を参照してください
https://github.com/Azure/azure-quickstart-templates/blob/master/101-acs-mesos/docs/SSHKeyManagement.md#key-management-and-agent-forwarding-with-windows-pageant


# Mac/Linuxの場合
sudo ssh -L 80:localhost:80 -N azureuser@nntugumgmt.japanwest.cloudapp.azure.com -i ~/.ssh/azure-acs-dayo -p 2200


# 構文はこんな感じ
sudo ssh -L 80:localhost:80 -N [Linux admin user name]@[Mesos masterのDNS name] -i [Path to SSH secret key] -p [Mesos masterへの接続用Port]

[]で囲っている部分を自分の環境に合わせて置き換えればOK。

  • Linux admin user name : ARM Templateに引き渡したパラメータそのままのものでOK。当記事では azureuser と入力しました。
  • Mesos masterのDNS name : Mesos masterのDNS nameの確認方法 確認方法はこちら
  • Path to SSH secret key : ARM Templateに引き渡したSSH RSA public keyの対になる秘密鍵
  • Mesos masterへの接続用Port : Mesos masterへSSH接続するためのポート。デフォルトでは、Mesos masterの台数に応じて2200番から順に振られていきます。※図1を参照。

管理UIへアクセスしてみる

これで準備は完了です。

502 Bad Gatewayあたりが返ってきてUIへアクセス出来ない場合は、こちらを参考に対処すると大抵の場合解決します。

Mesosを試してみる

当記事ではすでにわかりやすい記事があるため、Chronos/Mesos masterのUIについては割愛します。

Chronos/Mesos masterのUIについては、

牛尾さんの記事
 1. Chronosからタスクを実行してみる

当記事で使用したARM Templateのドキュメント

がわかりやすいのでおすすめです。
何かいいネタがあれば追記します。

1.Marathonを使ってみる@シンプルなアプリケーションのデプロイ

Mesosが管理するリソース上にDockerコンテナをデプロイする前に、80にアクセスしてきた相手に「HTTPレスポンスコード:200」と「Hello World」を返すだけのアプリケーションをデプロイしてみます。

 1. Marathon(http://localhost/marathon/)へアクセス
 2. Create New Application

Create

レフトナビのCreateボタンを押します。


New Application

デプロイするApplicationの情報を入力するフォームが表示されるので、

  • ID : hello-world
  • CPU : 0.1
  • Command :
while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l 80; done
  • Optional settings
    • Ports : 80

と入力してCreateします。

  • Optional settings > Ports : 80 について
    • Marathonは、Portsに何も入力しなかった場合、Applicationにランダムでポートを割り振ります。
    • ApplicationがデプロイされるのはMesos slave上です。
    • 図1にある通り、Mesos slaveへはLBの80/443/8080版ポートを通してアクセスできるようになっています。
    • LBの設定を変更せずにデプロイしたApplicationへ外部からアクセスするには、Applicationに80/443/8080いずれかのポートを割り振る必要があります。

 3. ApplicationのStatusがRunningになるまで待つ。

Status

この時点でMesos slave上にデプロイされたApllicationが動き始めました。

 4. ブラウザ経由でアクセスしてみる。

Simple Application

URLはMesos slave(図1でいうところのagent)に紐付いたLBから確認できます。
Mesos slaveのDNS nameの確認方法

2.MarathonでDockerコンテナをデプロイする

今回利用したARM Templateの作者がDocker Hubに用意してくれたDockerイメージをデプロイしてみたいと思います。
https://hub.docker.com/r/yeasy/simple-web/

ではやってみましょう。

 1. Marathon(http://localhost/marathon/)へアクセス
 2. Create New Application

Create

レフトナビのCreateボタンを押します。


New Application
New Application

デプロイするApplicationの情報を入力するフォームが表示されるので、

  • ID : simple-web
  • CPU : 0.1
  • Memory : 256

  • Docker container settings

    • Image : yeasy/simple-web
    • Network : Host
  • Optional settings

    • Ports : 80

と入力してCreateします。

  • Optional settings > Ports : 80 について
    • Marathonは、Portsに何も入力しなかった場合、Applicationにランダムでポートを割り振ります。
    • ApplicationがデプロイされるのはMesos slave上です。
    • 図1にある通り、Mesos slaveへはLBの80/443/8080版ポートを通してアクセスできるようになっています。
    • LBの設定を変更せずにデプロイしたApplicationへ外部からアクセスするには、Applicationに80/443/8080いずれかのポートを割り振る必要があります。

 3. ApplicationのStatusがRunningになるまで待つ。

Status

今回はdocker pullしているのでそこそこ時間がかかります。
この時点でMesos slave上にデプロイされたDockerコンテナが動き始めました。

 4. ブラウザ経由でアクセスしてみる。

simple-web

URLはMesos slave(図1でいうところのagent)に紐付いたLBから確認できます。
Mesos slaveのDNS nameの確認方法

まとめ

まだPublic previewなAzure Container Serviceですが、ARM Templateの仕組みがとても良く出来ているおかげで詰まることなくDockerクラスタ環境が構築できてしまいました。
慣れてくると30分もあれば環境を再構築できちゃいます。
Dockerコンテナをbuildしている間に、Dockerクラスタ環境を作れちゃうなんてすごいですよね。
(利用料金はかかりますが)検証しほうだいです。

リソース監視、サービス死活監視、Scale out/inあたりのルールをチームに合わせた運用ポリシーとして整備して、
セキュリティやパフォーマンスといった非機能要件をクリアできればすぐにでも本番環境として使えそうな印象でした。

以上、@nntsuguでした。

Tips

Mesos masterのDNS nameの確認方法

DNS name

  • Mesos masterへはLoad Balancer(以下LB)のNATを通してアクセスします。
  • Mesos masterのLBに紐付いたPublic IP addressのDNS nameはAzure portalから上図の通り確認することができます。

Mesos slaveのDNS nameの確認方法

DNS name

  • Mesos slaveへはLoad Balancer(以下LB)を通してアクセスします。
  • Mesos slaveのLBに紐付いたPublic IP addressのDNS nameはAzure portalから上図の通り確認することができます。

Mesos/Chronos/MarathonのUIにアクセスすると502 Bad Gatewayになってしまう場合の対処方法

  • Mesos masterの乗っているVMを再起動する(当記事だと"mesos-master-C72CC01D-0")

or

で大抵の場合は解決できます。

Mesos slaveのScale out/Scale in

ARM explore or REST APIでさくっと変更できるようです。
サービス断無しに操作できるか?などなど確認してからどこかにまとめたいなー。

参考資料

ARM Templateって何?

って人は
Azure リソース マネージャーの概要を読んでみるといいかも。

今回お世話になった資料たち

みなさんのおかげでMesosとACSのTemplateの構成がすっと頭に入ってきました。
ありがとうございますmm

瞬殺で作るMesos + Chronos + Marathon + Dockerクラスタ環境

正月休みだし Mesos 触ってみた

https://github.com/Azure/azure-quickstart-templates/tree/master/101-acs-mesos

https://github.com/Azure/azure-quickstart-templates/blob/master/101-acs-mesos/docs/MesosWalkthrough.md

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away