高いスケーラビリティと可用性のためにマイクロサービスと複数のコンテナー アプリケーションを調整する

ヒント

このコンテンツは eBook の「コンテナー化された .NET アプリケーションの .NET マイクロサービス アーキテクチャ」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

アプリケーションがマイクロサービスに基づく場合や、単に複数のコンテナーに分割されている場合、運用可能なアプリケーションのオーケストレーターを使用することが不可欠です。 前述のとおり、マイクロサービス ベースの方法では、マイクロサービスはそれぞれモデルとデータを所有しているため、開発と展開の観点から自立していることになります。 ただし、複数のサービスで構成される従来のアプリケーション (SOA など) を使用する場合でも、分散システムとして展開する必要がある単一のビジネス アプリケーションを構成する複数のコンテナーまたはサービスを使用する場合もあります。 この種のシステムはスケールアウトや管理が複雑であるため、運用可能でスケーラブルな複数のコンテナー アプリケーションを使用する場合、どうしてもオーケストレーターが必要になります。

図 4-23 は、複数のマイクロサービス (コンテナー) で構成されるアプリケーションのクラスターへの展開を示しています。

Diagram showing Composed Docker applications in a cluster.

図 4-23. コンテナーのクラスター

サービス インスタンスごとに 1 つのコンテナーを使用します。 Docker コンテナーは "デプロイの単位" であり、コンテナーは Docker イメージのインスタンスです。 ホストでは多くのコンテナーが処理されます。 これは論理的な方法のように見えます。 しかし、これらの構成されたアプリケーションの負荷分散、ルーティング、オーケストレーションはどのように処理するのでしょうか。

単一の Docker ホストのプレーン Docker エンジンは 1 つのホストでの単一のイメージ インスタンスの管理に関するニーズを満たしますが、より複雑な分散アプリケーションの複数のホストに展開されている複数のコンテナーの管理に関しては対応できません。 多くの場合は、自動的にコンテナーを開始し、イメージごとに複数のインスタンスでコンテナーをスケールアウトし、必要に応じてそれらを一時停止またはシャットダウンする管理プラットフォームが必要になります。また、理想的には、ネットワークおよびデータ ストレージなどのリソースへのアクセス方法を制御できる必要があります。

個々のコンテナーまたは単純な構成アプリを管理するだけでなく、マイクロサービスを含むより大きなエンタープライズ アプリケーションを管理するには、オーケストレーションおよびクラスタリング プラットフォームが必要になります。

アーキテクチャと開発の観点から、マイクロサービス ベースのアプリケーションで構成される大規模なエンタープライズを構築する場合、高度なシナリオをサポートする次のプラットフォームと製品を理解することが重要です。

クラスターとオーケストレーター。 大規模なマイクロサービス ベースのアプリケーションの場合のように、多くの Docker ホストでアプリケーションをスケールアウトする必要がある場合は、基になるプラットフォームの複雑さを抽象化することで、これらすべてのホストを単一のクラスターとして管理できるようにすることが重要です。 それは、コンテナー クラスターとオーケストレーターによって実現されるものです。 Kubernetes はオーケストレーターの例であり、Azure Kubernetes Service を介して Azure で利用可能です。

スケジューラ。 "スケジューリング" は、管理者がクラスターのコンテナーを起動して、UI も提供できるようにすることを意味します。 クラスター スケジューラにはいくつかの役割があります。たとえば、クラスターのリソースを効率的に使用すること、ユーザーによって指定される制約を設定すること、ノードまたはホスト全体でのコンテナーの負荷分散を効率的に行うこと、高可用性を提供すると同時にエラーに対して堅牢であることなどです。

クラスターとスケジューラの概念は密接に関連しており、さまざまなベンダーによって提供される製品では、多くの場合、両方の機能セットが提供されます。 以下のリストに、クラスターとスケジューラーで最も重要なプラットフォームとソフトウェアの選択肢を示します。 これらのオーケストレーターは、通常、Azure などのパブリック クラウドで提供されます。

コンテナーのクラスタリング、オーケストレーション、スケジューリングのためのソフトウェア プラットフォーム

プラットフォーム 説明
Kubernetes
An image of the Kubernetes logo.
Kubernetes はオープンソースの製品であり、クラスターのインフラストラクチャとコンテナーのスケジューリングからオーケストレーションまでのさまざまな機能を提供します。 ホストのクラスター全体のアプリケーション コンテナーの展開、スケーリング、操作を自動化できます。

Kubernetes ではコンテナー中心のインフラストラクチャが提供され、アプリケーション コンテナーを論理ユニットにグループ化し、管理と検出を容易にします。

Kubernetes は Linux では完成されていますが、Windows では未完成です。
Azure Kubernetes Service (AKS)
An image of the Azure Kubernetes Service logo.
AKS は、Azure でのマネージド Kubernetes コンテナー オーケストレーション サービスです。これによって、Kubernetes クラスターの管理、デプロイ、操作が簡略化されます。
Azure Container Apps
An image of the Azure Container Apps Service logo.
Azure Container Apps は、最新のアプリを大規模に構築およびデプロイするマネージド サーバーレス コンテナー サービスです。

