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