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

コンテナ・オーケストレーションは、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを自動化する技術です。大量の コンテナを管理する複雑なタスクを簡素化します。 Kubernetesのようなコンテナオーケストレーターは、これらのコンテナが異なるサーバーや環境間で効率的に相互作用することを保証します。オーケストレーターは、コンテナのライフサイクルを管理し、サービス・ディスカバリーを促進し、高可用性を維持するためのフレームワークを提供します。 クラウド ネイティブ アプリケーションが多数の相互依存コンポーネントで構成される マイクロサービス アーキテクチャでは、このフレームワークが基礎となります。

DevOpsチームは 、コンテナ・オーケストレーションを活用することで、プロビジョニング、リソース割り当て、スケーリングを合理化し、コンテナ化の可能性を十分に活用し、ビジネス目標と整合させることができます。

 

コンテナ・オーケストレーションの説明

コンテナ・オーケストレーションは、コンテナ化されたアプリケーションのデプロイメント、管理、スケーリングを自動化します。企業はオーケストレーターを活用して大量のコンテナを制御・調整し、異なるサーバー間で効率的にやり取りできるようにします。

マイクロサービスの新バージョンのデプロイ、需要に応じたマイクロサービスのスケーリング、マイクロサービスのパフォーマンスと健全性の監視を行うオーケストレーション層

図1:マイクロサービスの新バージョンのデプロイ、需要に応じたマイクロサービスのスケーリング、マイクロサービスのパフォーマンスと健全性の監視を行うオーケストレーション層

Kubernetesのようなオーケストレーターは、ライフサイクルを管理し、サービスのディスカバリーを容易にし、高可用性を維持します。これは、クラウド ネイティブ アプリケーションが多数の相互依存コンポーネントで構成されるマイクロサービス アーキテクチャにとって不可欠です。

実際、コンテナ・オーケストレーション市場は、マイクロサービス・アーキテクチャ、クラウド・ネイティブ・アプリケーション、 コンテナ化の採用に歩調を合わせています。2022年の 市場規模は7億4,572万米ドル(5年間で26%増)で、 市場規模は上昇を続け、2029年には1,0847億9,000万米ドルに達すると予想されています。

 

オーケストレーションツール

オーケストレーションツールは、コンテナワークロードを自動化するフレームワークを提供し、DevOpsチームがコンテナのライフサイクルを管理できるようにします。これらのシステム(オーケストレーション・エンジン)は、高度なネットワーク機能を促進し、コンテナやマイクロサービスのプロビジョニングを合理化しながら、需要に応じてリソースを調整します。オーケストレータを使用することで、DevOpsチームはコンテナ化の可能性をフルに活用し、ビジネス目標に合わせることができます。

人気のコンテナ・オーケストレーション・エンジン

  • Kubernetes® (K8s)
  • 牧場主
  • SUSE Rancher
  • Amazon Elastic Kubernetes Services (EKS)
  • Azure Kubernetesサービス(AKS)
  • Google Kubernetes Engine (GKE) / Anthos
  • Red Hat OpenShift Container Platform (OCP)
  • メゾス
  • シスコ・コンテナ・プラットフォーム(CCP)
  • Kubernetes用オラクル・コンテナ・エンジン(OKE)
  • エリクソンコンテナクラウド(ECC)
  • ドッカースウォーム
  • ハシコープ・ノマド

オーケストレーション・エンジンの利点は、一般的に採用されている宣言型モデルにあり、 サービスとしてのインフラストラクチャー(IaaS )と サービスとしてのプラットフォーム(PaaS)の利点を効果的に組み合わせています。

  • IaaS は、開発者がサーバー、ストレージ、ネットワークなどの基盤となるインフラストラクチャを管理できるように、きめ細かな制御と自動化を提供します。これにより、開発者は特定のニーズに合わせてデプロイメントを柔軟にカスタマイズできます。
  • PaaSはより高い抽象化レベルを提供するため、開発者は基盤となるインフラを気にすることなく、アプリケーションに集中することができます。PaaSは、エンジニアがアプリケーションをデプロイし管理することを容易にしますが、インフラストラクチャに対するコントロールが少なくなります。