Microsoft Azure でのコンテナー ベースのオーケストレーターの使用

いくつかのクラウド ベンダーでは Docker コンテナーのサポートに加え、Docker クラスターおよびオーケストレーション サポート (Microsoft Azure、Amazon EC2 Container Service、Google Container Engine を含む) が提供されます。 Microsoft Azure では、Azure Kubernetes Service (AKS) を介して Docker クラスターとオーケストレーターのサポートが提供されます。

Azure Kubernetes Service の使用

Kubernetes クラスターでは複数の Docker ホストがプールされ、それらが単一の仮想 Docker ホストとして公開されるため、複数のコンテナーをクラスターにデプロイし、任意の数のコンテナー インスタンスを使用してスケールアウトできます。 クラスターは、スケーラビリティや正常性など、複雑な管理機能をすべて処理します。

ACS には、コンテナー化されたアプリケーションを実行するように Azure 内で事前に構成されている仮想マシンのクラスターの作成、構成、および管理を簡略化する方法が用意されています。 一般的なオープンソースのスケジューリングおよびオーケストレーション ツールの最適化された構成を使用することで、AKS では、コンテナー ベースのアプリケーションを Microsoft Azure でデプロイして管理するための専門知識を持つ増加し続けるコミュニティを利用するか、既存のスキルを使用することができます。

Azure Kubernetes Service によって、一般的な Docker クラスタリング オープンソース ツールとテクノロジの構成が Azure 専用に最適化されます。 コンテナーとアプリケーションの構成の両方に移植性を提供するオープン ソリューションが得られます。 サイズ、ホストの数、オーケストレーター ツールを選択すると、他のことはすべて AKS によって処理されます。

Diagram showing a Kubernetes cluster structure.

図 4-24 Kubernetes クラスターの簡略化された構造とトポロジ

図 4-24 に示したのは Kubernetes クラスターの構造です。ここでは、クラスターの調整の大部分がマスター ノード (VM) によって行われ、アプリケーションの観点から 1 つのプールとして管理される残りのノードにコンテナーをデプロイすることができます。これにより、数千または数万ものコンテナーに対するスケーリングを行うことができます。

Kubernetes 用の開発環境

開発環境において、Docker Desktop をインストールすることにより 1 台の開発マシン (Windows 10 または macOS) でも Kubernetes を実行できることが 2018 年 7 月に Docker から発表されました。 図 4-25 に示すように、さらなる統合テストを行うために、後でクラウド (AKS) にデプロイすることができます。

Diagram showing Kubernetes on a dev machine then deployed to AKS

図 4-25 開発マシンとクラウドでの Kubernetes の実行

Azure Kubernetes Service (AKS) の使用の開始

AKS の使用を開始するには、Azure portal から、または CLI を使用して AKS クラスターをデプロイします。 Azure の Kubernetes クラスター デプロイの詳細については、Azure Kubernetes Service (AKS) クラスターのデプロイに関するページを参照してください。

AKS の一部として既定でインストールされるソフトウェアはいずれも無料です。 既定のすべてのオプションはオープン ソース ソフトウェアと共に実装されます。 AKS は Azure 内の複数の仮想マシンで使用できます。 選択したコンピューティング インスタンスと、ストレージやネットワーキングなどの利用された他の基になるインフラストラクチャ リソースにのみ課金されます。 AKS 自体に従量課金はありません。

Kubernetes 用の既定の運用環境デプロイ オプションでは、次のセクションで説明する Helm Chart が使用されます。

Helm Chart を使用した Kubernetes クラスターへのデプロイ

Kubernetes クラスターにアプリケーションをデプロイする場合は、前のセクションで既に述べたように、ネイティブ形式 (.yaml ファイル) に基づくデプロイ ファイルを使用することにより、元の kubectl.exe CLI ツールを使用できます。 ただし、複雑なマイクロサービス ベースのアプリケーションをデプロイする場合など、より複雑な Kubernetes アプリケーションについては、Helm の使用をお勧めします。

Helm Chart を使用すると、非常に複雑な Kubernetes アプリケーションでも、その定義、バージョン管理、インストール、共有、アップグレード、またはロールバックを容易に行うことができます。

さらに述べると、Azure におけるその他の Kubernetes 環境 (Azure Dev Spaces など) も Helm Chart に基づいているので、Helm の使用が推奨されます。

Helm は、Microsoft、Google、Bitnami、および Helm の共同作成者コミュニティが協力し、Cloud Native Computing Foundation (CNCF) が維持しています。

Helm Chart および Kubernetes の実装の詳細については、Helm Chart を使用した AKS への eShopOnContainers のデプロイに関する投稿記事を参照してください。

その他の技術情報