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

「コンテナオーケストレーション」

データ活用やDX成功に必要な考え方を、各種キーワードの解説で理解できる用語解説集です。
今回は、現在におけるソフトウェア開発、特にクラウド上でのソフトウェア開発において広く使われるようになっている技術「コンテナオーケストレーション」について考えてみましょう。

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

コンテナオーケストレーション(Container Orchestration)とは、コンテナ技術を用いたシステム開発や運用において、多数のコンテナを管理し運用し制御する自動化技術のことです。
昨今、マイクロサービスがITシステムのアーキテクチャとして採用されることが多くなりましたが、コンテナオーケストレーションはコンテナ技術を用いたマイクロサービスを実現する基盤技術として重要になっています。

コンテナ技術の出現により「大量のコンテナ」が活用される時代に

コンテナオーケストレーションの前提として、広く使われるようになったコンテナ技術の存在があります。仮想マシンのようなソフトウェアの実行環境の分離を、少ないオーバーヘッドで効率的に実現できる技術です。詳しくは以下をご覧ください。

コンテナ|用語集

コンテナ技術により実行環境の分離が容易に利用できるようになったことから、実行環境を分離する必要に迫られてのコンテナの利用のみならず、より積極的にコンテナ技術が利用されるようになります。

あるいは、コストがかかる仮想マシンと違って、コンテナは手軽にどんどん利用できました。そうなると大量のコンテナが活用されるようになってきます。なかでもクラウド時代のシステムアーキテクチャとして注目される「マイクロサービス」では、「システムを多数の独立した小さな部分」(サービス)から構成する考え方でシステム開発を行いますが、それら多数の小さな部分を、コンテナ技術を用いた「多数のコンテナ」で実現しています。

マイクロサービス(Microservices)|用語集

ともかくも、コンテナ技術という便利な技術ができて、様々な形でコンテナがどんどん利用されるようになりつつあります。例としては大量のコンテナを使って実現するマイクロサービスがあります。

大量のコンテナをどうするのか問題

仮想マシンでも行われていたようなこと、例えば経理システムと生産管理システムの実行環境を分離するためにそれぞれのシステムをコンテナに入れて利用する程度であれば、人がコンテナを管理して運用することができるでしょう。

しかしマイクロサービスアーキテクチャでは、例えば経理システムが数十のコンテナで構成されていて、状況に応じてコンテナは追加で起動されたりもしているような状況になります。マイクロサービスで作られているクラウドサービスになると、数百や数千のコンテナの群れでサービスが構成されているようなことも出てきます。そうなると人による管理では運用しきれなくなり、大量のコンテナを自動運用する運用基盤が必要になってきます。それがコンテナオーケストレーション技術です。

例えば、大量のコンテナがそれぞれどのマシンで実行されているのか把握できる必要がありますし、各コンテナでの処理の実行状況や実行ログなども把握できる必要があります。このように状況が「見える化」されている状態を可観測性(オブザーバビリティ)があると言いますが、多数のコンテナがある環境で高い可観測性を維持できる運用基盤が必要になります。

また、旧来の運用での死活監視と同じように、コンテナ内のソフトウェアがきちんと動いているかを監視して問題があれば、停止処理と再起動などの所定の対応を自動的に行うことでシステムの機能を維持する機能により、システムに回復性を持たせる必要がありますし、処理の負荷状況にあわせて、高負荷の時には所定のコンテナを大量に自動起動し、負荷が下がったら自動的にコンテナを減らす、いわゆるオートスケーリングの処理を行う必要もあります。

あるいはそのような機能が備わっているコンテナの自動運用基盤があってこそ、マイクロサービスでのシステムの開発と運用は現実的に可能になります。

どうやって大量のコンテナを自動管理するのか

旧来的なITインフラの管理では、インフラエンジニアがサーバの状況などを監視して必要なオペレーションを手作業で行っていたことが多いと思います。コンテナオーケストレーション技術では、基本的にコンテナの運用は自動で行い、コンテナ群をどのように運用するのかはプログラミングのように設定ファイルを書く形で行います。

また、どのようなことを実行するかを記述するのではなく、望ましいコンテナの状態を書く(宣言的な記述)ことでコンテナオーケストレーション技術にその状態を実現させるような使い方をすることが多いのも特徴です。

例えば、この種類のコンテナは複数のサーバに分散して最低3つ以上起動した状態を維持し、死活監視をして応答がなかったらコンテナを破棄する、コンテナごとの平均の処理負荷が70%を超えていたらコンテナの数を自動的に増やし、30%を切っていたらコンテナの数を自動的に減らす、というような実現してほしい状態を記述して、それにより自動運用してもらいます。

以前なら人間が手作業で運用していた世界が、プログラミングのようなことをすることで、例えば1万を超えるような大量のコンテナを自動運用できるような世界に変化したということでもあります。このような変化をInfrastructure as Code(IaC)と呼ぶこともあります。

システムのアーキテクチャを実現する手段として

旧来的なシステム開発では、例えばどのようなシステムを作る必要があるか要件を分析し、それに基づいてオブジェクト指向でシステム全体を設計するようなことがあったと思います。例えば各クラスやインスタンスがシステムの構成要素で、それらがクラスとかモジュールのような全体的な設計で組み上げられているようなイメージです。

マイクロサービスでは、ITシステムの機能を小さくちぎって機能単位ごとに独立したサービスとしてコンテナに入れるような考え方をします。システムの構成要素はコンテナになり、それらを構成要素として組み上げてシステム全体を組み上げる手段は、コンテナオーケストレーション技術ということになります。

