コンテナオーケストレーションとは、自動化を使用してコンテナを管理するプロセスです。これにより、組織はコンテナやホストのデプロイ、管理、スケーリング、ネットワーキングを自動的に行えるため、エンジニアはこれらのプロセスを手動で行う必要がなくなります。
ソフトウェア開発がモノリシックアプリケーションから進化し、新しいアプリケーションの開発や古いアプリケーションの移行の際は、コンテナが選択肢となっています。コンテナは、ターゲット環境に関係なく、簡単に作成し、すばやくデプロイできるため人気があります。1つの小さなアプリケーションが数十個のコンテナで構成されることもあれば、企業によってはアプリケーションやサービス全体で数千個のコンテナがデプロイされる場合もあります。
コンテナの数が多いほど、それを管理するために多くの時間とリソースを費やす必要があります。コンテナが25個ある場合、手動でアップグレードすることもできますが、それにはかなりの時間がかかるでしょう。コンテナオーケストレーションでは、このような重要なライフサイクル管理作業を、人間がほとんど介入することなく瞬時に実行できます。コンテナオーケストレーションは、多くの場合、SOAR (セキュリティのオーケストレーションと自動化によるレスポンス)に対する組織のアプローチにおいて重要な役割を果たします。
このブログ記事では、コンテナオーケストレーションの概念とその仕組みを説明し、オーケストレーションの一般的なユースケースを示します。さらに、代表的なコンテナオーケストレーションプラットフォームとツールをご紹介し、導入方法に関するガイダンスも提供します。
オーケストレーションとは、アプリケーションインフラの一部として連携して機能する複数のコンテナを管理するプロセスを意味します。ちょうど編曲家が、楽曲の演奏のために、全体が調和するように楽器の割り当てと編成を行うように、コンテナオーケストレーターは、コンテナベースのアプリケーションが正しくスムーズに動作するように、構成、デプロイ、スケーリングを調整します。
コンテナオーケストレーションとは、基本的には、コンテナのライフサイクルや、環境のコンテナ化を管理することです。一般に、コンテナのライフサイクルは従来のソフトウェア開発における構築、デプロイ、実行のフェーズに従いますが、具体的なステップは使用するコンテナオーケストレーションのツールによって多少異なる場合があります。典型的なライフサイクルは次のようになります。
コンテナオーケストレーションのライフサイクルとは環境のコンテナ化を管理することである
コンテナオーケストレーションにより、組織はライフサイクルプロセスを合理化して大規模に管理できます。また、開発者はコンテナオーケストレーションツールを利用して、コンテナ化アプリケーションのデプロイやスケーリングに必要な多くのタスクを自動化することもできます。
オーケストレーションプロセスを開始するために、開発者チームは設定ファイルを作成します。このファイルには、アプリケーションの設定が記述されており、コンテナイメージの検索や構築を行う場所、ストレージボリュームのマウント方法、コンテナログやその他の重要な情報を保存する場所が定義されています。設定ファイルはバージョン管理を行う必要があります。これにより、管理者は本番環境にプッシュする前に、異なる開発環境やテスト環境に同じアプリケーションをデプロイできます。
その後、設定ファイルがコンテナオーケストレーションツールに渡され、デプロイがスケジュールされます。コンテナをクラスターにデプロイする際に、ツールはCPUや利用可能なメモリーなど、設定ファイルに定義されたリソース基準に基づいて、コンテナの配置に適したホスト(またはホストの集合)を選択します。
コンテナの実行後は、コンテナオーケストレーターがコンテナのライフサイクルを監視して管理します。コンテナの設定と一致しないものがある場合やエラーが発生した場合は、ツールが自動的に修正とコンテナの復元を試みます。
コンテナオーケストレーションは、コンテナのライフサイクル全体にわたってタスクを自動化して管理するために使用されます。たとえば、以下の用途が挙げられます。
コンテナオーケストレーションの大きなメリットの1つは、コンテナを実行できるあらゆる環境に実装できるという点です。オンプレミスサーバーはもちろん、アマゾン ウェブ サービス (AWS)、Microsoft Azure、Google Cloud Platformなどを実行しているパブリッククラウド、プライベートクラウド、マルチクラウドにも実装できます。
コンテナオーケストレーションが重要なのは、本番環境における複雑なコンテナ管理を合理化できるからです。マイクロサービスアーキテクチャアプリケーションでは、パブリッククラウドやオンプレミスサーバーの内外で数千個のコンテナを実行しなければならないこともあります。これが企業のすべてのアプリケーションやサービスに及ぶと、コンテナオーケストレーションプロセスなしでシステム全体を手動で管理するのは、超人的な努力をもってしてもほぼ不可能になります。
コンテナオーケストレーションを利用すれば、このような複雑な環境がはるかに管理しやすくなります。コンテナのデプロイ、スケーリング、保護に必要な手作業が最小限に抑えられ、速度、俊敏性、効率が向上します。そのため、DevOpsチームにとって非常に有用であり、CI/CDワークフローにも簡単に統合できます。
コンテナオーケストレーションは複雑なコンテナライフサイクルを効果的に管理するために必要であり、通常は大量のコンテナの管理に利用されます。5~6個のコンテナに1つのアプリケーションがデプロイされているのであれば、実行も管理もそれほど複雑にはならず、手間もかかりません。しかし、企業のほとんどのアプリケーションは数千個のコンテナで実行されており、管理は飛躍的に複雑になっています。このような大仕事を手動で行うための時間とリソースのある企業は、あったとしてもごくわずかでしょう。
コンテナオーケストレーションは、大規模で動的な環境でコンテナを管理するためには欠かせません。コンテナライフサイクルでは、プロビジョニングとデプロイ、コンテナ間のリソースの割り当て、ホスト間のコンテナのスケーリングと移動、ロードバランシング、コンテナの健全性の監視など、数多くの作業が必要になります。
コンテナオーケストレーションにより、これらのタスクが自動化され、正確かつ迅速に実行されるようになるため、開発チームがより効率的にリソースを使用できるようになります。
コンテナオーケストレーションは、開発者と管理者に多くのメリットをもたらします。たとえば、以下のようなものがあります。
コンテナオーケストレーションには、ビジネス目標の達成や収益性の向上に役立つさまざまなメリットがあります。
コンテナオーケストレーションは、それ自体はアイデアでしかありません。アイデアを実現するためには、コンテナオーケストレーションツールが必要です。このツールがコンテナの作成、デプロイ、スケーリングを行うためのフレームワークを提供します。ここでは、代表的なツールをいくつかご紹介します。
「コンテナオーケストレーション戦争」とは、Kubernetes、Docker Swarm、Apache Mesosという3つのコンテナオーケストレーションツールが熾烈な競争を繰り広げた時期を指します。それぞれのプラットフォームには独自の強みがありますが、クラウド環境間の切り替えが複雑なため、標準化されたソリューションが必要でした。この「戦争」は、どのプラットフォームがコンテナ管理の業界標準となるかを競うものでした。
Docker SwarmとKubernetesがリリースされた2015年に最も広く普及していたコンテナ管理ツールはApache Mesosで、Twitter社、Verizon社、Yelp社などの有名企業が利用していました。Apache Mesosとそのコンポーネントフレームワークはコンテナオーケストレーションの実行だけでなく、幅広い機能を備えていたため、コンテナを管理するためだけに使用したい開発者にとっては、実装が複雑でした。一方、KubernetesとDocker Swarmが採用したのは、より焦点を絞った軽量なアプローチでした。
最終的には、主に堅牢なオープンソースコミュニティのおかげでKubernetesが勝者となりました。最近のCNCF調査によると、2020年には回答者の91%がKubernetesを使用しており、その83%は本番環境で使用していました。これは2018年の58%、および前年の78%から着実に増加し続けています。現在では、大手クラウドプロバイダーがそれぞれ独自のマネージドKubernetesサービスを提供しており、コンテナオーケストレーションプラットフォームとして明らかに優勢となっています(Kubernetesがどのようにしてコンテナオーケストレーション戦争に勝利したかについては、Hacker Noonの記事をご覧ください)。
Kubernetesコンテナオーケストレーションとは、コンテナライフサイクルを管理するためにKubernetesのオープンソースプラットフォームを使用することです。Kubernetesはコンテナを作成しませんが、プロセスを自動化してダウンタイムを最小限に抑えることでコンテナ管理を劇的に簡素化できるため、開発チームはアプリケーションの機能改善と新機能の開発に集中できます。その仕組みがわかるように、Kubernetesの基本コンポーネントとそれらの相互関係について説明します。
KubernetesのコアアーキテクチャであるKubernetesエンジンは階層構造になっており、独自の用語が使用されます。この記事では、プラットフォームのすべての用語はご紹介しませんが、Kubernetesがどのようにデプロイを構成するかを確認することで、Kubernetesによるコンテナオーケストレーションの仕組みを理解できます。Kubernetesの構成要素には以下のものがあります。
Kubernetesは、オンプレミスサーバーにも、ハイブリッドクラウドやマルチクラウド環境などにも使用できます。複数のクラウドプロバイダーやサードパーティが、習得しやすいマネージドKubernetesサービスを提供しています。ただし、分離された開発/テスト環境でKubernetesを始める方が、より迅速かつコスト効率良く導入できるでしょう。
コンテナオーケストレーションが必要になるタイミングは?
単一のコンテナを作成してデプロイするのは簡単ですが、複数のコンテナをデータベースやWebアプリケーションなどの大規模なアプリケーションに組み込むのは複雑なプロセスです。コンテナのデプロイ(アプリケーションごとに数百から数千のコンテナを1つの機能ユニットとして接続、管理、スケーリングすること)は自動化なしではまず実現不可能です。
実際、コンテナオーケストレーションツールが必要になるタイミングを見極める第一の基準は複雑さです。技術的には、アプリケーションが複数のコンテナを使用している場合は、オーケストレーションを検討するべきです。
もう1つの要因は、スケーリングの必要性です。Kubernetesのようなコンテナオーケストレーションツールは宣言型プログラミングをサポートしているため、システムの適切な状態を記述するだけで新しいコンテナを簡単に起動して負荷を分散できます。そのため、数秒で多くのアプリケーションインスタンスをデプロイしなければならない場合には、コンテナオーケストレーションが必須となります。
最後に、ソフトウェア開発にCI/CDを使用している場合は、コンテナオーケストレーションを検討する価値があります。リリースサイクルを短縮し、依存関係エラーを減らすことでアプリケーションの停止を防ぎ、より効率的なサーバー利用を実現することで、CI/CDの成果を最大限に高めることができます。コンテナオーケストレーションの業界標準はKubernetesであり、特にオーケストレーションを初めて利用する場合にはお勧めです。以下のセクションでは、導入方法をご紹介します。
Kubernetesの概念と機能に慣れ親しむ最も簡単な方法は、とにかく使い始めることです。幸い、すぐに使い始められる方法がいくつかあります。
Kubernetesを実行したら、広く普及しているコンテナ化アプリケーションのデモを利用して、Kubernetesによるアプリケーションのデプロイ方法や実行方法を学ぶことができます。
ソフトウェア開発では、コンテナ化アプリケーションの数多くのメリットの活用が進んでおり、コンテナオーケストレーションの必要性はますます高まっています。コンテナオーケストレーションは、アプリケーションのデプロイ、管理、スケーリングの複雑さとコストを大幅に削減するため、開発者チームは顧客やビジネスに価値をもたらすアプリケーションの構築により多くの時間を費やすことができます。
このブログはこちらの英語ブログの翻訳です。
この記事について誤りがある場合やご提案がございましたら、ssg-blogs@splunk.comまでメールでお知らせください。
この記事は必ずしもSplunkの姿勢、戦略、見解を代弁するものではなく、いただいたご連絡に必ず返信をさせていただくものではございません。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。