コンテナオーケストレーションとは

公開日 2024年10月22日
薄緑色の背景に斜めに配置され、それぞれがソフトな影を落とす複数の青緑色のロケット
By Stephanie Susnjara and Ian Smalley

コンテナ・オーケストレーションの定義

コンテナ・オーケストレーションは、コンテナ化されたアプリケーションのプロビジョニング、デプロイ、拡張、およびライフサイクル管理を自動で行います。開発者はアジャイルやDevOpsのワークフローを効率化するためにコンテナ・オーケストレーションを活用し、現代のハイブリッド・マルチクラウド・インフラストラクチャーを支えるために必要な柔軟性とスピードを実現しています。

今日、Kubernetesは、最も人気のあるコンテナ・オーケストレーション・プラットフォームです。Amazon Web Services(AWS)、Google Cloud Platform、IBM® Cloud、Microsoft Azureをはじめとする主要なクラウド・サービス・プロバイダーの多くが、マネージドKubernetes Serviceを提供しています。その他のコンテナ・オーケストレーション・ツールには、Docker SwarmやApache Mesosなどがあります。

コンテナにオーケストレーションが必要な理由

コンテナは、軽量で実行可能なアプリケーション・コンポーネントです。これは、アプリケーション・ソースコードと、そのコードをあらゆる環境で実行するために必要なすべてのオペレーティング・システム(OS)ライブラリーや依存関係を組み合わせています。

コンテナを作成する機能自体は数十年前から存在していましたが、2008年にLinux®がそのカーネル内にコンテナ機能を組み込んだことで、広く利用可能になりました。2013年にオープンソースのコンテナ化プラットフォームであるDockerが登場したことで、コンテナはさらに重要性を増しました。(Dockerの人気は高く、「Dockerコンテナ」と「コンテナ」が同様に使用されることがよくあります。)現在、コンテナはLinux以外にもWindowsをはじめとする多くのオペレーティング・システムと互換性があります。

コンテナは仮想マシン(VM)よりも小さく、リソース効率が高く、移植性が高いため、コンテナ、より具体的にはコンテナ化されたマイクロサービスサーバーレス機能は、最新のクラウドネイティブ・アプリケーションの事実上のコンピュート・ユニットとなっています。

 

コンテナの数が少ない場合、コンテナは手動でデプロイおよび管理するのが十分に簡単です。しかし、コンテナ化されたアプリケーションと、それを大規模に管理する必要性は、現在ではほとんどの大規模組織において一般的なものとなっています。

例えば、継続的インテグレーション/継続的デリバリー(CI/CD)DevOpsのパイプラインは、コンテナ・オーケストレーションなしでは実現できません。コンテナ・オーケストレーションは、コンテナ化されたアプリケーションやサービスのデプロイおよび実行に関する運用タスクを自動化するためです。

IBMの調査によると、回答した開発者の70%がコンテナ・オーケストレーション・ソリューションを使用しており、そのうちの70%が、組織内でフルマネージド(クラウド管理型)のコンテナ・オーケストレーション・サービスを利用していると報告しています。

コンテナ・オーケストレーションはどのように機能するのか。

コンテナ・オーケストレーションのアーキテクチャーは、複数のマシンや環境にまたがってコンテナ・クラスターを実行する仕組みで構成されています。各クラスターは通常、「ノード」(サーバー・インスタンスとも呼ばれます)のグループで構成されます。ワーカー・ノードは、Dockerなどのコンテナ・ランタイムを使用してコンテナを実行します。一方、コントロール・プレーン・ノードのグループは、クラスター全体のオーケストレーションを担います。ユーザーは、アプリケーション・プログラミング・インターフェース(API)やグラフィカル・ユーザー・インターフェース(GUI)を備えたツールを使用して、コンテナ化されたワークロードの管理や監視を行うことができます。

プラットフォームやツールによって手法や機能には違いがありますが、コンテナ・オーケストレーションは本質的には3つのステップからなるプロセス(あるいはアジャイルやDevOpsの反復的なパイプラインの一部であればサイクル)です。

  1. プロビジョン
  2. 導入
  3. ライフサイクル管理

1. プロビジョニング

ほとんどのコンテナ・オーケストレーション・ツールは、宣言型の構成モデルをサポートしています。開発者は、望ましい状態を定義する構成ファイルを(使用するツールに応じてYAMLまたはJSON形式で)作成します。ファイルを実行するオーケストレーション・ツールは、独自のインテリジェンスを使用してその状態を実現します。構成ファイルには通常、次のような内容が記述されます。

  • どのコンテナ・イメージがアプリケーションを構成するか、またそれらがどのコンテナ・レジストリーに格納されているかを定義します。
  • また、ストレージやその他のリソースをコンテナにプロビジョニングします。
  • コンテナ間のネットワーク接続を定義し、その接続を保護します。
  • また、段階的な展開やカナリア・リリースのために、バージョン管理も指定します。

