単一のコンテナ化されたアプリケーションの管理は比較的簡単ですが、分散システムで数百や数千にスケールアップする場合、可用性、相互接続性、スケーラビリティを確保するうえで大きな課題が生じます。コンテナ オーケストレーションは、こうした複雑さに対処するものです。Kubernetes は、こうしたタスク向けの主要なオープンソース プラットフォームですが、Google Kubernetes Engine(GKE)などのフルマネージド コンテナ オーケストレーション ツールを使用することで、デプロイや継続的な管理が簡素化され、Kubernetes に関連する運用上の負担の多くが抽象化されます。
コンテナ オーケストレーションは、基盤となるインフラストラクチャを気にすることなく、コンテナ化されたアプリケーションを自動的にプロビジョニング、デプロイ、スケーリング、管理するシステムです。
デベロッパーはコンテナ オーケストレーションをコンテナがある任意の場所で実装でき、コンテナのライフサイクル管理を自動化できます。
企業の開発チームや運用チームにとって、これは、手動プロセスから宣言型の自動システムへの移行を意味します。新しいバージョンのデプロイ、トラフィックの急増に対応するためのスケーリング、ハードウェア障害からの復旧などのタスクの実行方法を指定する代わりに、アプリケーションの望ましい状態を宣言するだけで済みます。
Kubernetes オーケストレーションは、マシンのクラスタを管理し、必要なリソースとユーザーが定義した望ましい状態に基づいてコンテナをデプロイすることで機能します。このシステムは、連携して機能するいくつかの重要なコンセプトで構成されています。
コンテナ オーケストレーション プラットフォームは、コンテナ オーケストレーションを自動化するためのツールを提供し、イベント ロギング、モニタリング、分析のための他のオープンソース テクノロジーをインストールする機能を備えています(Prometheus など)。
コンテナ オーケストレーション プラットフォームには、主に 2 つのタイプ(セルフマネージド、マネージド)があります。
Kubernetes 自体がコア オーケストレーションを提供しますが、さまざまなクラスタツールが連携して動作することで、セキュリティの強化、管理の簡素化、スケーリングを実現します。関連するツールを以下に示します。
Google Kubernetes Engine(GKE)などのコンテナ オーケストレーション ツールを使用すると、コンテナ化されたアプリケーションやマイクロサービスのデプロイや実行が簡単になります。通常、コンテナ オーケストレーターは独自の手法でさまざまな機能を提供しますが、どのツールでも、コンテナ化されたアプリケーションを自動的に調整、管理、モニタリングできます。
最終的な結果は同じ(実行中のマネージド コンテナ化アプリケーション)ですが、必要な手順と労力は Kubernetes と GKE で大きく異なります。
Kubernetes は重要な機能を自動化し、手作業による多大な労力を削減します。以下に挙げる中核機能により、Kubernetes は非常に強力なオーケストレーション プラットフォームとなっています。
コンテナ オーケストレーションの最大の利点の一つは、オペレーションの簡素化です。タスクを自動化することで、コンテナ化されたアプリケーションを管理する労力と複雑さを最小限に抑えることができるだけでなく、他にも多くのメリットが得られます。
信頼性の高いアプリケーション開発
コンテナ オーケストレーション ツールは、迅速なアプリ開発を可能にし、再現性を高めます。デプロイの速度が向上するため、DevOps などのアジャイル開発アプローチのサポートに最適です。
スケーラビリティ
コンテナ オーケストレーションにより、ワークロード要件の変化に応じてコンテナのデプロイをスケールアップまたはスケールダウンできます。また、マネージド サービスを選択し、基盤となるインフラストラクチャをオンデマンドでスケーリングすることで、クラウドのスケーラビリティも得られます。
コスト削減
コンテナは、必要とされるリソースが仮想マシンよりも少ないため、インフラストラクチャとオーバーヘッドの費用を削減できます。また、コンテナ オーケストレーション プラットフォームは、必要な人材と時間を削減できるため、さらなる費用削減につながります。
強化されたセキュリティ
コンテナ オーケストレーションにより、プラットフォーム間でセキュリティ ポリシーを管理できるようになり、脆弱性につながる可能性がある人的エラーを減らすことができます。また、コンテナはアプリケーション プロセスを分離するため、攻撃対象領域が狭まり、全体的なセキュリティが向上します。
高可用性
コンテナ オーケストレーション ツールを使用すると、インフラストラクチャの障害の検出や修正が容易になります。コンテナに障害が発生すると、コンテナ オーケストレーション ツールが自動的に再起動や置換を行うため、可用性が維持され、アプリケーションの稼働時間も増加します。
生産性の向上
コンテナ オーケストレーションは、デベロッパーの生産性を高め、反復作業を減らし、コンテナのインストール、管理、メンテナンスの負担を軽減します。
たとえば、50 個のコンテナを更新する必要があるとします。すべて手作業でアップグレードすることもできますが、チームはその作業にどれだけの時間と労力を費やす必要があるでしょうか。コンテナ オーケストレーションでは、構成ファイルを作成すれば、コンテナ オーケストレーション ツールがすべての処理を自動的に行います。これは、コンテナ オーケストレーションが運用ワークロードの削減にどのように役立つかを示す一例にすぎません。
次に、すべてが異なるオペレーティング システムと言語を使用して開発されている場合に、同じコンテナをデプロイ、スケーリング、保護するのにどれほど時間がかかるかについて考えてみましょう。これらを別の環境に移動する必要がある場合は、どうなるでしょうか。宣言型のアプローチでは、リソースの割り当て、レプリカ管理、ネットワーク構成など、コンテナをスムーズに実行するために必要となる反復的で予測可能な多数のタスクを簡素化できます。コンテナ オーケストレーションの一般的なユースケースを以下に示します。