運用を自動化する技術でもあり、ITシステムのアーキテクチャを実現する技術としても機能することになります。またこれは、旧来的なITインフラの運用とシステムアーキテクチャの設計の境界線がなくなっていることも意味します。

(狭義の)クラウドネイティブを実現する手段

このような状況から、「クラウドネイティブ」とはコンテナを用いたマイクロサービスアーキテクチャのことであるとされることがあります。以下のCNCFによる定義が引用されていることが良くあります。

CNCF Cloud Native Definition v

>クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。

ただし、上記の定義はコンテナ技術の普及と推進に取り組んでいるCNCF(Cloud Native Computing Foundation)によるものであり、クラウド時代になって「考え方が変わった」ことはコンテナ以外にも多くあり、またコンテナ(やマイクロサービス)を使わないからといってクラウド時代の技術ではない、とは言えないところもあります。

コンテナオーケストレーション技術が活用されている例

マイクロサービスやコンテナオーケストレーション技術を使用しているクラウドサービスは多くありますが、AWSやNetflixが早期からマイクロサービスを全面的に採用していることが良く知られています。

Netflixではコンテナオーケストレーション技術としてKubernetesが採用され、万単位のコンテナを用いた非常に大規模なマイクロサービスが実現されています。また、Uberでは事業の成長に伴って、もともとマイクロサービスではないモノリシック(一枚岩)なアプリケーションで運用されていたクラウドサービスを、マイクロサービスアーキテクチャに移行する取り組みを行っています。

クラウドサービスとしても提供されるコンテナオーケストレーション技術

このようなコンテナの群れを自動運用するソフトウェアはいくつかありますが、Googleが開発した「Kubernetes」が広く知られ広く利用されています。

また、自前でコンテナオーケストレーションを実現するソフトウェアをセットアップしてコンテナを利用できる環境を整えなくても、各クラウドからセットアップ済みですぐ利用できる環境がクラウドサービスとして提供されるようになっています。

そのようなサービスを利用すれば、自分たちでマイクロサービスをコンテナの形で開発して用意し、それらをどのように運用してほしいか設定ファイルを書いて渡せば、自動運用されて自分たちの作ったITシステムを利用し、あるいは外部に提供することができるようになります。

コンテナに関連しては各クラウドから数多くのサービスが提供されていますが、Kubernetesに関連したサービスだけでもAWSなら「Amazon ECS(Elastic Container Service)」「Amazon EKS(Elastic Kubernetes Service)」というサービスが、Googleクラウドなら「Google Kubernetes Engine」、Microsoft Azureなら「Azure Kubernetes Service」というようなサービスが提供されています。

関係するキーワード(さらに理解するために)

  • コンテナ
    • コンテナとは、一つのOS実行環境内で、複数の独立したアプリケーションシステムの実行環境を作り出す技術のことです。それまで利用されてきた仮想マシンによるハードウェアレベルの仮想化に対して、OSレベルでの仮想化(OS-level virtualization)を行います。
  • マイクロサービス
    • マイクロサービスは、コンテナ技術により実現し流行するようになった、新しいシステム開発のスタイルです。システムの構成要素を積極的に独立した小さい単位であるマイクロサービスとして作り、システム全体を多数のマイクロサービスで構成する考え方です。
  • クラウドネイティブ
    • クラウドサービスの開発、あるいはクラウドサービス上でのシステム開発では、個別のマシン上でそれぞれ実行されるソフトウェアを開発することが多かった従来のシステム開発とは前提となる事情が大きく違うため、これまでとは違う考え方や違う手法、違う手段を用いたクラウド時代に即した取り組みが求められるようになりました。

クラウド時代、コンテナの時代でも活躍するファイル連携ミドルウェア「HULFT10」

HULFTはメインフレームの時代からクラウド時代の現在まで、様々なITシステム開発のスタイルや技術的環境の違いを超えたシームレスなデータ連携を実現してきました。

ファイル連携ミドルウェアの国内デファクトスタンダード「HULFT10」

国内で圧倒的な実績がある、国産MFT製品の最高峰にして「ファイル連携基盤のデファクトスタンダード」である「HULFT(ハルフト)」を是非お試しください。

HULFTはメインフレーム時代からUNIX時代への技術移行の時期に、新旧技術環境を非常に実用的に、また徹底的な高信頼性で金融機関のシステムでも採用される連携できる技術として登場し、その後WindowsやLinuxへも対応してあらゆる環境の違いを吸収してデータ連携できる手段への進化、現在ではクラウドサービスとのシームレスな連携にも対応しています。

ファイル連携は古い技術の印象もあるかもしれませんが、今ではクラウドサービスでの利用にも配慮がなされており、コンテナ環境での利用がスムーズに行える最新バージョンの「HULFT10」も開発されています。

今でもメインフレームが活躍している一方、WindowsやLinuxはもちろん、Amazon S3などクラウド上のオブジェクトストレージとの連携、さらにはコンテナ技術を用いた開発の世界など、技術も違えば考え方も重視されることも違う分野があります。それぞれの分野のエンジニアが苦労することなく互いにデータ連携する手段として、HULFTを活用ください。

ファイル転送の仕組みを学ぶ HULFT 製品紹介・オンラインセミナー
HULFT-WebConnect 製品紹介・オンラインセミナー
HULFT10(ハルフトテン)for Container Services

用語集 コラム一覧

英数字・記号

あ行

か行

さ行

た行

な行

は行

ま行

や行

ら行

わ行

» データ活用コラム一覧

Recommended Content

Related Content

Return to column list