オーケストレーターは、物理マシンやオンプレミスのデータセンターから仮想デプロイメントやクラウドベースのシステムまで、あらゆる環境において一貫した操作性を提供するだけでなく、開発者にパワーと柔軟性を提供します。

著名なオーケストレーション・エンジンのコア機能には、スケジューリング、リソース管理、サービス・ディスカバリー、ヘルスチェック、オートスケール、アップデートとアップグレードの管理などがあります。

 

オーケストレーターの主要コンポーネント

コンテナ・オーケストレーション・コンポーネントの用語は、現在市販されているツールによって異なります。しかし、基本的なコンセプトや機能性は比較的一貫しています。表 3 は、一般的なコンテナ・オーケストレーターの主要コンポーネントと対応する用語の比較概要です。ここでは、オーケストレーションの仕組みを理解するために、Kubernetesの用語を使って説明します。

コンテナ・オーケストレーション・コンポーネントの概要

図2:コンテナ・オーケストレーション・コンポーネントの概要

Kubernetesのようなオーケストレーションエンジンは複雑で、コンテナのライフサイクルを管理するために一体となって動作する重大な技術コンポーネントで構成されています。主要コンポーネントを理解することで、コンテナ化技術の最適な活用方法を理解することができます。

コントロールプレーン

Kubernetesの中心には、アプリケーションのスケジューリングとライフサイクルを管理するコマンドセンターであるコントロールプレーンがあります。コントロールプレーンはKubernetes APIを公開し、デプロイメントをオーケストレーションし、システム全体の通信を指示します。また、コンテナの健全性を監視してクラスタを管理し、デプロイメントのためにコンテナイメージをレジストリからすぐに利用できるようにします。

Kubernetesのコントロールプレーンは、etcd、APIサーバー、スケジューラー、コントローラーマネージャーといった重大コンポーネントで構成されています。

etcd

CoreOSによって開発され、後にRed Hatによって買収されたetcdデータストアは、クラスタの設定データを保持する分散キーバリューストアです。宣言的なポリシーによって定義された、望ましいアプリケーションの状態を維持するためのオーケストレータのアクションを通知します。このポリシーは、アプリケーションの最適化環境の概要を示し、インスタンス数、ストレージのニーズ、リソースの割り当てなどのプロパティを管理する際にオーケストレーターをガイドします。

APIサーバー

Kubernetes APIサーバーは、RESTfulインターフェイスを介してクラスタの機能を公開する、極めて重要な役割を果たします。リクエストをプロセスをアップデートし、リクエストを検証し、受け取った指示に基づいてクラスタの状態を更新します。このメカニズムにより、ワークロードとリソースの動的な構成と管理が可能になります。

スケジューラー

Kubernetesのスケジューラは、リソースの可用性と、サービス品質やアフィニティルールなどのその他の制約に基づいて、ワーカーノードにワークロードを割り当てます。スケジューラは、クラスタの現在の状態とリソース構成に対してワークロードの分散が最適化された状態を維持するようにします。

コントローラー・マネージャー

コントローラマネージャは、アプリケーションの望ましい状態を維持します。クラスターの共有状態を監視し、現在の状態と望ましい状態を一致させるための調整を行う制御ループであるコントローラを通じて動作します。これらのコントローラはノードとポッドの安定性を確保し、クラスタの健全性の変化に応答して運用の一貫性を維持します。

コンテナオーケストレーター 制御プレーン・コンポーネント ワーカー・ノード・コンポーネント デプロイメントユニット サービス
Kubernetes APIサーバ、スケジューラ、コントローラマネージャ、etcd キュベレット ポッド サービス
ドッカースウォーム マネージャー 労働者 サービス スタック
ノマド サーバー 代理店 仕事 割り当て
メゾス マスター 代理店 タスク 仕事
OpenShift コンソール、コントローラマネージャ、etcd ノード ポッド サービス
Amazon Elastic Container Service (ECS) クラスタコントローラ EC2インスタンス タスク サービス
Google Kubernetes Engine (GKE) コントロールプレーン ノード ポッド サービス
Azure Kubernetesサービス(AKS) コントロールプレーン ノード ポッド サービス

