apache auroraの始めかた
TRANSCRIPT
Masahito Zembutsu @zembutsu Technology Evangelist; Creationline , Inc. Tokyo, Feb 28, 2015 Open Source Conference 2015 Tokyo Spring Open Cloud Campus #osc15tk
Apache Aurora の始めかた Apache Aurora introduction and tutorial
Apache Aurora の始めかた 2 / 46
今日の内容
• なぜ Apache Aurora なのか?
• Apache Aurora とは?
• チュートリアルを試すには?
• まとめ
Topics
Auroraを実際に使うときの日本語の情報が少ないため、 自分が分からなかった所を 整理してみました。
Apache Aurora の始めかた 3 / 46
まとめ
• AuroraはApache Mesos上で動くフレームワーク Marathon や chronos と同じような位置付け、インフラ部分を Mesos で抽象化
• “Job” 単位で ”Task” “Process”を管理する概念 ジョブの中に複数のタスク、そして実際のコマンドであるプロセスを指定
• コードでサービスやインフラを定義 設定ファイルは「.aurora」形式で、Python 言語の記述、CLI で実行
Conclusion
バッチだけでなくサービスやcronで実行するコマンドを 「Job」と定義して使います。
どうして Aurora なのか? Motivation
1
Apache Aurora の始めかた 5 / 46
稼働率 = MTBF
MTBF+MTTR
平均故障間隔 Meam Time Between Failures
平均修理時間 Meam Time to Repaire
Availability
MTBFよりMTTRを減らす というアプローチが最近の オーケストレーションかな?
障害対応を楽にする自動化 (`・ω・́)
自分にとって自動化は仕事を楽にしたいというポジティブ なものよりも・・・
もうあんな思いはイヤだ! (‘A`)
障害で厭な気分をしたくないネガティブな所が根っこに… 何とか良いものがないか? というのが最近の興味です。
https://blog.twitter.com/2015/all-about-apache-aurora
そんな折 witter 社ブログで Aurora を知ったのが契機で サービスの安定稼働のために 使えるのでは?と考えます。 Dockerに対応したことも 興味を惹かれました。 動機不純です。
Apache Aurora の始めかた 9 / 46
投稿の要点
• 一万台規模に数百人のエンジニアが毎日デプロイ 自動化は極めて重要な課題
• サービスの維持には更新・便利さ・障害と直面 クラスタを安定稼働させるシステムとして、Apache Mesos をクラスタ監視に使う
• Twitter 社で 2010 年から開発 Bill Farmer 氏が開発開始。2013年にはオープンソースとして公開
• V.0.7.0 は Docker 対応
Apache Aurora とは? Introduction
2
Apache Aurora の始めかた 11 / 46
Apache Aurora
• http://aurora.incubator.apache.org/ オープンソースの開発コミュニティ、Apache License v2.0
• Apache Mesos 上で動作するスケジューラ “Apache Aurora is a Mesos framework for long-running services and cron jobs.”
• “Job”をPython形式のファイルで管理 同じ処理の繰り返し、コードで管理できる
Apache Aurora の始めかた 12 / 46
Apache Mesos とは?
• 分散システムの管理 kernel という位置付け APIでリソース管理やスケジューリングを行い、アプリケーションを動かす
• リソースを抽象化 CPU、メモリ、ストレージ
• 耐障害性、スケーラビリティを備える Zookeeper で Master-Slave の冗長化
http://mesos.apache.org/
Apache Aurora の始めかた 13 / 46
例えば、複数の物理・仮想サーバがあったとして
Apache Aurora の始めかた 14 / 46
アプリケーション A アプリケーション B
アプリケーション毎に、サーバの役割は固定されがち
Apache Aurora の始めかた 15 / 46
Apache Mesos
アプリケーション A アプリケーション B
それを、Mesos は必要とするリソースを抽象化します
Apache Aurora の始めかた 16 / 46
アプリケーション A アプリケーション B
この Mesos の仕組みを利用するのが Aurora
Zookeeper が Mesos Master クラスタを管理 Mesos
Master スタンバイ
Master スタンバイ
Master
Mesos Slave
TaskA
Mesos Slave
TaskA
Mesos Slave
TaskB
Mesos Slave
TaskB
Apache Aurora の始めかた 17 / 46
Job
Task 1 Task 2 Task N
Process 1,1
Process 1,2
Process 1,M
…
…
Process 2,1
Process 2,2
Process 2,M
…
Process N,1
Process N,2
Process N,M
…
Aurora N個のTaskを管理
Mesos M個のProcessを管理
Thermos
ジョブ、とは?
Apache Aurora の始めかた 19 / 46
Job Task Process
Process
Task Process Process
ジョブはこのような概念です
Apache Aurora の始めかた 20 / 46
Job『Webサーバ運用』 Task:環境構築
Task:本番稼働 Task:削除
Process: wgetでコードを取得 Process: gunzipで展開 Process: 設定ファイルの配置
Process: デーモンとして起動(ループ)
Process: プロセス停止 Process: ログファイル待避 Process: 不要ファイル削除
具体的な利用シーン例
Apache Aurora の始めかた 21 / 46
Job『カレー大作戦』 Task:資材調達
Task:調理
Task:食す
Process: スーパーに行く Process: 食材を買う、スパイスを買う Process: お金を払う Process: 家に持ち帰る
Process: 肉を炒める Process: 野菜を切る Process: 煮込む Process: 御飯を炊く Process: スパイスを調整する
Process: 食器を用意 Process: 盛り付ける Process: ニコニコ顔で完食する Process: 片付ける
カレーに例えると・・・
Apache Aurora の始めかた 22 / 46
他のフレームワークと比較
Apache Aurora Marathon Choronos
Job処理 ○ ○ ×
Cron風Job処理 ○ × ○
コードでの管理 ○ × ×
GUI管理画面 △ ( モニタのみ ) ○ ○
API ○ ○ ○
JSON REST I/F × ○ ○
開発言語 Java Scala Scala
URL http://aurora.incubator.apache.org/ https://mesosphere.github.io/marathon/ https://github.com/mesos/chronos
Apache Aurora を試すには? Let’s start tutorial
3
Apache Aurora の始めかた 24 / 46
動作理解に便利なチュートリアル • http://aurora.incubator.apache.org/documentation/latest/tutorial/
• 例:“Hello world” を実行するスケジューラ Aurora はジョブ、Mesos はタスク、Themos はプロセスを管理するのを学ぶ
• 環境構築に Vagrant を使用 ローカル PC の VirtualBox 上で、実行環境を自動構築
• 任意のジョブ・タスク・プロセスを生成可 Apache Mesos・Apache Aurora は動作済みなので、動作確認に専念
Apache Aurora の始めかた 25 / 46
OS ( Windows / MacOS X )
Oracle VM VirtualBox
Vagrant git, vagrant up
操作
Aurora 動作環境の仮想マシン
vagrant ssh
ログイン
Mesos Master
Mesos Slave
Observer Scheduler
http://192.168.33.7:5050 http://192.168.33.7:5051 http://192.168.33.7:8081 http://192.168.33.7:1338
ソースコード 仮想マシンイメージ
.aurora
Apache Aurora の始めかた 26 / 46
Tutorial 環境構築手順
1. VagrantとVirtualBox のセットアップ https://www.vagrantup.com/downloads.html
2. レポジトリ取得
3. Vagrantd でクラスタ起動、ログイン
$ git clone http://git.apache.org/incubator-aurora.git
$ cd incubator-aurora $ vagrant up $ vagrant ssh
非常に簡単です。Vagrantで 自動的に Apache Mesos や Aurora 環境を構築します。
Apache Aurora の始めかた 27 / 46
Scheduler - http://192.168.33.7:8081 Observer - http://192.168.33.7:1338
Mesos Master - http://192.168.33.7:5050 Mesos Slave - http://192.168.33.7:5051
Apache Mesos を含む各種インターフェースに対して アクセスできます。
Apache Aurora の始めかた 28 / 46
ジョブ作成
• ジョブとして実行する “hello_world.py” 作成 import sys import time def main(argv): SLEEP_DELAY = 10 # Python ninjas - ignore this blatant bug. for i in xrang(100): print("Hello world! The time is now: %s. Sleeping for %d secs" % ( time.asctime(), SLEEP_DELAY)) sys.stdout.flush() time.sleep(SLEEP_DELAY) if __name__ == "__main__": main(sys.argv)
ファイルを作成します。 公式チュートリアルはこの Python ですが他のものでも 大丈夫です。
Apache Aurora の始めかた 29 / 46
Aurora 設定用ファイル
• “hello_world.aurora” pkg_path = '/vagrant/hello_world.py' import hashlib with open(pkg_path, 'rb') as f: pkg_checksum = hashlib.md5(f.read()).hexdigest() install = Process( name = 'fetch_package', cmdline = 'cp %s . && echo %s && chmod +x hello_world.py' % (pkg_path, pkg_checksum)) hello_world = Process( name = 'hello_world', cmdline = 'python hello_world.py') hello_world_task = SequentialTask( processes = [install, hello_world], resources = Resources(cpu = 1, ram = 1*MB, disk=8*MB)) jobs = [ Service(cluster = 'devcluster', environment = 'devel', role = 'www-data', name = 'hello_world', task = hello_world_task) ]
拡張子は「.aurora」 内部の記述方法は Phthon 形式ですが、言語を知らなくても記述そのものは単純です。
Apache Aurora の始めかた 30 / 46
Aurora 設定
• “hello_world.aurora”
pkg_path = '/vagrant/hello_world.py' import hashlib with open(pkg_path, 'rb') as f: pkg_checksum = hashlib.md5(f.read()).hexdigest() install = Process( name = 'fetch_package', cmdline = 'cp %s . && echo %s && chmod +x hello_world.py' % (pkg_path, pkg_checksum)) hello_world = Process( name = 'hello_world', cmdline = 'python hello_world.py') hello_world_task = SequentialTask( processes = [install, hello_world], resources = Resources(cpu = 1, ram = 1*MB, disk=8*MB)) jobs = [ Service(cluster = 'devcluster', environment = 'devel', role = 'www-data', name = 'hello_world', task = hello_world_task) ]
Apache Aurora の始めかた 31 / 46
はじめてのジョブ実行
• “aurora” コマンドで実行 vagrant@aurora:~$ aurora job create devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora INFO] Creating job hello_world INFO] INFO] Checking status of devcluster/www-data/devel/hello_world Job create succeeded: job url=http://aurora.local:8081/scheduler/www-data/devel/hello_world
操作は CLI で実行します。
Apache Aurora の始めかた 32 / 46
http://192.168.33.7:8081/scheduler
ジョブがスケジューラに対し登録されたことがわかります
Apache Aurora の始めかた 33 / 46
クリックすると,ジョブ詳細確認ができます
Apache Aurora の始めかた 34 / 46
ですが、このチュートリアル 失敗します。。。 (敢えて失敗する流れです)
Apache Aurora の始めかた 35 / 46
画面を辿ると、標準エラーの 内容が確認できます。 純粋に文法上の間違いです。
Apache Aurora の始めかた 36 / 46
もう一度 hello_word.py を 編集して、「xrange」と 正しい記述にします。
Apache Aurora の始めかた 37 / 46
それから「aurora job update devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora」でジョブを更新すると 正常に「active」なタスクに なります。
Apache Aurora の始めかた 38 / 46
Apache Aurora の始めかた 39 / 46
標準出力も、正常な結果が このように表示されます。
Apache Aurora の始めかた 40 / 46
ポイント
• Auroraは、プレームワークの実行環境を提供 設定ファイルのなかで「Job」「Task」「Process」を定義
• 「Job」で「Task」を抽象化
• 「Task」は「Process」の抽象化
Apache Aurora の始めかた 41 / 46
Process Object の定義 • Themos システムでの挙動
bashで実行可能な形式
• 属性 ➡ ‘name’ … Unix ファイル名と同じルール、重複不可
➡ ‘cmdline’… bashコマンド
➡ ‘max_failures’… 最大失敗回数 defaut:1
➡ ‘daemon’…Trueはそのまま実行、default:False
➡ ‘ephemeral’…プロセス再実行までの時間、default:15s
➡ ‘final’…最後に実行されるProcess、default:False
Apache Aurora の始めかた 42 / 46
Task オブジェクトの定義
• Task で定義した内容が Mesos で処理
• 重要なkey ➡ ‘name’ … タスク名称
➡ ‘processes’…タスクで実行されるプロセス一覧
➡ ‘resources’ … 計算資源 • cpu – 浮動小数、タスクが必要とするコア数 • ram – タスクが必要な RAM バイト数 • disk – タスクが必要とするディスクバイト数
Apache Aurora の始めかた 43 / 46
次に読むべき文章 • Configuration Tutorial
➡ http://aurora.incubator.apache.org/documentation/latest/configuration-tutorial/
• Aurora User Guide ➡ http://aurora.incubator.apache.org/documentation/latest/user-guide/
まとめ conclusion
4
Apache Aurora の始めかた 45 / 46
まとめ
• AuroraはApache Mesos上で動くフレームワーク Marathon や chronos と同じような位置付け、インフラ部分を Mesos で抽象化
• “Job” 単位で ”Task” “Process”を管理する概念 ジョブの中に複数のタスク、そして実際のコマンドであるプロセスを指定
• コードでサービスやインフラを定義 設定ファイルは「.aurora」形式で、Python 言語の記述、CLI で実行
Conclusion
あとはチュートリアルを試す だけならとても簡単です。
Apache Aurora の始めかた 46 / 46
参考資料 • All about Apache Aurora | Twitter Blogs
➡ https://blog.twitter.com/2015/all-about-apache-aurora
• User Guide ➡ http://aurora.incubator.apache.org/documentation/latest/user-guide/
• Introduction to Apache Mesos ➡ http://www.slideshare.net/charmalloc/introductionapachemesosjstein20140714
• Datacenter Computing with Apache Mesos - BigData DC ➡ http://www.slideshare.net/pacoid/datacenter-computing-with-apache-mesos