ApacheのMesosとGoogleのKubernetesの違いは何ですか?どちらもサーバークラスタ管理ソフトウェアであることを理解しています。主な違いがどこにあるか誰でも詳しく説明できますか?いつどのフレームワークが好まれますか?
Mesosphereの上でKubernetesを使用する理由は何ですか?
ApacheのMesosとGoogleのKubernetesの違いは何ですか?どちらもサーバークラスタ管理ソフトウェアであることを理解しています。主な違いがどこにあるか誰でも詳しく説明できますか?いつどのフレームワークが好まれますか?
Mesosphereの上でKubernetesを使用する理由は何ですか?
回答:
Kubernetesは、「Googleスタイル」のクラスター管理機能を仮想マシンの世界、つまり「オンメタル」シナリオにもたらすオープンソースプロジェクトです。これは、管理対象の軽量コンピューティング「ノード」を提供する最新のオペレーティングシステム環境(CoreOSやRed Hat Atomicなど)で非常にうまく機能します。それはGolangで書かれており、軽量、モジュール式、ポータブルで拡張可能です。私たち(Kubernetesチーム)は、さまざまなテクノロジー企業(MesosオープンソースプロジェクトをキュレートするMesosphereを含む)と協力して、コンピューティングクラスタと対話する標準的な方法としてKubernetesを確立しています。アイデアは、Googleでの経験に基づいて、クラスターアプリケーションを構築する必要のある人々が見るパターンを再現することです。これらの概念の一部は次のとおりです。
そのため、Kubernetesだけで、シンプルで使いやすく、移植可能で拡張可能なものになり、可能な限り最軽量の方法で管理するものに「クラスター」を名詞として追加します。クラスターでアプリケーションを実行し、個々のマシンについて心配するのをやめます。この場合、クラスターはVMと同じように柔軟なリソースです。これは論理計算ユニットです。それを上げて、使用して、サイズを変更し、すばやく簡単に下げます。
Mesosでは、基本的なビジョンの面でかなりの重複がありますが、製品はライフサイクルのかなり異なる段階にあり、スイートスポットが異なります。Mesosは、多数の異なるマシンを論理コンピューターに結び付ける分散システムカーネルです。これは、大きな静的コンピューティングクラスタを作成するために多くの物理リソースを所有する世界のために生まれました。多くの最新のスケーラブルなデータ処理アプリケーションがMesos(Hadoop、Kafka、Spark)で適切に実行され、新しい時代のコンテナーパッケージ化されたアプリと共に、すべてを同じ基本リソースプールで実行できるので、すばらしいことです。 。Kubernetesプロジェクトよりもやや重いですが、Mesosphereのような人々の仕事のおかげで、管理がますます簡単になっています。
現在、本当に興味深いのは、MesosがKubernetesの概念の多くを追加し、Kubernetes APIをサポートするように現在調整されていることです。したがって、必要な場合は、Kubernetesアプリのより多くの機能(高可用性マスター、より高度なスケジューリングセマンティクス、非常に多くのノードにスケーリングする機能)へのゲートウェイとなり、本番ワークロード(Kubernetesの実行に適しています)まだアルファ状態です)。
尋ねられたとき、私は言う傾向があります:
Kubernetesは、クラスタリングの世界に慣れていない場合に最適な場所です。これは、タイヤをキックしてクラスター指向開発の実験を開始するための最も速く、簡単で、最も軽い方法です。多くの異なるプロバイダー(Microsoft、IBM、Red Hat、CoreOs、MesoSphere、VMWareなど)でサポートされているため、非常に高いレベルの移植性を提供します。
既存のワークロード(Hadoop、Spark、Kafkaなど)がある場合、Mesosはそれらのワークロードを相互にインターリーブし、Kubernetesアプリを含むいくつかの新しいものを混ぜることができるフレームワークを提供します。
Mesosは、コミュニティによってKubernetesフレームワークにまだ実装されていない機能が必要な場合に、エスケープバルブを提供します。
どちらのプロジェクトも、データセンターまたはクラウドのコンテナ内でアプリケーションを簡単にデプロイおよび管理できるようにすることを目的としています。
Mesosの上にアプリケーションをデプロイするために、MarathonまたはKubernetes for Mesosを使用できます。
マラソンは、cgroupとDockerコンテナーでLinuxサービスを実行するためのクラスター全体のinitおよび制御システムです。マラソンには、さまざまなカナリアデプロイ機能があり、非常に成熟したプロジェクトです。
MarathonはMesosの上で実行されます。Mesosは、非常にスケーラブルで、戦闘テスト済みで、柔軟なリソースマネージャーです。マラソンは、多くの実稼働環境でスケーリングおよび実行できることが証明されています。
MesosおよびMesosphereテクノロジースタックは、既存のLinuxワークロードを実行するためのクラウドのような環境を提供しますが、新しい分散システムを構築するためのネイティブ環境も提供します。
Mesosは、データセンターに対して直接プログラミングするための完全なAPIを備えた分散システムカーネルです。基盤となるハードウェア(ベアメタルやVMなど)を抽象化し、リソースを公開します。メッセージパッシング、タスク実行などの分散アプリケーション(SparkはもともとMesosアプリ、Chronosなど)を作成するためのプリミティブが含まれています。したがって、まったく新しいアプリケーションが可能になります。Apache Sparkは、最初にMesos用に作成された(Mesos専門用語では)新しいフレームワークの一例です。これにより、非常に高速な開発が可能になりました。Sparkの開発者は、ノード間でタスクを分散するためにネットワーキングを心配する必要がありませんでした。これは、Mesosのコアプリミティブであるためです。
私の知る限りでは、Kubernetesは今日の本番環境のデプロイではGoogle内部で使用されていません。本番環境では、GoogleはOmega / Borgを使用します。これは、Mesos / Marathonモデルに非常に似ています。ただし、Mesosを基盤として使用することの素晴らしい点は、KubernetesとMarathonの両方をその上で実行できることです。
マラソンに関するその他のリソース:
KubernetesとMesosは天国で行われた試合です。Kubernetesは、ポッド(同じ場所に配置されたコンテナーのグループ)の抽象化と、サービスの検出、負荷分散、レプリケーション制御のためのポッドラベルを有効にします。Mesosは、クラスター内のノード全体のポッドにきめ細かなリソース割り当てを提供し、Kubernetesを同じクラスターリソースで実行されている他のフレームワークとうまく連携させることができます。
MesosとKubernetesの両方を使用して、マシンのクラスターを管理し、ハードウェアを抽象化できます。
Mesosは、設計上、スケジューラを提供しません(プロセスを実行する場所とタイミング、およびプロセスが失敗した場合の対処方法を決定するため)。MarathonやChronosなどを使用するか、独自に作成できます。
Kubernetesはすぐにスケジューリングを行い、Mesosのスケジューラとして使用できます(ここで私が間違っている場合は修正してください)。これらを一緒に使用できます。Mesosは、同じクラスターを共有する複数のスケジューラーを持つことができるため、理論的には、同じハードウェア上でkubernetesとchronosを一緒に実行できます。
非常に単純化して:コンテナーのスケジュールを制御したい場合はMesosを使用します。
「私はどちらもサーバークラスタ管理ソフトウェアであることを理解しています。」
このステートメントは完全に真実ではありません。Kubernetesはサーバークラスターを管理せず、最小限の手間と露出で連携するようにコンテナーを調整します。Kubernetesを使用すると、アプリケーションの一部を「デプロイ」または「デーモンセット」(およびその他いくつか)によって配信され、サービスを介して外部に公開される「ポッド」(1つ以上のコンテナ)として定義できます。ただし、Kubernetesはクラスタ自体を管理しません(クラスタをプロビジョニング、構成、スケーリングできるツールはありますが、Kubernetes自体の一部ではありません)。
一方、Mesosは "クラスター管理"に近づいています。これは、コンテナーのスケジューリングだけでなく、どこで何が実行されているかを制御できるという点です。Mesosは、クラスターサーバーで実行されているスタンドアロンソフトウェアも管理します。主にKubernetesの代替として使用されますが、MesosはKubernetesと簡単に連携できます。機能が多くの領域で重複する一方で、Mesosはより多くの機能を実行できます(ただし、重複部分ではKubernetesの方が優れている傾向があります)。