表1:様々なオーケストレーションエンジンに共通するコンポーネント。

オーケストレーションと不変のインフラストラクチャ

従来のサーバーや仮想マシンとは対照的に、コンテナとそのインフラストラクチャが持つイミュータブルなパラダイムは、デプロイメント後の修正を不可能にします。その代わり、アップデートや修正は、必要な変更を加えた共通のイメージから新しいコンテナやサーバーをデプロイすることで適用されます。

不変インフラ固有のプログラマビリティが自動化を可能にします。コードとしてのインフラストラクチャ(IaC)は 、最新のインフラストラクチャの特徴として際立っており、アプリケーションがプログラムで必要なインフラストラクチャをプロビジョニング、構成、管理できるようになっています。コンテナ・オーケストレーション、イミュータブル・インフラストラクチャ、IaC主導の自動化を組み合わせることで、比類のない柔軟性とスケーラビリティを実現します。

 

コンテナ・オーケストレーションとパイプライン

コンテナ化とDevOpsという2つのエンジンによって推進されるコンテナ・オーケストレーションは、今日のダイナミックで要求の厳しい プロダクション・パイプラインを支えるスピードとスケーラビリティをもたらします。

CI/CDパイプラインのアプリケーション開発ライフサイクル

図3:CI/CDパイプラインのアプリケーション開発ライフサイクル

パイプラインの獲得と構築段階

取得とビルドの段階では、開発者はバージョン管理リポジトリからコードを取得し、ビルドプロセスを開始します。自動化ツールはソースコードをコンパイルし、DockerやBuildKitのようなツールを使ってデプロイメントするためのバイナリ成果物にします。コンテナイメージがビルドされると、Docker HubやGoogle Artifact Registryなどのレジストリに保存されます。

取得と構築のフェーズでは、スクリプトで依存関係を管理し、予備テストを実行することで、アプリケーションの一貫した構築を促進します。その結果、信頼性の高いビルドができ、メインブランチと統合されると、さらに自動化されたプロセスが起動します。

ランフェーズ

ビルドフェーズが終了すると、パイプラインは制御された環境でコードを実行します。ステージング環境でコンテナイメージを実行するには、Kubernetesなどのコンテナオーケストレーションツールを使用します。この重要なステップでは、チームはアプリケーションの機能を検証するために一連の自動テストを実施します。開発者は積極的にバグを探し出し、対処することで、パイプラインを通じて高品質のコードのみを確実に進行させます。

配送段階

CI/CDパイプラインのデリバリーステージでは、チームは新しいコードの リポジトリから 本番環境への移行を自動化します。すべてのコミットは、厳格な自動テストと品質チェックのシーケンスを開始し、十分に検証されたコードのみがステージング環境に到達することを保証します。ここで、ソフトウエアはさらに、多くの場合、顧客との対面での検証を受けます。このプロセスには、安定性とパフォーマンスを証明する場として、各環境を通じたビルドの推進が凝縮されています。納品段階におけるチームのコミットメントは、ソフトウェアが現在の開発努力のベストを体現することを保証します。

デプロイメント段階

デプロイ段階では、チームが本番環境にアプリケーションをロールアウトするため、アプリケーションは重要な瞬間を迎えます。Kubernetesのようなコンテナ・オーケストレーション・ツールが制御を担い、アプリケーションをスケーリングし、ダウンタイムを最小限に抑えて更新します。チームはロールバックメカニズムを準備しており、問題が発生した場合に以前のバージョンに戻すことができます。この時点で、アプリケーションは運用可能となり、意図したユーザーにサービスを提供し、デジタルエコシステムにおける目的を果たします。

