Kubernetes vs Docker Swarm: コンテナオーケストレーションツールの比較

Kubernetes vs Docker Swarm: コンテナオーケストレーションツールの比較

  • ITOps・DevOps
6分で読めます 更新日 Nov 11, 2020

ポイント: KubernetesとDocker Swarmは、クラスター全体でアプリケーション管理を自動化する主要なコンテナオーケストレーションツールです。Kubernetesは複雑で高需要なアプリケーションに最適であり、Docker Swarmは迅速なデプロイのためのシンプルさを提供します。

  • Kubernetesはオープンソースで機能が豊富で、Cloud Native Computing Foundationによってサポートされています。
  • Docker SwarmはDockerにネイティブで、使いやすさと迅速なセットアップを強調しています。

アプリケーションをスケールでデプロイする際には、すべてのアーキテクチャコンポーネントを現在および将来の戦略を考慮して計画し、調整する必要があります。コンテナオーケストレーションツールは、複数のクラスターにわたるアプリケーションマイクロサービスの管理を自動化することでこれを実現します。最も人気のあるコンテナオーケストレーションツールの2つはKubernetesとDocker Swarmです。

この記事では、KubernetesとDocker Swarmの主要な機能と違いを探り、あなたの技術スタックに最適なものを選択できるようにします。

KubernetesとDocker Swarmの違い

Kubernetesの概要

Kubernetesロゴ

Kubernetesは、コンテナ化されたアプリケーションのスケーリング、デプロイ、および管理を自動化するオープンソースのクラウドネイティブインフラストラクチャツールです。

Googleが最初にKubernetesを開発し、最終的にはCloud Native Computing Foundation (CNCF)に引き渡して強化と維持を行っています。開発者にとってのトップ選択肢の一つであるKubernetesは、以下の利点を持つ機能豊富なコンテナオーケストレーションプラットフォームです:

  • CNCFによる定期的な更新
  • 世界中のコミュニティからの毎日の貢献

Docker Swarmの概要

Docker Swarmは、Dockerプラットフォームにネイティブです。Dockerは、コンテナ化されたアプリケーションのマイクロサービスを複数のクラスターにわたって展開することで、さまざまな実行環境におけるアプリケーションの効率と可用性を維持するために開発されました。

可用性

この記事で見るDocker Swarmは、Dockerにネイティブなコンテナオーケストレーションツールであり、同じコンテナを共有する複数のノードでアプリケーションをシームレスに実行できるようにします。基本的に、Docker Swarmモデルを使用して、Docker上のノードのクラスターを効率的に管理、デプロイ、およびスケールします。

KubernetesとDocker Swarmはどちらも以下のための効果的なソリューションです:

  • 大規模なアプリケーションのデプロイ
  • 実装
  • 管理

両モデルはアプリケーションをコンテナに分割し、アプリケーション管理とスケーリングの効率的な自動化を可能にします。これらの違いの一般的な概要は次のとおりです:

  • Kubernetesはオープンソースでモジュール式のオーケストレーションに焦点を当て、高需要のアプリケーションに対する効率的なコンテナオーケストレーションソリューションを提供します。
  • Docker Swarmは使いやすさを強調し、迅速にデプロイできて管理しやすいシンプルなアプリケーションに最も適しています。

さて、これらのクラウドオーケストレーション技術がどのように動作するかの基本的な違いを見ていきましょう。各セクションでは、最初にK8sを見てからDocker Swarmを見ていきます。

インストール

複数のインストールオプションがあるKubernetesは、任意のプラットフォームに簡単にデプロイできますが、インストール前にプラットフォームとクラウドコンピューティングの基本的な理解があることを推奨します。