2. デプロイメント

オーケストレーション・ツールは、コンテナ(およびレジリエンスのためのコンテナのレプリカ)のデプロイをホストにスケジューリングします。ツールは、構成ファイルに指定された中央処理装置(CPU)の容量、メモリー、その他の要件や制約に基づいて、最適なホストを選択します。

3. ライフサイクル管理

コンテナがデプロイされると、オーケストレーション・ツールはコンテナ定義ファイル(多くの場合、Dockerfile)に基づいてコンテナ化されたアプリケーションのライフサイクルを管理します。

ライフサイクル管理のタスクには、次のようなものがあります。

  • コンテナ間の拡張性(スケールアップおよびスケールダウン)、負荷分散、およびリソースの割り当てを管理します。
  • また、障害やシステムリソースの不足が発生した場合には、コンテナを別のホストに移動させることで、可用性とパフォーマンスを確保します。
  • アプリケーションの健全性やパフォーマンスを監視するために、ログ・データやその他のテレメトリー情報を収集・保存します。

コンテナ・オーケストレーションの仕組みを詳しく知りたい方は、こちらの動画をご覧ください。

コンテナオーケストレーションの利点

コンテナ・オーケストレーションの主な利点には、以下が含まれます。

  • オートメーション
  • 回復力
  • リソースの有効活用とパフォーマンスの向上
  • コスト効率
  • スピードと機敏性
  • 安全性の向上
  • プロダクティビティーを高める

オートメーション

コンテナ・オーケストレーションの最大のメリットはオートメーションであり、大規模なコンテナ化アプリケーション群の管理に伴う手作業の負担と複雑さを大幅に軽減します。

回復力

コンテナ・オーケストレーション・ソリューションは、障害が発生した際にコンテナを再起動または拡張することで、レジリエンスを強化します。この機能により、高い可用性とアプリケーションのアップタイムの向上が実現します。

リソースの有効活用とパフォーマンスの向上

自動化されたホストの選定とリソースの割り当てにより、コンピューティング・リソースを最大限に効率よく活用することができます。たとえば、コンテナ・オーケストレーション・ソリューションは、個々のコンテナに応じてCPU、メモリー、ストレージを調整できるため、過剰なプロビジョニングを防ぎ、全体のパフォーマンスを向上させます。

コスト効率

コンテナ・オーケストレーションにより手動での介入が不要となり、運用コストが削減されます。また、コンテナは仮想マシン(VM)よりも必要とするリソースが少ないため、ITインフラストラクチャーの要件や間接コストの削減にもつながります。

スピードと機敏性

コンテナ・オーケストレーション・ツールは、アプリケーションの開発とデプロイのスピードを加速させ、現代のクラウドネイティブなプロセスにおいて重要なサポートを提供します。

安全性の向上

コンテナは、アプリケーションをホスト・システムおよび他のアプリケーションから分離することで、攻撃対象領域を減らし、セキュリティを向上させます。多くのプラットフォームには、脆弱性を検知する自動スキャン機能や、イメージ・レジストリーを保護する機能が備わっており、全体的な保護を強化します。

生産性の向上

オペレーションを自動化することで、コンテナ・オーケストレーションはアジャイルやDevOpsのアプローチを支援します。これにより、チームは迅速で反復的なサイクルで開発とデプロイを行うことができ、新機能や新たな機能強化をより早くリリースすることが可能になります。

IBM DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

Kubernetesを使用する利点

Googleによって開発され、2014年にリリースされたKubernetesは、オープンソース・ソフトウェアの歴史の中でも最も急成長を遂げたプロジェクトの1つとなりました。現在、KubernetesはCloud Native Computing Foundation(CNCF)によって管理されています。2016年にKubernetesがCNCFに加わって以来、コントリビューターの数は731人から8,012人へと増加しました。1

Kubernetesは、他のコンテナ・エコシステムのツールと組み合わせることで、企業が高い生産性を備えたプラットフォーム・アズ・ア・サービス(PaaS)を提供できるようにしますこのクラウド・コンピューティングモデルは、クラウドネイティブ・アプリケーションにおける多くのインフラストラクチャーおよび運用関連のタスクや課題に対応し、開発チームがコーディングとイノベーションに専念できるようにします。

 

Kubernetesが他のオーケストレーション・ソリューションに比べて優れている点は、以下のような複数の分野における、より包括的かつ高度な機能に起因しています。

  • コンテナのデプロイ
  • ロールアウト
  • サービスの発見
  • ストレージのプロビジョニング
  • 負荷分散と拡張性
  • 自己修復により高可用性を実現
  • 複数のクラウド・プロバイダー間でのサポートとポータビリティ
  • オープンソースのエコシステム