ステージ維持

デプロイメント後、チームはアプリケーションの積極的な保守に移行します。 ランタイム・ソリューションを 採用し、継続的にパフォーマンスを監視し、エラーをログに記録し、ユーザーからのフィードバックを収集することで、 コンテナ・セキュリティだけでなく、将来の機能拡張を促進します。

開発者がアプリケーションを微調整し、セキュリティパッチを適用し、新機能を展開するとき、メンテナンスフェーズは最新のアプリケーション開発の反復的な性質を強調します。継続的な進化により、製品はユーザーの要求に応え、最新の技術を取り入れています。

 

コンテナ・オーケストレーションのメリット

コンテナ・オーケストレーションは、DevOpsの目的に沿った一連のメリットを提供し、最終的にはクラウド環境における運用効率を高め、オーバーヘッドを削減します。

スケーラビリティの向上

コンテナ・オーケストレーション・プラットフォームにより、企業は、人手を介することなく、またアプリケーションの負荷を予測することなく、変動する需要に応じてコンテナ化されたアプリケーションをスケーリングすることができます。オーケストレーターのビンパッケージングと自動スケーリング機能は、コードとしてのパブリッククラウドインフラストラクチャと相まって、リソースを動的に割り当て、ピーク負荷時の最適なパフォーマンスを保証します。

レジリエンスの促進

コンテナインスタンスを複数のホストに分散させることで、オーケストレーションツールはアプリケーションの耐障害性を強化します。障害を検出し、自動的にコンテナを再始動することで、ダウンタイムを最小限に抑え、サービスの継続性を維持します。

効率化を促進

オーケストレーション・エンジンは、さまざまな使用シナリオでアプリケーションが必要とする要件を正確に満たすようにリソースを調整するため、過剰なプロビジョニングが横行したり、組織が高い水利用率を実現するためのアーキテクチャーや計画が必要になったりするのを防ぎます。この効率化により、インフラコストを削減し、投資利益率を最大化します。

管理の簡素化

コンテナ・オーケストレーターは、コンテナのクラスタを管理するための統一インターフェースを提供し、複雑なタスクを抽象化して運用負荷を軽減します。チームは、手動による介入を最小限に抑えながら、アップデートのデプロイ、健全性の監視、ポリシーの適用を行うことができます。

セキュリティの向上

コンテナ・オーケストレーションは、パッチやセキュリティ・アップデートのデプロイメントを自動化することで、セキュリティを強化します。コンテナ・フリート全体に一貫したセキュリティ・ポリシーを適用し、脆弱性のリスクを低減します。

ポータビリティの実現

オーケストレーションは、コンテナ化されたアプリケーションが基盤となるインフラストラクチャに依存しないことを保証し、異なるクラウド環境やオンプレミスデータセンター間での移植性を促進します。

デプロイメント・サイクルの高速化

デプロイメントプロセスを自動化することで、オーケストレーションツールは開発から本番稼動までの時間を短縮し、迅速なイテレーションと新機能の市場投入までの時間の短縮を可能にします。

DevOpsプラクティスのサポート

CI/CDパイプラインと 統合し、ソフトウェア開発の俊敏性を高めるコンテナ・オーケストレーションは、開発チームと運用チームのコラボレーションを促進します。ヘルスモニタリングや自己回復などの機能により、チームはシステムサポートやトラブルシューティングの回数を減らし、DevOpsの生産性を最適化できます。

 

コンテナのエコシステム

端的に言えば、コンテナのエコシステムは、アプリケーション開発とデプロイメントにおける大きな転換を意味します。ランタイム・エンジンからオーケストレーション・プラットフォーム、レジストリ、セキュリティ・ツールに至るまで、さまざまなコンポーネントを包含することで、今日のペースの速いデジタル環境に求められる重要な効率性を企業に提供します。

もちろん、エコシステムの中心にはコンテナエンジンとオーケストレーションエンジンのシナジーがあります。これらのテクノロジーは共に、コンテナ化されたアプリケーションをライフサイクルの複雑な段階を通してガイドします。

