apache auroraの始めかた

46
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

Upload: masahito-zembutsu

Post on 15-Jul-2015

7.090 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Apache Auroraの始めかた

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

Page 2: Apache Auroraの始めかた

Apache Aurora の始めかた 2 / 46

今日の内容

• なぜ Apache Aurora なのか?

• Apache Aurora とは?

• チュートリアルを試すには?

• まとめ

Topics

Auroraを実際に使うときの日本語の情報が少ないため、 自分が分からなかった所を 整理してみました。

Page 3: Apache Auroraの始めかた

Apache Aurora の始めかた 3 / 46

まとめ

• AuroraはApache Mesos上で動くフレームワーク Marathon や chronos と同じような位置付け、インフラ部分を Mesos で抽象化

• “Job” 単位で ”Task” “Process”を管理する概念 ジョブの中に複数のタスク、そして実際のコマンドであるプロセスを指定

• コードでサービスやインフラを定義 設定ファイルは「.aurora」形式で、Python 言語の記述、CLI で実行

Conclusion

バッチだけでなくサービスやcronで実行するコマンドを 「Job」と定義して使います。

Page 4: Apache Auroraの始めかた

どうして Aurora なのか? Motivation

1

Page 5: Apache Auroraの始めかた

Apache Aurora の始めかた 5 / 46

稼働率 = MTBF

MTBF+MTTR

平均故障間隔 Meam Time Between Failures

平均修理時間 Meam Time to Repaire

Availability

MTBFよりMTTRを減らす というアプローチが最近の オーケストレーションかな?

Page 6: Apache Auroraの始めかた

障害対応を楽にする自動化 (`・ω・́)

自分にとって自動化は仕事を楽にしたいというポジティブ なものよりも・・・

Page 7: Apache Auroraの始めかた

もうあんな思いはイヤだ! (‘A`)

障害で厭な気分をしたくないネガティブな所が根っこに… 何とか良いものがないか? というのが最近の興味です。

Page 9: Apache Auroraの始めかた

Apache Aurora の始めかた 9 / 46

投稿の要点

• 一万台規模に数百人のエンジニアが毎日デプロイ 自動化は極めて重要な課題

• サービスの維持には更新・便利さ・障害と直面 クラスタを安定稼働させるシステムとして、Apache Mesos をクラスタ監視に使う

• Twitter 社で 2010 年から開発 Bill Farmer 氏が開発開始。2013年にはオープンソースとして公開

• V.0.7.0 は Docker 対応

Page 10: Apache Auroraの始めかた

Apache Aurora とは? Introduction

2

Page 11: Apache Auroraの始めかた

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形式のファイルで管理 同じ処理の繰り返し、コードで管理できる

Page 12: Apache Auroraの始めかた

Apache Aurora の始めかた 12 / 46

Apache Mesos とは?

• 分散システムの管理 kernel という位置付け APIでリソース管理やスケジューリングを行い、アプリケーションを動かす

• リソースを抽象化 CPU、メモリ、ストレージ

• 耐障害性、スケーラビリティを備える Zookeeper で Master-Slave の冗長化

http://mesos.apache.org/

Page 13: Apache Auroraの始めかた

Apache Aurora の始めかた 13 / 46

例えば、複数の物理・仮想サーバがあったとして

Page 14: Apache Auroraの始めかた

Apache Aurora の始めかた 14 / 46

アプリケーション A アプリケーション B

アプリケーション毎に、サーバの役割は固定されがち

Page 15: Apache Auroraの始めかた

Apache Aurora の始めかた 15 / 46

Apache Mesos

アプリケーション A アプリケーション B

それを、Mesos は必要とするリソースを抽象化します

Page 16: Apache Auroraの始めかた

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

Page 17: Apache Auroraの始めかた

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

Page 18: Apache Auroraの始めかた

ジョブ、とは?

Page 19: Apache Auroraの始めかた

Apache Aurora の始めかた 19 / 46

Job Task Process

Process

Task Process Process

ジョブはこのような概念です

Page 20: Apache Auroraの始めかた

Apache Aurora の始めかた 20 / 46

Job『Webサーバ運用』 Task:環境構築

Task:本番稼働 Task:削除

Process: wgetでコードを取得 Process: gunzipで展開 Process: 設定ファイルの配置

Process: デーモンとして起動(ループ)

Process: プロセス停止 Process: ログファイル待避 Process: 不要ファイル削除

具体的な利用シーン例

Page 21: Apache Auroraの始めかた

Apache Aurora の始めかた 21 / 46

Job『カレー大作戦』 Task:資材調達

Task:調理

Task:食す