コンテナのデプロイ

Kubernetesは、指定された数のコンテナを指定されたホストにデプロイし、それらを望ましい状態で実行し続けます。

ロールアウト

ロールアウトは、デプロイに対する変更です。Kubernetesを使用すると、開発者はロールアウトの開始、一時停止、再開、ロールバックを実行できます。

サービスの発見

Kubernetesは、ドメイン・ネーム・システム(DNS)名やIPアドレスを使用してサービスを検出することで、コンテナをインターネットや他のコンテナに自動的に公開することができます。

ストレージのプロビジョニング

開発者は、必要に応じて自分のコンテナーの永続的なローカル・ストレージまたはクラウド・ストレージを Kubernetesにマウントできます。

負荷分散と拡張性

コンテナへのトラフィックが急増した際には、Kubernetesはオートスケーリングや負荷分散を活用して、ネットワーク全体にトラフィックを分散させ、安定性と性能を確保します。この機能により、開発者がロード・バランサーを個別に設定する手間も省けます。

自己修復により高可用性を実現

コンテナーに障害が発生した場合、Kubernetes はコンテナーを自動的に再起動または置き換えることができます。また、Kubernetesは、組織のヘルスチェック要件を満たさないコンテナを停止させることもできます。

複数のクラウド・プロバイダー間でのサポートと移植性

Kubernetesは、主要なすべてのクラウド・プロバイダーから幅広くサポートされています。この機能はハイブリッドクラウドパブリッククラウドプライベートクラウド、オンプレミス・インフラの組み合わせ)やマルチクラウド(複数のクラウド・ベンダーからのクラウド・サービスを利用する)にアプリケーションをデプロイする組織にとって不可欠です。

オープンソースのエコシステム

Kubernetesには、Kubernetes APIを介して機能を強化するための、使いやすさとネットワーキング・ツールの拡充を続ける安定版もあります。これには、コンテナをサーバーレス・ワークロードとして実行できるようにするKnativeや、オープンソースのサービス・メッシュであるIstioが含まれます。

CaaS(Containers-as-a-Service)とは

CaaS(Containers as a Service)は、コンテナ化されたアプリケーションの管理およびデプロイを開発者が行えるようにするマネージド・サービスであり、企業に対して、移植性が高くスケーラブルなクラウド・ソリューションへのアクセスを提供します。2022年、世界のCaaS市場は約20億米ドルと評価されました。2調査によると、この市場は2027年までに70億米ドルを超える規模に達すると予測されており、その期間中の年間平均成長率(CAGR)は30.2%と見込まれています。3

CaaSプロバイダーは、コンテナ・ランタイム、オーケストレーション・レイヤー、永続的ストレージの管理、他のサービスとの統合など、さまざまな利点を企業に提供します。多くの主要なパブリック・クラウド・プロバイダーは、Kubernetesを基盤技術として使用したコンテナ・オーケストレーションのマネージド・サービスを提供しています。

主なCaaSプロバイダーには以下が含まれます。

  • AWSのAmazon Elastic Container Service(Amazon ECS)
  • Google CloudのGoogle Kubernetes Engine(GKE)
  • IBM Cloud Kubernetes Service
  • Microsoft AzureのAzure Container Instances(ACI)
  • Red Hat OpenShift

コンテナ・オーケストレーションとAI

Kubernetesのようなコンテナ化されたオーケストレーション・プラットフォームは、予知保全のワークフロー(リアルタイムのヘルスチェックやリソース計画を含む)など、人工知能(AI)および機械学習(ML)の一部を自動化することができます。

機械学習は、テキスト分類、感情分析、機械翻訳などの高度な自然言語処理(NLP)を実行するために、大規模言語モデル(LLM)に依存しています。コンテナ・オーケストレーションは、NLPプロセスを自動化するために、大規模言語モデル(LLM)のデプロイメントを加速させるのに役立ちます。また、企業は生成AIモデルを実行・スケーリングするためにもコンテナ・オーケストレーションを活用しており、これにより高い可用性と障害耐性が確保されます。

執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

関連ソリューション
IBM Instana Observability

AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。

IBM Instana Observabilityはこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。

DevOpsソリューションはこちら
クラウド・コンサルティング・サービス

ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。

クラウド・コンサルティング・サービスはこちら
次のステップ

IBM Instana®によるプロアクティブな問題検知から、スタック全体にわたるリアルタイムの洞察まで、クラウドネイティブ・アプリケーションの安定した稼働を維持できます。

  1. IBM Instanaの詳細を見る
  2. DevOpsソリューションはこちら
脚注