コンテナエンジンは個々のコンテナを作成してパッケージ化し、オーケストレータエンジンは分散インフラ全体で複数のコンテナを管理してオーケストレーションします。

開発中、コンテナエンジンは迅速なプロトタイピングとテストを促進し、開発者は迅速かつ効率的に反復することができます。アプリケーションが成熟すると、オーケストレータはそれを本番環境に移行し、実世界のワークロードを処理するための堅牢でスケーラブルな基盤を提供します。

コンテナとオーケストレーションエンジンのダイナミクスを表すDockerとKubernetes

図4:コンテナとオーケストレーションエンジンのダイナミクスを表すDockerとKubernetes

ビジネスリーダーにとっての戦略的意義

ソフトウェアデプロイメントにおける敏捷性とスピード

コンテナエコシステムはアプリケーションのデプロイメントを加速します。アプリケーションをコンテナにカプセル化することで、組織は基礎となる環境に関係なく、開発から本番稼動に迅速に移行できます。この俊敏性は、市場の変化やユーザーの要求に迅速に対応する必要がある組織にとって極めて重要です。

効率性の向上とリソースの最適化

従来の仮想マシンに代わる選択肢を提供するコンテナは、基盤となる OSカーネルを 共有し、消費するリソースを削減します。この効率性は、運用コストの削減とコンピューティングリソースの利用率の向上につながり、大規模アプリケーションを管理する企業にとって重要な利点となります。

拡張性と柔軟性

需要が変動するデジタル企業にとって不可欠なコンテナ・エコシステム内のオーケストレータは、企業がパフォーマンスを損なうことなくアプリケーションを大規模化することを可能にします。コンテナエコシステムは全体として、スケーリングとリソースの可用性に関するこれまでの能力を向上させます。

環境間の一貫性と移植性

コンテナのエコシステムは、一貫性と移植性を保証します。コンテナでパッケージ化されたアプリケーションは、オンプレミスデータセンターからパブリッククラウドまで、さまざまなクラウド環境で均一かつ確実に実行できます。

ホステッドコンテナ環境の解剖

図5:ホステッドコンテナ環境の解剖

コンテナ主導の未来への準備

将来的には、すべてではないにせよ、ほとんどのアプリケーションがコンテナ上で実行されるデジタル世界が到来します。エグゼクティブにとって、コンテナ・エコシステムの背後にあるシナジーを理解することは戦略的優位性をもたらします。情報に精通した視点を持つことで、現代のソフトウェア開発における進化する要求を予測し、効果的に満たすことができ、最適なROIを得ることができます。

 

コンテナ・オーケストレーションに関するFAQ