Kubernetesのインストールには、Kubernetesコマンドラインインターフェース(CLI)であるkubectl、のダウンロードとインストールが必要です:

  • Linuxでは、curlを使用して、ネイティブまたは他のパッケージ管理手続きとしてスナップアプリケーションとしてkubectlをインストールできます。
  • MacOSでは、kubectlをcurl、Homebrew、またはMacPortsを使用してインストールできます。 
    • Windowsでは、kubectlをcurl、Powershell Galleryパッケージマネージャー、Chocolateyパッケージマネージャー、またはScoopコマンドラインインストーラーを含む複数のオプションを使用してインストールできます。

    詳細なkubectlインストール手順はこちらで確認できます。

    Kubernetesと比較して、Docker Swarmのインストールは比較的簡単です。Dockerエンジンがマシンにインストールされると、Docker Swarmのデプロイは以下のように簡単です:

    • ホストにIPアドレスを割り当てる
    • それらの間でプロトコルとポートを開く

    Swarmを初期化する前に、最初にホスト間にマネージャーノードと1つ以上のワーカーノードを割り当てる必要があります。

    グラフィカルユーザーインターフェース(GUI)

    Kubernetesは、以下を実行するのに役立つ簡単なWebユーザーインターフェース(ダッシュボード)を提供します:

    • クラスター上でコンテナ化されたアプリケーションをデプロイする
    • クラスターリソースを管理する
    • エラーログおよびクラスターリソースの状態に関する情報(デプロイメント、ジョブ、DaemonSetsを含む)を表示して効率的なトラブルシューティングを行う

    Kubernetesとは異なり、Docker Swarmはアプリケーションをデプロイし、コンテナをオーケストレーションするためのWeb UIを標準で提供していません。ただし、その人気の高まりにより、Docker Swarm用のシンプルから機能豊富なGUIを提供するサードパーティツールがいくつか登場しています。著名なDocker Swarm UIツールには以下が含まれます:

    アプリケーション定義とデプロイ

    Kubernetesデプロイメントは、KubernetesのPods とReplicaSetsを更新する際に、アプリケーションの状態に対する宣言的な更新を記述することを含みます。Podの望ましい状態を記述することで、コントローラーは現在の状態を望ましい状態に変更します。Kubernetesデプロイメントを使用すると、アプリケーションのライフサイクルのすべての側面を定義できます。これらの側面には以下が含まれます:

    • ポッドの数
    • 使用するイメージ
    • ポッドをどのように更新するか

    Docker Swarmでは、事前定義されたSwarmファイルを使用してアプリケーションをデプロイおよび定義し、アプリケーションの望ましい状態を宣言します。アプリをデプロイするには、ルートレベルにYAMLファイルをコピーするだけです。このファイルはDocker Composeファイルとしても知られており、複数ノードマシン機能を活用できるため、組織は以下にサービスとコンテナを実行できます:

    • 複数のマシン
    • 任意の数のネットワーク

    Kubernetesはデフォルトで2つのトポロジーを提供します。これにより、単一障害点を排除するためにクラスターを作成して高可用性を確保します。

    • スタック制御プレーンノードを使用して、フェイルオーバー時にクラスターのすべての利用可能なノードとともにetcdオブジェクトを共存させることで可用性を確保します。
    • または、ロードバランシングのために外部etcdオブジェクトを使用し、制御プレーンノードを個別に制御します. 

    特に、どちらの方法もkubeadmを使用し、制御プレーン内に内部または外部のetcdクラスターノードを維持することで高可用性を保持するためにマルチマスターアプローチを使用します。

    Kubernetesとは異なり、Docker Swarmは標準で監視ソリューションを提供しません。そのため、Docker Swarmの監視をサポートするためにサードパーティアプリケーションに依存する必要があります。一般的に、Docker Swarmの監視はK8sクラスターに比べて、ノード間のオブジェクトとサービスの膨大な量のためにより複雑であると見なされます。

外部etcdトポロジー

外部etcdトポロジー(画像ソース)

高可用性を維持するために、DockerはSwarmノードレベルでサービスの複製を使用します。これにより、Swarmマネージャーは同じコンテナの複数のインスタンスをデプロイし、各サービスのレプリカを持ちます。デフォルトで、内部分散ステートストア:

  • Swarmマネージャーノードを制御して、クラスター全体を管理します
  • ワーカーノードリソースを管理して、高可用性でロードバランスされたコンテナインスタンスを形成します

スケーラビリティ

Kubernetesは以下の両方でオートスケーリングをサポートします:

  • クラスターレベルで、クラスターオートスケーリングを通じて
  • ポッドレベルで、水平ポッドオートスケーラーを使用して

Kubernetesは本質的に、分散ノードのための包括的なネットワークとして機能し、統一されたAPIセットとクラスター状態に関して強い保証を提供します。Kubernetesでのスケーリングは、基本的に新しいポッドを作成し、利用可能なリソースを持つノードにスケジューリングすることを含みます。

Docker Swarmはコンテナをより迅速にデプロイします。これにより、オーケストレーションツールは迅速な反応時間を持ち、オンデマンドスケーリングを可能にします。高トラフィック負荷を処理するためにDockerアプリケーションをスケーリングするには、アプリケーションへの接続数を複製します。したがって、アプリケーションを簡単にスケールアップまたはスケールダウンして、さらに高い可用性を実現できます。

ネットワーキング

Kubernetesはポッドとノードエージェント間にフラットなピアツーピア接続を作成し、効率的なクラスター間ネットワーキングを実現します。この接続には、ポッド間の通信を調整するネットワークポリシーが含まれ、各ポッドに異なるIPアドレスが割り当てられます。サブネットを定義するために、Kubernetesネットワーキングモデルは2つのクラスレスインタードメインルーター(CIDR)を必要とします:

  • ノードIPアドレッシング用の1つ
  • サービス用のもう1つ

Docker Swarmは、Swarmに参加するすべてのノードに対して2種類のネットワークを作成します:

  • 1つのネットワークタイプは、ネットワーク内のすべてのサービスのオーバーレイを概説します。
  • もう1つは、すべてのコンテナのためのホスト専用ブリッジを作成します。

マルチレイヤーのオーバーレイネットワークにより、すべてのホスト間のピアツーピア配布が実現され、安全で暗号化された通信が可能になります。

監視

Kubernetesは、クラスター内にデプロイされたサービスのための複数のネイティブなロギングおよび監視ソリューションを提供します。これらのソリューションは、アプリケーションのパフォーマンスを以下の方法で監視します:

  • サービス、ポッド、コンテナの検査
  • クラスター全体の動作の観察

さらに、Kubernetesはイベントベースの監視をサポートするためのサードパーティ統合もサポートします:

これらは、Docker Swarmのためのスケーラブルな監視ソリューションを達成するために協力して役立ついくつかのオープンソースの監視ツールです:

締めくくりの考え

KubernetesとDocker Swarmの大きな目的はそれぞれ重なる部分があります。しかし、前述のように、これら2つの動作には根本的な違いがあります。最終的には、どちらのオプションも、あなたのデジタルトランスフォーメーションを現実的かつ効率的にするための高度な課題を解決します。

追加リソース

関連する読み物として、これらのリソースを探索してください:

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

ITOps・DevOpsの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。