Kubernetes と Docker の比較
Kubernetes と Docker の主な違いと、これらがコンテナー化にどのように適合するかについて
Sarah Campbell
クラウド アプリの概要
寄稿、編集: Chandler Harris
Docker はコンテナー化プラットフォームおよびランタイムで、Kubernetes は多くのコンテナー ランタイムからコンテナーを実行して管理するためのプラットフォームです。Kubernetes は、Docker を含む多数のコンテナー ランタイムをサポートしています。
2013 年に Docker が導入されたとき、Docker はコンテナーの新時代を切り拓いて、マイクロサービスに基づくコンピューティング モデルの先駆けとなりました。コンテナーは独自のオペレーティング システムに依存しないため、チームがアプリケーション、依存関係、設定をコンテナー イメージとして宣言型でパッケージ化できるので、ゆるく結合したスケーラブルなマイクロサービスの開発が容易になります。
しかし、多数のサーバー全体に分散されたコンテナーを保持するアプリケーションが複雑化するにつれて、複数のコンテナーを調整してスケジュールする方法、コンテナー間の通信を可能にする方法、コンテナー インスタンスをスケーリングする方法を含む課題が生じました。Kubernetes はこれらの課題を解決する方法として導入されました。
コンテナー テクノロジーでよく聞く名前は Docker と Kubernetes です。その優劣について気になるところではあるかもしれませんが、多くの場合、大事なことはどちらかではなく、どうすれば有効に両立できるのかということです。
Compass を無料で試す
開発者のエクスペリエンスを向上させ、すべてのサービスをカタログ化し、ソフトウェアの健全性を高めましょう。
Docker とは
Docker は商用のコンテナー化プラットフォームおよびランタイムで、開発者がコンテナーを構築、デプロイ、実行できるようにします。単一の API を介したシンプルなコマンドと自動化を備えたクライアント/サーバー アーキテクチャを採用しています。
また、Docker にはツールキットも用意されています。これは、Dockerfile を記述して適切なコマンドを実行し、Docker サーバーによってイメージを構築することで、アプリケーションを変更不可能なコンテナー イメージにパッケージ化するためによく使用されます。開発者は Docker に頼らずコンテナーを作成できますが、Docker プラットフォームによってより簡単に作成できます。これらのコンテナー イメージは、Kubernetes、Docker Swarm、Mesos、HashiCorp Nomad など、コンテナーをサポートしている任意のプラットフォームにデプロイして実行できます。
Docker はコンテナー化されたアプリケーションを効率的にパッケージ化して配布する方法を提供しますが、Docker だけでコンテナーを大規模に実行して管理することは困難です。複数のサーバー/クラスター全体でコンテナーの調整とスケジューリング、ダウンタイムなしでのアプリケーションのアップグレードまたはデプロイ、コンテナーの正常性の監視など、考慮するべき事項はいくつもあります。
これらの問題を解決するために、Kubernetes、Docker Swarm、Mesos、HashiCorp Nomad などの形でコンテナーを連携するソリューションが登場しました。これらによって、組織は大量のコンテナーとユーザーを管理して負荷を効率的に分散し、認証とセキュリティ、マルチプラットフォームのデプロイなどを実現できるようになります。
関連資料
マイクロサービスとモノリシック アーキテクチャの比較
ソリューションを見る
Compass による DevEx の向上
Kubernetes とは?
Kubernetes (K8s と呼ばれることもあります) は人気のあるオープンソース プラットフォームで、ネットワーク化されたリソースのクラスター全体でコンテナー ランタイム システムを連携させます。Kubernetes は Docker の有無にかかわらず使用できます。
Kubernetes はもともと Google によって開発されました。Google は、1 週間に数十億のコンテナーを大規模に実行するための新しい方法を必要としていました。Kubernetes は 2014 年に Google によってオープン ソースとしてリリースされました。現在は、コンテナーと分散アプリケーションのデプロイのための市場リーダーであり、業界標準の連携ツールであると一般に受け入れられています。Google は Kubernetes の「主な設計目標は、コンテナーによって実現される利用率の向上からメリットを受けながら、複雑な分散型システムのデプロイと管理を容易にすることです」と指摘しています。
Kubernetes ではコンテナー セットを同じマシンで管理しているグループにバンドルしてネットワーク負荷を減らし、リソースの使用効率を向上します。コンテナー セットの例としては、アプリ サーバー、Redis キャッシュ、SQL データベースがあります。Docker コンテナーは、コンテナーごとの 1 つのプロセスです。
Kubernetes はサービスの検出、クラスター内の負荷分散、ロールアウトとロールバックの自動化、障害が発生したコンテナーの自己修復、構成管理を実現できるため、DevOps チームにとって特に便利です。さらに、堅牢な DevOps CI/CD パイプラインを構築するための重要なツールでもあります。
ただし、Kubernetes は完全なサービスとしてのプラットフォーム (PaaS) ではないため、Kubernetes クラスターを構築して管理する際は考慮するべき事項が数多くあります。Kubernetes の管理は複雑であり、多くのお客様がクラウド ベンダーのマネージド Kubernetes サービスを使用することを選択する大きな原因の 1 つとなっています。
Kubernetes のメリット
「クラウドの Linux」とよく言われる Kubernetes は、ある理由から最も人気のあるコンテナー連携プラットフォームです。次にその理由を示します。
運用の自動化
Kubernetes には、kubectl と呼ばれる強力な API とコマンド ライン ツールが付属しています。このツールは、運用の自動化を可能にすることで、コンテナー管理にかかる面倒な作業の大部分を処理してくれます。Kubernetes のコントローラー パターンは、アプリケーション/コンテナーが指定されたとおりに動作することを保証します。
インフラストラクチャの抽象化
Kubernetes は、利用可能になったリソースをユーザーに代わって管理します。これによって、開発者は基盤となるコンピューティング、ネットワーキング、ストレージ インフラストラクチャではなく、アプリケーション コードの記述に集中できるようになります。
サービスの正常性の監視
Kubernetes は実行中の環境を監視して、目的の状態と比較します。サービスに対して自動ヘルス チェックを実行して、障害が発生したコンテナーや停止したコンテナーを再起動します。サービスは実行されて準備が整っているときにのみ利用可能になります。
Kubernetes と Docker の比較
Docker はコンテナー ランタイムですが、Kubernetes は多くのコンテナー ランタイムからコンテナーを実行して管理するためのプラットフォームです。Kubernetes は Docker、containerd、CRI-O、Kubernetes CRI (コンテナー ランタイム インターフェイス) のあらゆる実装を含む、多数のコンテナー ランタイムをサポートしています。Kubernetes は「オペレーティング システム」であり、Docker コンテナーは「オペレーティング システム」にインストールする「アプリ」であると考えるとわかりやすいです。
Docker それ自体は最新のアプリケーション開発に大変有益で、「自分のマシンでの作業」限定の古典的な問題を解決します。コンテナー連携ツール Docker Swarm は、少数のコンテナーの本番環境におけるコンテナー ワークロード デプロイを処理できます。システムが成長して互いにネットワーク化された多数のコンテナーを追加する必要がある際にスタンドアロン Docker が直面する可能性のあるいくつかの生みの苦しみは、Kubernetes によって対処できる可能性があります。
この 2 つを比較する際は、Kubernetes と Docker Swarm を比較した方がよいでしょう。Docker Swarm、または Docker Swarm モードは、Kubernetes のようなコンテナー連携ツールです。つまり、Docker サーバーを実行している複数のホスト全体にデプロイされた複数のコンテナーを管理できます。初期設定で Swarm モードは無効になっているため、DevOps チームによるセットアップと設定が必要です。
Kubernetes はマシンのクラスターが協力するように連携させて、コンテナーがそれらのマシン上で利用可能なリソースに基づいて実行されるようにスケジュールします。コンテナーは宣言型の定義によって、Kubernetes の基本単位である Pod にグループ化されます。Kubernetes はサービスの検出、負荷分散、リソース割り当て、分離、Pod の垂直方向または水平方向のスケーリングなどを自動で管理します。Kubernetes はオープン ソース コミュニティに受け入れられており、現在はクラウド ネイティブ コンピューティング財団の一員となっています。Amazon、Microsoft、Google はすべて、自社のクラウド コンピューティング プラットフォームでマネージド Kubernetes サービスを提供しています。これによって、Kubernetes クラスターとコンテナー化されたワークロードの実行と保守に伴う運用上の負担が大幅に軽減されます。
Docker か Kubernetes、どちらが適しているか?
では、Docker Swarm と Kubernetes の両方がコンテナー連携プラットフォームである場合は、どちらを選択しますか?
独自のインフラストラクチャを構築して実行する場合は、通常、Docker Swarm の方が Kubernetes よりも少ないセットアップと構成で済みます。Docker Swarm には Kubernetes と同じメリットがあります。具体的には、宣言型 YAML ファイルによるアプリケーションのデプロイ、希望する状態へのサービスの自動スケーリング、クラスター内にある複数コンテナー全体の負荷分散、サービス全体のセキュリティとアクセス制御などです。実行中のワークロードが少なく独自のインフラストラクチャの管理を気にしない、または Kubernetes が提供する特定の機能が不要な場合は、Docker Swarm が最適な選択肢である可能性があります。
Kubernetes の初期セットアップは複雑ですが、優れた柔軟性と機能を備えています。また、活発なオープン ソース コミュニティから幅広いサポートを受けられます。Kubernetes はすぐに使える複数のデプロイ戦略をサポートしており、ネットワーク イングレスを管理してコンテナーを簡単に観測できます。主要なクラウド ベンダーはすべてマネージド Kubernetes サービスを提供しており、これによって、自動スケーリングなどのクラウド ネイティブ機能を非常に簡単に開始して活用できるようになります。多数のワークロードを実行していてクラウド ネイティブの相互運用性が必要であり、組織に多数のチームがある場合は、サービスの分離を強化する必要が生じます。このような場合は、Kubernetes が検討するべきプラットフォームになる可能性が高まります。
Compass とコンテナー連携
どのコンテナー連携ソリューションを選択しても、規模に合わせて分散アーキテクチャの複雑さを管理するツールを使用することが重要です。Atlassian Compass は拡張可能な開発者エクスペリエンス プラットフォームで、エンジニアリングの成果とチーム コラボレーションに関する分断された情報を一元化された検索可能な場所にまとめられます。Compass はコンポーネント カタログによってマイクロサービスの無秩序な増加を抑える上で役に立つだけでなく、スコアカードによってベスト プラクティスを確立してソフトウェアの正常性を測定する上でも役に立ちます。また、Atlassian Forge プラットフォーム上で構築された拡張機能によって、DevOps ツールチェーン全体のデータとインサイトを提供します。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。