HelmはKubernetes用のパッケージマネージャで、Kubernetesクラスタ上のアプリケーションのデプロイと管理を簡素化します。あらかじめ設定されたKubernetesリソースであるチャートと呼ばれるパッケージを使用します。Helmチャートは、最も複雑なKubernetesアプリケーションの定義、インストール、アップグレードのプロセスを合理化します。チャート間の依存関係を管理し、制御された方法で更新します。Helmは、複雑なデプロイメントを管理するDevOpsチームにとって、効率的で反復可能な標準化された方法でアプリケーションをデプロイするために不可欠です。
KubernetesのReplicaSetは、指定された数のポッドレプリカが任意の時点で実行されていることを保証します。これは主に、指定された数の同一のポッドの可用性を保証するために使用されます。ポッドに障害が発生すると、ReplicaSetは新しいポッドを起動してそのポッドを置き換えます。ReplicaSetsは、特に分散された動的なクラウド環境において、アプリケーションの望ましい状態と高可用性を維持するために不可欠です。
Kubernetesのデプロイメントは、アプリケーションに宣言的な更新を提供します。アプリケーションに使用するイメージ、ポッドの数、更新方法など、アプリケーションのライフサイクルを記述することができます。デプロイメントはReplicaSetsを管理し、以前のデプロイメント状態にロールバックする機能を提供するため、ステートレス・アプリケーションを管理し、回復力とスケーラビリティを確保するために不可欠です。
KubernetesのStatefulSetは、ステートフルなアプリケーションを管理するために使用されます。デプロイメントによって管理されるステートレス・アプリケーションとは異なり、ステートフル・アプリケーションには永続的なストレージと一意のネットワーク識別子が必要です。StatefulSetsは各ポッドのスティッキーIDを保持し、各ポッドが異なるノードに移動しても、同じホスト名とストレージで再スケジュールされるようにします。
KubernetesのDaemonSetは、すべての(または一部の)ノードが特定のPodのコピーを実行することを保証します。クラスタにノードが追加されると、ポッドも自動的に追加されます。同様に、クラスタからノードが削除されると、それらのポッドはガベージコレクションされます。デーモンセットは、クラスタ全体でこれらのタスクのデプロイメントとスケーリングを自動的に管理するため、各ノードでロギング、モニタリング、ネットワークプロキシなどのタスクを実行するのに最適です。
Kubernetesにおけるサービスとは、ポッドの論理セットと、それらにアクセスするためのポリシーを定義する抽象化です。この抽象化により、作業定義とポッドが切り離されます。サービスは、通常セレクタによって決定されるポッドのセット間でトラフィックをルーティングします。依存するポッド間の疎結合を可能にし、ポッドにアクセスできる IP アドレスと DNS 名を提供します。サービスは、ネットワークに接続されたアプリケーションに簡単にアクセスでき、基盤となるポッド構成の変更に強いことを保証するために非常に重要です。
KubernetesのIngressは、クラスタ内のサービスに対する外部からのアクセスを管理するリソースで、通常はHTTPです。Ingressでは、URLパス、ロードバランシング、SSLターミネーション、名前ベースのバーチャルホスティングなど、サービスへのトラフィックルーティングのルールを定義できます。これは、外部からのコンテナ型アプリケーションへのアクセスを管理するための重要なコンポーネントであり、単純なポート転送よりも洗練された柔軟なソリューションを提供します。
KubernetesのConfigMapは、非機密データをキーと値のペアで格納するために使用されるリソースです。Podは、ConfigMapを環境変数、コマンドライン引数、またはボリューム内の設定ファイルとして使用できます。
KubernetesのPersistent Volume(PV)は、管理者によってプロビジョニングされた、またはStorage Classesを使用して動的にプロビジョニングされたクラスタ内のストレージの一部です。これはノードと同じようにクラスタ内のリソースであり、個々のポッドのライフサイクルを超えて永続します。PVソリューションは、アプリケーションに、基盤となるストレージインフラストラクチャに依存しないストレージをマウントする方法を提供し、ステートフルなアプリケーションに対して、より一貫性のある統合ストレージソリューションを提供します。
KubernetesにおけるPersistent Volume Claim(PVC)は、ユーザーによるストレージの要求です。ポッドがノードリソースを消費し、PVCがPVリソースを消費するという点では、ポッドに似ています。PVCは、ストレージがどのように提供され、どのように消費されるかの詳細を抽象化することを可能にします。ユーザがPVCを要求すると、クラスタ内の利用可能なPVにバインドされ、Kubernetes環境におけるストレージリソースの動的な管理方法を提供します。
Kubernetesにおけるオートスケーリングとは、現在の負荷に基づいてデプロイメント、レプリカセット、またはステートフルセット内のポッド数を自動的に調整することを指します。オートスケーリングは、アプリケーションがいつでも適切な量のリソースを確保し、リソースの利用率を向上させ、変動するワークロードを効率的に処理するのに役立ちます。Horizontal Pod Autoscaler(HPA)とVertical Pod Autoscaler(VPA)は、Kubernetesで一般的な2種類のオートスケーラで、それぞれポッド数とポッドサイズをスケーリングします。
前へ コンテナセキュリティとは?
次へ コンテナレジストリのセキュリティとは?