コンテナオーケストレーションエンジン (COE) は、スケジューリング、ロードバランシング、スケーリング、ネットワーキング、高可用性 (HA) の確保、ログ管理などの運用タスクを自動化することで、コンテナ化されたワークロードの管理を容易にします。KubernetesとApache Mesosは、最も普及しているCOEの2つです。
これら2つのテクノロジーは、コンテナ管理に対してそれぞれ異なるアプローチを取っています。Kubernetesは、純粋にコンテナオーケストレーターとして機能します。Mesosは「データセンター向けのオペレーティングシステム」のようなものです。
この記事では、KubernetesとMesosについて説明し、主な機能を比較します。最初にCOEについて紹介し、COEがコンテナの管理に不可欠な理由について説明します。
コンテナオーケストレーションエンジンが必要な理由
今日のほとんどの分散アプリケーションは、コンテナ上に構築されています。コンテナは必要なリソースが少なく、アプリケーションを速く安全に開発するのに役立ちます。
10個や20個のコンテナの管理は簡単ですが、分散ネットワーク全体のコンテナの数が数百数千に増えるとチームはすぐに圧倒されることになります。コンテナは軽量で短命ですが、大規模クラスターで実行すると、同時に調整が必要な多くの可動部が発生します。
さらに、ほとんどの本番コンテナ環境は複雑です。複数のオペレーティングシステム(またはカーネルバージョンの異なる同一のOS)を実行し、ネットワークおよびセキュリティ設定が非常に複雑になっていることがあります。マルチクラウド環境やハイブリッド環境であれば、複雑さはさらに増加します。
そこで登場するのがCOEです。
COEは、コンテナ管理に関連する次のようなタスクを単純化、自動化します。
- 展開
- ロードバランシング
- コンテナスケジューリング
- リソース割り当て
- パフォーマンス監視
- ネットワークの設定
自動化によってコンテナ化された大規模環境の実行が大幅に簡単になることで、DevOpsチームの自由度が高まり、さらに付加価値の高いタスクに従事できるようになります。
COEは、ヘルスチェックの自動化によってアプリケーションの可用性も高めます。ロードバランシングにより、リクエストが正常なコンテナインスタンスに自動的にルーティングされ、自動スケーリングにより、現在の負荷を処理するのに十分な数のコンテナが使用可能になります。
KubernetesとMesosの簡単な紹介
Kubernetesは、2014年にGoogleによってリリースされたコンテナ管理およびオーケストレーションシステムです。Dockerの信頼性の下、Googleは、コンテナの大規模な展開とスケジュール、クラスターリソースの管理、HAの実装、アプリケーショントラフィックのルーティングのためのKubernetesを開発しました。
現在、大手を含むほとんどのクラウドサービスプロバイダーは、Kubernetesに対応しており、Kubernetesでホストされるワークロードを実行するためのインフラストラクチャとそれらの統合を提供しています。
Kubernetesの主な機能は次のとおりです。
- 自動スケーリング
- ストレージオーケストレーション
- ボリューム管理
- シークレットと設定の管理
- 自動ロールバック
- バッチ実行
- サービス検出
- 自動ビンパッキング
Kubernetesは、DevOpsコミュニティから強く支持されており、多くのベンダーは、Kubernetesに付加機能を追加する無料または商用のアプリケーションを提供しています。
Mesosは、2009 年にカリフォルニア大学バークレー校の博士課程の学生によって作成された分散カーネルです。オンプレミスまたはクラウドテナンシーで実行されているマシン(物理と仮想の両方)のCPU、メモリ、ストレージなどの演算リソースを抽象化します。Mesosカーネルは分散環境の各マシンで実行され、コンテナ化ワークロードと非コンテナ化ワークロードはどちらも、Mesos APIを使用してリソース管理とスケジューリングを行えます。
この記事でMesosとKubernetesを比較する際は、Mesos + Marathonを指します。Marathonは、Mesosphereのデータセンターオペレーティングシステム (DC/OS) およびApache Mesos用のプラグインです。ユーザーがコンテナを簡単に管理できるようにします。
MesosとMarathonの組み合わせには次のような機能があります。
- API
- 線形的なスケーラビリティ
- プラガブルアイソレーション
- クロスプラットフォームサポート
- 2段階のスケジューリング
- フォールトトレランス
- ZooKeeperを使用した複製マスター
- 多言語サポート
Mesosは、Twitter、Netflix、Airbnbなどのテックジャイアントに人気の選択肢です。
KubernetesとMesos:機能の比較
COEプラットフォームを比較評価する際に考慮すべき最も重要な要因には、高可用性、ロードバランシング、自動スケーリング、ストレージ、ネットワーキングなどがあります。
高可用性
Kubernetesポッドは複数のノード(VMおよび物理サーバー)に複製できます。クラスターノードの1つに障害が発生しても、アプリケーションがオンラインを維持できるようになります。
Kubernetesコントロールプレーンは、ノードの正常性に基づいて、クラスター全体のポッドとワーカーノードを管理します。Kubernetesはスケジューリングに加えて、障害の検知と対応も行います。Kubernetesを高可用性にするには、複数の主要アーキテクチャコンポーネント(複数のマスターやetcdレプリカなど)から構成されるスタック化または外部etcdトポロジーを実装します。
Mesosの場合、可用性を高めるための複数のMesosエージェントで構成されるクラスター上でアプリケーションが実行されます。Mesosを高可用性にするには、3つから5つのマスター、1つのリーダー、残りのノードをバックアップとして実装します。Apache ZooKeeperがリーダーを選出し、マスター、スレーブ、スケジューラードライバーを自動的に検知します。
ロードバランシング
Kubernetesは「サービス」(名前が共通のポッドのグループ)を使用してポッドを外部に公開します。これにより、サービスはハードコード化されたIPアドレスがなくても相互に動的に検出されます。サービスはポッドへの接続を調整することで、ロードバランシング機能を提供します。
Kubernetesでは、次のようなさまざまなロードバランシング戦略を実装することができます。
- ラウンドロビン
- Kube-proxy L4ラウンドロビンロードバランシング
- L7ラウンドロビンロードバランシング
- コンシステントハッシング/リングハッシュ
Mesos-DNSはアプリケーションに基本的なロードバランシングサービスを提供します。各MesosタスクのSRVレコードを生成し、アプリのマシンの正しいIPアドレスとポート番号に変換します。Marathon-lbもロードバランシングを円滑にするのに役立ちます。
Mesosは次のような高度な機能をサポートしています。
- スティッキー接続
- SSLオフロード
- VHostベースのロードバランシング(アプリケーションごとに個別にVMを指定可能)
自動スケーリング
Kubernetesでは、展開を使用してポッドの目標数を定義できます。CPUやメモリの使用率などリソースメトリックのしきい値を定義して、自動スケーリングをトリガーすることもできます。
Mesosは、コンテナの数を継続的に監視し、障害が発生した場合は別のスレーブノードにコンテナをスケジュールします。リソースメトリックを使用した自動スケーリングをネイティブにサポートしてはいませんが、いくつかのコミュニティサポートのコンポーネントがあります。
ストレージ
Kubernetesは、短期ストレージとして、emptyDir、configMap、downwardAPI、CSIエフェメラルなどの非永続的なエフェメラルボリュームをサポートしています。
また、iSCSI、NFS、FCなどの永続ストレージ(ファイルまたはブロック)と、AWSやAzureで利用できるようなクラウドストレージもサポートしています。Kubernetesがホストするコンテナで実行されているアプリケーションは、Kubernetesがレイヤーを抽象化しているため、ストレージと直接通信することはありません。
Mesosは、ステートフルアプリケーション向けに予約されたリソース上の永続ローカルストレージをサポートしています。ボリュームがノードにローカルで作成されるため、コンテナは同一のノードで実行される必要があります。
Mesosは、永続外部ストレージをサポートしていますが、リソース管理をバイパスするため、クォータ制御、リソースの予約、フェアシェアリングの実施が困難になります。
ネットワーキング
Kubernetesはポッドに一意のIPを割り当てるため、コンテナポートをホストポートにマッピングする必要がなくなります。ポッド用のネットワークとサービス用のネットワークから構成されるフラットなネットワークを運用することになります。ポッドは他のポッドやサービスと自由に通信できます。IPテーブルがポッド間の接続性を制御し、ほとんどのネットワーキングルールとポート転送ルールを処理します。
Mesosがサポートする2種類のネットワーキング:コンテナ単位のIPとネットワークポートマッピングがあります。コンテナはデフォルトではIPを取得しませんが、Calico統合を使用すると、すべてのMesosコンテナが独自のIPを取得します。これによりポートの競合を防ぎ、動的なポート割り当てを不要にし、DNS Aレコードベースのサービス検出が可能になります。コンテナがローカルホスト上で相互に通信することはできなくなります。
すべてをログに記録、すべてに対する回答 - 無料
Falcon LogScale Community Edition(旧称Humio)は、クラウド向けの最新のログ管理プラットフォームを無料で提供します。ストリーミングデータ取り込みを活用して、分散システム全体を即座に可視化し、インシデントを防止および解決します。
無料ですぐにご使用可能なFalcon LogScale Community Editionには、次のものが含まれています。
- 1日あたり最大16GBの取り込み
- 7日間の保持期間
- クレジットカードは不要です
- トライアル期間なしの継続的なアクセス
- インデックスフリーのログ記録、リアルタイムのアラート、ライブダッシュボード
- 新しいパッケージをビルドするためのガイドを含む、マーケットプレイスとパッケージへのアクセス
- アクティブコミュニティの情報とコラボレーション