KubernetesとMesos:Dockerのスケジューリングツールの違いを理解する

2015年4月10日(金)
冨永 善視(とみなが よしみ)

注目されるDockerのスケジューリングツール

Dockerには、基本機能だけでは自分自身がインストールされているホストのコンテナしか管理できず、複数ホストのコンテナを管理できないという問題がある。そのため、実際にサーバを複数台利用するような規模でDocker環境を運用することを考えると、コンテナのクラスタリングやスケジューリングなど、複数ホストにまたがってコンテナをオーケストレーションする仕組みが必須となる。

そのため、Docker環境の管理を行うスケジューリングツールが注目を集め、数多くの製品が登場しているが、その中で特に注目されているものに、KubernetesMesosがある。KubernetesとMesosは、複数ホストのコンテナを簡単に管理できるという点では共通しているが、機能の対象範囲には違いがある。

今回は、KubernetesとMesosの特徴と相違点について整理し、それぞれに適した使いどころについて紹介する。

Kubernetes vs. Mesos

KubernetesとMesosの基本情報は以下の通りとなる。

KubernetesとMesosの基本情報

製品名KubernetesMesos
開発元GoogleThe Apache Software Foundation
公式サイトhttp://kubernetes.io/http://mesos.apache.org/
特長複数のホストにまたがってDockerコンテナの管理、スケジューリングを可能にするホストのリソース消費量に応じて、効率的にDockerコンテナを配置する
開発言語GoC++、Java、Scala、Python
ライセンスApache License 2.0Apache License 2.0
関連ツールetcd
flannel
ZooKeeper
Marathon
Chronos

KubernetesもMesosも、単体ではシンプルな機能しか持っていないため、実際に複数ホストをまたいでコンテナを管理する際は、関連ツールと組み合わせて利用する。たとえば、どちらもコンテナの情報はKVSで管理しており、Kubernetesはetcd、MesosはZooKeeperを利用している。複数ホストのコンテナを管理する上で、KubernetesとMesosで利用できる機能は、以下の通りとなる。

KubernetesとMesosが備える機能

製品名KubernetesMesosKubernetes+flannelMesos+Marathon
コンテナのグルーピング×
コンテナのスケールアウト×
コンテナのオートスケール××××
異常終了したコンテナの再配置×
HTTPロードバランサ××
ホストをまたぐコンテナ同士の通信×××
ホストのリソース監視××
ホストのリソースマネジメント××
Web UIでの管理××

Kubernetesの使いどころ

Kubernetesの特徴は、同じ役割をもつコンテナのグループ(Pod)に対して、1つのエンドポイント(Service)を持てる点である。Serviceはロードバランサのような働きを持っており、Serviceへのアクセスをラウンドロビンで各Podに転送する(図1)。

これにより、同じ役割のコンテナをスケールアウトしたり、コンテナが稼動するホストが変化したりしても、同一のURLでコンテナのアプリケーションにアクセスし続けることができる。

また、複数のホストをまたぐことによって生じるDockerのネットワーク問題は、関連ツールであるflannelが解決してくれる。通常Dockerは、ホストごとにプライベートなネットワークを構築するため、ホストが異なるコンテナ同士は直接通信できない。だがflannelを利用することで、ホストをまたいだオーバーレイネットワーク上にDockerのネットワークを構築することができ、ホストが異なるコンテナ同士でも通信が行える。

Kubernetesのhttpロードバランサ機能

図1:Kubernetesのhttpロードバランサ機能

以上のように、Kubernetesはコンテナやホストが複数台になることで発生する問題を上手に解決してくれる。このことから、たとえば以下のような環境に適している。

  • Web、AP、DBのようなクラスタ構成のシステム
  • HTTPロードバランサを利用したい場合
  • コンテナを同一のサブネットで稼動させたい場合

余談ではあるが、Google Cloud PlatformのサービスであるGoogle Container Engine(GKE)では、Kubernetesを利用したコンテナ管理機能が提供されており、Kubernetesの機能に加え、オートスケールや監視などもサポートされている。

Mesosの使いどころ

Mesosの特徴は、複数のホストを1つの巨大なマシンのように扱える点である。Mesosの公式サイトでは、「Mesosは分散システムのカーネルである」という表現がなされており、複数ホストのCPUやメモリ、ディスクを抽象化して、1つのリソースプールとして扱える(図2)。Mesosが管理するホスト群を、あたかもマルチコアのCPUのように扱うことができると考えると、イメージしやすいかもしれない。

Mesos上でコンテナを稼動させるには、関連ツールのMarathonやChronosのようなフレームワークが必要となる。MarathonはLinuxにおけるsystemdやupstartのような存在で、コンテナの起動・終了の管理や設定を行うことができる。一方のChronosは、cronのような存在で、定期的なジョブ実行を設定できる。
起動されるコンテナはMesosによって適切なホスト上に配置されるので、各ホストのリソース消費量に気を使う必要なく、必要なだけコンテナをスケールアウトさせられる。

Mesosのリソース管理情報

図2:Mesosのリソース管理情報

以上のように、Mesosは複数のホストをあたかも1つのマシンであるかのように扱え、ホストごとのリソース消費量に気を使う必要はなくなる。このことから、以下のような環境に適している。

  • バッチ処理など一度に大量のリソースを必要とする処理
  • 定期的にジョブを実行したい場合
  • 性能の違うホストマシンが混在している環境

Kubernetesと Mesosを組み合わせる

ここまででわかるように、KubernetesとMesosの両者はコンテナ管理において異なる役割を担っていると言える。そのため、Dockerのスケジューリングツールとしてどちらか一方を選ぶということではなく、必要なら両者を組み合わせて利用することも考えられる。実際に、MesosphereがMesos上で動作するフレームワークとして、Kubernetesを利用するチュートリアルなどが公開されている。

その他のDockerスケジューリングツール

今回紹介したKubernetesとMesos以外にも、Dockerのスケジューリングツールが多数登場している。たとえば、Docker社のDocker Swarmや、CoreOSに標準搭載されているfleetなどがある。また、GKEやAmazon EC2 Container Serviceなど、クラウド上でコンテナを管理するサービスも登場している。

Dockerのスケジューリングツールは、どれもまだ登場してから日が浅く、機能が不十分なものも多い。しかし、開発は非常に活発に行われており、必要な機能は続々と実装されていくと考えている。たとえば、ホストごとにクォータをかける機能などが提供されると予測される。今後の動向に引き続き注目していきたい。

次回は、Dockerが利用するファイルシステムの性能と改善方法について検証を行う予定だ。この点は、前回の検証で見られた性能劣化の原因と推察されている。

著者
冨永 善視(とみなが よしみ)
TIS株式会社

戦略技術センター
デザイン指向クラウドオーケストレーションソフトウェア「CloudConductor」の開発、およびクラウド関連技術の調査・検証に従事。OpenStackやZabbixといったOSSの調査・検証を行う他、プロジェクトチームの開発環境の構築・管理を担当している。
>TIS株式会社

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています