Kubernetes と Docker の比較

連携させることでより適切に動作するコンテナー テクノロジを使用して、アプリをよりすばやく作成、配布、スケーリングしましょう。

Kubernetes と Docker の比較の質問

Kubernetes とDocker の比較についての議論は多くの場合、Kubernetes と Docker のどちらを使用すべきか、ということに収まります。これはリンゴとアップル パイを比較するようなもので、どちらかを選べばよいということではありません。

Kubernetes と Docker の違いは、"どちらも使用する" という考えに基づくと簡単に理解できます。事実、どちらかを選ぶ必要はありません。Kubernetes と Docker は根本的に異なるテクノロジで、一緒に使用することでコンテナー化したアプリの作成、配布、スケーリングを適切に行うことができます。

Docker とコンテナリゼーションの台頭

Docker はオープンソース テクノロジ (およびコンテナーのファイル形式) で、クラウドまたはオンプレミスで実行できる、ポータブルで独立型のコンテナーとして、アプリケーションのデプロイを自動化することができます。Docker, Inc., (Docker と同じような名前ですが) は、Microsoft のようなクラウド プロバイダーと共同で、Linux や Windows 上で実行できるオープンソースの Docker テクノロジを強化しています。

環境を分離するという考えは新しいものではなく、さまざまな種類のコンテナリゼーション ソフトウェアがある中で、Docker はここ数年、標準のコンテナー形式として成長を続けています。Docker には Docker Engine という特長があり、これはランタイム環境です。コンテナーを任意の開発マシンで作成して実行し、コンテナー イメージを Docker Hub や Azure Container Registry などのコンテナー レジストリ経由で保存または共有できます。

アプリケーションが、複数のサーバーにデプロイされた複数のコンテナーにまたがるようになるにつれて、アプリケーションの運用が複雑化します。Docker は、コンテナー化されたアプリをパッケージ化して配布するためのオープン スタンダードですが、その複雑さはますます増しています。多くのコンテナーをどのように調整してスケジュールしたらよいか、アプリ内の異なるすべてのコンテナーが互いに通信するにはどうすればよいか、多くのコンテナー インスタンスをどのようにスケーリングしたらよいかなどの質問があるかと思います。Kubernetes がお手伝いします。

Kubernetes とコンテナーのオーケストレーション

Kubernetes はオープンソースのオーケストレーション ソフトウェアで、コンテナーを実行する方法と場所を制御する API を提供します。Docker コンテナーとワークロードを実行することができ、複数のサーバー間にデプロイされている複数のコンテナーをスケーリングするよう移行するときなど、複雑な運用に対応することができます。

Kubernetes を使用すると、仮想マシンのクラスターを調整し、利用可能なコンピューティング リソースと各コンテナーのリソース要件に基づいて、それらの仮想マシンで実行するコンテナーをスケジュールすることができます。コンテナーは、Kubernetes の基本的な運用単位であるポッドにグループ化されます。これらのコンテナーとポッドを望ましい状態にスケーリングし、それらのライフサイクルを管理してアプリのが常に稼働できるよう維持します。

Kubernetes と Docker の相違点

Kubernetes と Docker の比較というのはよく言われることですが、実際には Kubernetes と Docker Swarm を比較すると言った方がより適切です。Docker Swarm は Docker のオーケストレーション テクノロジで、Docker コンテナーのクラスタリングに着目しています。これは Docker エコシステムに緊密に統合され、独自の API を使用しています。

Kubernetes と Docker の根本的な違いは、Kubernetes がクラスター間での実行を目的としているのに対し、Docker はシングル ノードで実行されます。Kubernetes は Docker Swarm よりも広範囲にわたり、大規模な運用環境で効率的に複数ノードのクラスターを調整するように作られています。Kubernetes ポッド (Kubernetes エコシステムの 1 つ以上のコンテナーを含めることができるスケジューリング単位) がノード間に配布され、高可用性を実現します。

Kubernetes と Docker を連携させるとより効果的です

コンテナーとは、1 回コードを書けばどこでも実行できるしくみですが、Kubernetes には、すべてのコンテナー リソースを 1 つのコントロール プレーンから調整して管理する機能が備わっています。これにより、コンテナーを実行するすべての Kubernetes ノード間でネットワーキング、ロードバランシング、セキュリティ、スケーリングを行うことができます。Kubernetes には分離メカニズム (名前空間など) も組み込まれており、アクセス許可やステージング環境などを使用してコンテナー リソースをグループ化することができます。このような構造により、IT 担当者は開発者にセルフサービスのリソース アクセスを簡単に提供することができ、開発者は、開発環境にアプリケーション全体をモックアップすることなく、最も複雑なマイクロサービス アーキテクチャ上であっても共同作業することができます。DevOps のプラクティスと、コンテナーおよび Kubernetes を組み合わせることで、マイクロサービス アーキテクチャのさらなるベースラインを確立することができ、クラウドネイティブ アプリケーションをよりすばやく配信し、スケーラブルなオーケストレーションを行うことができます。

言い換えれば、Kubernetes と Docker を一緒に使用すると、次のようなことが可能になります。

  • より強固なインフラストラクチャとより可用性の高いアプリケーションを作成する。お使いのアプリは、一部のノードがオフラインになったとしてもオンラインに維持されます。
  • よりスケーラブルなアプリケーションにする。多くの負荷がかかる作業をアプリで行い、より快適なユーザー エクスペリエンスを提供するためにスケールアウトする必要がある場合は、追加のコンテナーをスピンアップするか、ノードを Kubernetes クラスターに追加します。

Kubernetes と Docker は連携しています。Docker は、コンテナー化されたアプリケーションをパッケージ化して配布するためのオープン スタンダードです。Docker を使用することで、コンテナーをビルドして実行し、コンテナー イメージを保存して共有できます。Docker ビルドは Kubernetes クラスター上で簡単に実行することができますが、Kubernetes それ自体は完全なソリューションではありません。運用環境での Kubernetes を最適化するには、セキュリティ、ガバナンス、ID、アクセスと、継続的インテグレーションおよび継続的デプロイ (CI/CD) ワークフロー、およびその他の DevOps プラクティスを合わせて実装します。

運用環境での Kubernetes と Docker ソリューション アーキテクチャ

Simplify the deployment and management of Microservices-based applicationsSimplify the deployment and management of Microservices-based applications12345567778
  1. 概要
  2. フロー

概要

AKS を使用すると、水平方向のスケーリング、自己復旧、負荷分散、シークレット管理を効率化できます。

フロー

  1. 1 Visual Studio などの IDE を使用して、変更を GitHub にコミットできます。
  2. 2 GitHub により、Azure DevOps で新しいビルドがトリガーされます
  3. 3 Azure DevOps によって、コンテナーとしてマイクロサービスがパッケージ化され、Azure Container Registry にプッシュされます
  4. 4 コンテナーは AKS クラスターにデプロイされます
  5. 5 Azure Active Directory は、リソースに安全にアクセスするために使用されます
  6. 6 ユーザーはアプリや Web サイトを介してサービスにアクセスします
  7. 7 管理者は別の管理ポータルを使用してアプリにアクセスします
  8. 8 マイクロサービスではデータベースを使用して、情報を格納し、取得します
Secure DevOps for AKSDevOps and Kubernetes are better together. Implementing secure DevOps together with Kubernetes on Azure, you can achieve the balance between speed and security and deliver code faster at scale. Put guardrails around the development processes using CI/CD with dynamic policy controls and accelerate feedback loop with constant monitoring. Use Azure Pipelines to deliver fast while ensuring enforcement of critical policies with Azure Policy. Azure provides real-time observability for your build and release pipelines, and the ability to apply compliance audit and reconfigurations easily.123456789
  1. 概要
  2. フロー

概要

DevOps と Kubernetes は併用すると、より効果的です。Azure で Kubernetes を併用してセキュリティで保護された DevOps を実装すると、速度とセキュリティのバランスを取ることができ、規模に合わせてコードを高速に提供できます。動的なポリシー制御を備えた CI/CD を使用して開発プロセスの周囲にガードレールを配置し、常に監視してフィードバック ループを高速化できます。Azure Pipelines を使用して高速で配信すると同時に、Azure Policy によってクリティカルなポリシーを確実に施行します。Azure により、ビルドおよびリリース パイプラインのリアルタイムでの監視が提供され、コンプライアンスの監査と再構成を適用できるようになります。

フロー

  1. 1 同じ Kubernetes クラスターで、アプリケーションのさまざまな部分の反復処理、テスト、デバッグを同時にすばやく行うことができます
  2. 2 コードが GitHub リポジトリにマージされた後、自動化されたビルドとテストが Azure Pipelines によって実行されます
  3. 3 コンテナー イメージが Azure Container Registry に登録されます
  4. 4 Kubernetes クラスターは、Terraform などのツールを使用してプロビジョニングされます。Terraform によってインストールされた Helm チャートで、アプリのリソースと構成の望ましい状態が定義されます
  5. 5 オペレーターが AKS クラスターへのデプロイを制御するポリシーを適用します
  6. 6 コード変更のたびにリリース パイプラインによって事前定義されたデプロイ戦略が自動的に実行されます
  7. 7 ポリシーの適用と監査が Azure Policy を使用して CI/CD パイプラインに追加されます
  8. 8 Azure Monitor を使用して、アプリのテレメトリ、コンテナーの正常性の監視、リアルタイムのログ分析を取得することができます
  9. 9 分析情報を使用して問題に対応し、次のスプリント計画に取り込むことができます

Azure で Kubernetes の長所を活用

Azure Kubernetes Service (AKS) を使用すると、コンテナー化されたアプリケーションのデプロイと管理が簡単になります。AKS では、サーバーレスの Kubernetes、統合された CI/CD エクスペリエンス、企業向け仕様のセキュリティとガバナンスが提供されます。開発チームと運用チームを単一のプラットフォーム上で統合し、迅速かつ確実にアプリケーションをビルド、デリバリー、スケーリングします。

Kubernetes と Docker の概要