Process: スーパーに行く Process: 食材を買う、スパイスを買う Process: お金を払う Process: 家に持ち帰る

Process: 肉を炒める Process: 野菜を切る Process: 煮込む Process: 御飯を炊く Process: スパイスを調整する

Process: 食器を用意 Process: 盛り付ける Process: ニコニコ顔で完食する Process: 片付ける

カレーに例えると・・・

Page 22: Apache Auroraの始めかた

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

Page 23: Apache Auroraの始めかた

Apache Aurora を試すには? Let’s start tutorial

3

Page 24: Apache Auroraの始めかた

Apache Aurora の始めかた 24 / 46

動作理解に便利なチュートリアル • http://aurora.incubator.apache.org/documentation/latest/tutorial/

• 例:“Hello world” を実行するスケジューラ Aurora はジョブ、Mesos はタスク、Themos はプロセスを管理するのを学ぶ

• 環境構築に Vagrant を使用 ローカル PC の VirtualBox 上で、実行環境を自動構築

• 任意のジョブ・タスク・プロセスを生成可 Apache Mesos・Apache Aurora は動作済みなので、動作確認に専念

Page 25: 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

Page 26: Apache 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 環境を構築します。

Page 27: Apache 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 を含む各種インターフェースに対して アクセスできます。

Page 28: Apache Auroraの始めかた

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 ですが他のものでも 大丈夫です。

Page 29: Apache Auroraの始めかた

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 形式ですが、言語を知らなくても記述そのものは単純です。

Page 30: Apache Auroraの始めかた

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) ]

Page 31: Apache Auroraの始めかた

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 で実行します。

Page 32: Apache Auroraの始めかた

Apache Aurora の始めかた 32 / 46

http://192.168.33.7:8081/scheduler

ジョブがスケジューラに対し登録されたことがわかります

Page 33: Apache Auroraの始めかた

Apache Aurora の始めかた 33 / 46

クリックすると,ジョブ詳細確認ができます

Page 34: Apache Auroraの始めかた

Apache Aurora の始めかた 34 / 46

ですが、このチュートリアル 失敗します。。。 (敢えて失敗する流れです)

Page 35: Apache Auroraの始めかた

Apache Aurora の始めかた 35 / 46

画面を辿ると、標準エラーの 内容が確認できます。 純粋に文法上の間違いです。

Page 36: Apache Auroraの始めかた

Apache Aurora の始めかた 36 / 46

もう一度 hello_word.py を 編集して、「xrange」と 正しい記述にします。

Page 37: Apache Auroraの始めかた

Apache Aurora の始めかた 37 / 46

それから「aurora job update devcluster/www-data/devel/hello_world /vagrant/hello_world.aurora」でジョブを更新すると 正常に「active」なタスクに なります。

Page 38: Apache Auroraの始めかた

Apache Aurora の始めかた 38 / 46

Page 39: Apache Auroraの始めかた

Apache Aurora の始めかた 39 / 46

標準出力も、正常な結果が このように表示されます。

Page 40: Apache Auroraの始めかた

Apache Aurora の始めかた 40 / 46

ポイント

• Auroraは、プレームワークの実行環境を提供 設定ファイルのなかで「Job」「Task」「Process」を定義

• 「Job」で「Task」を抽象化

• 「Task」は「Process」の抽象化

Page 41: Apache Auroraの始めかた

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

Page 42: Apache Auroraの始めかた

Apache Aurora の始めかた 42 / 46

Task オブジェクトの定義

• Task で定義した内容が Mesos で処理

• 重要なkey ➡ ‘name’ … タスク名称

➡ ‘processes’…タスクで実行されるプロセス一覧

➡ ‘resources’ … 計算資源 • cpu – 浮動小数、タスクが必要とするコア数 • ram – タスクが必要な RAM バイト数 • disk – タスクが必要とするディスクバイト数

Page 43: Apache Auroraの始めかた

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/

Page 44: Apache Auroraの始めかた

まとめ conclusion

4

Page 45: Apache Auroraの始めかた

Apache Aurora の始めかた 45 / 46

まとめ

• AuroraはApache Mesos上で動くフレームワーク Marathon や chronos と同じような位置付け、インフラ部分を Mesos で抽象化

• “Job” 単位で ”Task” “Process”を管理する概念 ジョブの中に複数のタスク、そして実際のコマンドであるプロセスを指定

• コードでサービスやインフラを定義 設定ファイルは「.aurora」形式で、Python 言語の記述、CLI で実行

Conclusion

あとはチュートリアルを試す だけならとても簡単です。

Page 46: Apache Auroraの始めかた

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