Google Kubernetes Engine(GKE)などのコンテナ オーケストレーション ツールを使用すると、コンテナ化されたアプリケーションとマイクロサービスのデプロイと実行が容易になります。多くのコンテナ オーケストレーターでは、独自の手法が採用され、異なる機能が提供されますが、そのすべてで、組織がコンテナ化されたアプリケーションを自動的に調整、管理、モニタリングできます。
コンテナ オーケストレーションの仕組みを見ていきましょう。
コンテナ オーケストレーションでは、宣言型プログラミングを使用します。つまり、必要な出力を生成するために必要な手順を記述するのではなく、デベロッパーが定義する出力を生成します。デベロッパーは構成ファイルを作成して、コンテナ イメージの場所やコンテナ間のネットワークを確立して保護する方法を定義し、コンテナ ストレージとリソースをプロビジョニングします。コンテナ オーケストレーション ツールでは、このファイルを使用して、リクエストされた最終状態を自動的に実現します。
新しいコンテナをデプロイすると、ツールまたはプラットフォームが自動的にコンテナをスケジューリングし、構成ファイルで定義された事前定義された制約や要件(CPU、メモリ、他のホストへの近さ、メタデータなど)に基づいて最適なホストを探します。
コンテナが実行されると、コンテナ オーケストレーション ツールにより、コンテナ定義ファイルに基づいてライフサイクル管理と運用タスクが自動化されます。これには以下が含まれます。
コンテナ オーケストレーションは、従来のオンプレミス サーバーからパブリック、プライベート、ハイブリッド、マルチクラウドのコンピューティング環境まで、コンテナをサポートするあらゆるコンピューティング環境で使用できます。
コンテナ オーケストレーションの最大の利点の一つは、オペレーションの簡素化です。タスクを自動化することで、コンテナ化されたアプリケーションを管理する労力と複雑さを最小限に抑えることができるだけでなく、他にも多くのメリットが得られます。
信頼性の高いアプリケーション開発
コンテナ オーケストレーション ツールを使用すると、アプリケーション開発を高速化し、再現性を高めることができます。これによりデプロイ速度が向上し、DevOps のようなアジャイルな開発アプローチをサポートするのに最適です。
スケーラビリティ
コンテナ オーケストレーションにより、ワークロード要件の変化に応じてコンテナのデプロイをスケールアップまたはスケールダウンできます。また、マネージド サービスを選択し、基盤となるインフラストラクチャをオンデマンドでスケーリングすることで、クラウドのスケーラビリティも得られます。
コスト削減
コンテナは、必要とされるリソースが仮想マシンよりも少ないため、インフラストラクチャとオーバーヘッドの費用を削減できます。また、コンテナ オーケストレーション プラットフォームは、必要な人的資本と時間が少なくなるため、さらなる費用削減につながります。
強化されたセキュリティ
コンテナ オーケストレーションにより、プラットフォーム間でセキュリティ ポリシーを管理できるようになり、脆弱性につながる可能性がある人的エラーを減らすことができます。また、コンテナはアプリケーション プロセスを分離するため、攻撃対象領域が狭まり、全体的なセキュリティが向上します。
高可用性
コンテナ オーケストレーション ツールを使用すると、インフラストラクチャの障害を簡単に検出して修正できます。コンテナに障害が発生した場合は、コンテナ オーケストレーション ツールによって自動的に再起動または置換されるため、可用性を維持し、アプリケーションの稼働時間を増やすことができます。
生産性の向上
コンテナ オーケストレーションにより、開発者の生産性が向上するため、反復的なタスクを減らし、コンテナのインストール、管理、メンテナンスの負担を軽減できます。
コンテナ オーケストレーション プラットフォームは、コンテナ オーケストレーションを自動化するためのツールを提供し、Prometheus など、イベント ロギング、モニタリング、分析のための他のオープンソース テクノロジーをインストールする機能を備えています。
コンテナ オーケストレーション プラットフォームには、セルフビルドとマネージドの 2 種類があります。
セルフビルドのコンテナ オーケストレーターは、カスタマイズを完全に制御でき、通常はゼロから構築するか、オープンソース プラットフォームを利用して構築されます。ただし、セルフビルド オプションでは、プラットフォームの管理とメンテナンスが負担になります。
クラウドネイティブ開発で最も一般的なオープンソース コンテナ オーケストレーション プラットフォームは、Kubernetes です。これは、元々 Google が内部クラスタ管理システムである Borg に基づいて開発したオープンソースのコンテナ オーケストレーション システムであり、K8s という略称で呼ばれることもあります。現在では、これがコンテナのデプロイと管理のデファクト スタンダードとなっています。
もう一つの選択肢は、Google、Microsoft、Amazon、IBM などのクラウド プロバイダが提供するマネージド プラットフォームまたは Containers as a Service(CaaS)サービスの使用です。マネージド コンテナ オーケストレーション プラットフォームまたはCaaS を使用して、クラウド プロバイダがインストールと運用を管理します。その結果、お客様は機能を使用するだけでよくなり、コンテナ化されたアプリケーションの実行に集中できます。
コンテナ オーケストレーションの例をいくつか紹介します。そもそも、なぜコンテナ オーケストレーションが必要なのでしょうか。
最新の開発では、コンテナ化はクラウドネイティブ アプリケーションを構築するための主要なテクノロジーとなっています。デベロッパーは大規模なモノリシック アプリケーションではなく、個々の疎結合コンポーネント(一般にマイクロサービスと呼ばれます)を使用してアプリケーションを作成できるようになりました。
一般的にコンテナは小さく、効率的で、ポータビリティに優れていますが、注意点があります。コンテナの数が多ければ多いほど、その運用や管理は難しくなります。アプリケーションの機能を提供するために連携する必要があるコンテナが、1 つのアプリケーションに数百、場合によっては数千も存在することがあります。
コンテナ化されたアプリケーションの数が増加し続ける中、これらのアプリケーションを大規模に管理するには自動化がほぼ不可欠になっています。そこで役立つのが、重要なライフサイクル管理タスクをわずかな時間で実行するコンテナ オーケストレーションです。
アップグレードが必要なコンテナが 50 個あるとします。すべて手作業でアップグレードすることもできますが、チームはその作業にどれだけの時間と労力を費やす必要があるでしょうか。コンテナ オーケストレーションでは、構成ファイルを作成すれば、コンテナ オーケストレーション ツールがすべての処理を自動的に行います。
これは、コンテナ オーケストレーションが運用ワークロードの削減にどのように役立つかを示す一例にすぎません。次に、すべてが異なるオペレーティング システムと言語を使用して開発されている場合に、同じコンテナをデプロイ、スケーリング、保護するのにどれほど時間がかかるかについて考えてみましょう。これらを別の環境に移動する必要がある場合は、どうなるでしょうか。
宣言型のアプローチでは、リソースの割り当て、レプリカ管理、ネットワーク構成など、コンテナをスムーズに実行するために必要となる反復的で予測可能な多数のタスクを簡素化できます。