IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-情報処理装置および情報処理方法 図1
  • 特開-情報処理装置および情報処理方法 図2
  • 特開-情報処理装置および情報処理方法 図3
  • 特開-情報処理装置および情報処理方法 図4
  • 特開-情報処理装置および情報処理方法 図5
  • 特開-情報処理装置および情報処理方法 図6
  • 特開-情報処理装置および情報処理方法 図7
  • 特開-情報処理装置および情報処理方法 図8
  • 特開-情報処理装置および情報処理方法 図9
  • 特開-情報処理装置および情報処理方法 図10
  • 特開-情報処理装置および情報処理方法 図11
  • 特開-情報処理装置および情報処理方法 図12
  • 特開-情報処理装置および情報処理方法 図13
  • 特開-情報処理装置および情報処理方法 図14
  • 特開-情報処理装置および情報処理方法 図15
  • 特開-情報処理装置および情報処理方法 図16
  • 特開-情報処理装置および情報処理方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024016940
(43)【公開日】2024-02-08
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
   G06F 9/50 20060101AFI20240201BHJP
   G06F 9/455 20180101ALI20240201BHJP
【FI】
G06F9/50 150A
G06F9/455 150
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022119248
(22)【出願日】2022-07-27
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】中原 紘平
(72)【発明者】
【氏名】伊與田 敏
(72)【発明者】
【氏名】道場 栄介
(57)【要約】
【課題】コンテナ起動時間を低減すること。
【解決手段】記憶部11は、ノード20,30,40それぞれが保持する、コンテナのイメージを示すキャッシュ情報11aを記憶する。処理部12は、キャッシュ情報11aに基づいて、ノード20により実行中であるコンテナ22に対応するイメージ21aが記憶されていないノード30,40のうちリソースの空き容量が最も多いノード40にイメージ41bを格納する。イメージ41bは、イメージ21aの複製である。処理部12は、コンテナ22のスケールアウトまたはコンテナ22の障害に応じてコンテナ22と同じコンテナ43を起動させる場合、コンテナ22が動作していないノードのうち、イメージ41bを保持するノード40によりコンテナ43を起動させる。
【選択図】図1
【特許請求の範囲】
【請求項1】
複数のノードそれぞれが保持する、コンテナのイメージを示すキャッシュ情報を記憶する記憶部と、
前記キャッシュ情報に基づいて、前記複数のノードのうちの第1ノードにより実行中である第1コンテナに対応する第1イメージが記憶されていない、前記第1ノード以外のノードのうちリソースの空き容量が最も多い第2ノードに前記第1イメージの複製である第2イメージを格納し、前記第1コンテナのスケールアウトまたは前記第1コンテナの障害に応じて前記第1コンテナと同じ第2コンテナを起動させる場合、前記第1コンテナが動作していないノードのうち、前記第2イメージを保持する前記第2ノードにより前記第2コンテナを起動させる処理部と、
を有する情報処理装置。
【請求項2】
前記処理部は、前記第2コンテナを起動させる際に、前記キャッシュ情報に基づいて前記第2イメージを保持する前記第2ノードを優先して選択し、前記第2ノードにより前記第2コンテナを起動させる、
請求項1記載の情報処理装置。
【請求項3】
前記処理部は、前記複数のノードそれぞれの前記リソースの空き容量を、当該ノードで動作中のコンテナにより消費される第1リソース量と、当該ノードで未動作であるが当該ノードが保持するイメージから起動可能なコンテナの動作に所要される第2リソース量とに基づいて評価する、
請求項1記載の情報処理装置。
【請求項4】
前記処理部は、前記複数のノードそれぞれが保持する前記イメージの情報を定期的に収集し、前記キャッシュ情報を更新する、
請求項1記載の情報処理装置。
【請求項5】
前記処理部は、前記第1イメージから複製された前記第2イメージを前記第1ノードから前記第2ノードへ転送させることで、前記第2イメージを前記第2ノードに格納する、
請求項1記載の情報処理装置。
【請求項6】
前記処理部は、前記第2コンテナを起動させる際に、前記第2イメージを保持する前記第2ノードが複数ある場合、複数の前記第2ノードのうちリソースの空き容量が最も多い前記第2ノードにより前記第2コンテナを起動させる、
請求項1記載の情報処理装置。
【請求項7】
コンピュータが、
複数のノードそれぞれが保持するコンテナのイメージを示すキャッシュ情報に基づいて、前記複数のノードのうちの第1ノードにより実行中である第1コンテナに対応する第1イメージが記憶されていない、前記第1ノード以外のノードのうちリソースの空き容量が最も多い第2ノードに前記第1イメージの複製である第2イメージを格納し、
前記第1コンテナのスケールアウトまたは前記第1コンテナの障害に応じて前記第1コンテナと同じ第2コンテナを起動させる場合、前記第1コンテナが動作していないノードのうち、前記第2イメージを保持する前記第2ノードにより前記第2コンテナを起動させる、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置および情報処理方法に関する。
【背景技術】
【0002】
コンピュータにおける仮想化技術の1つにコンテナ型仮想化がある。コンテナ型仮想化では、アプリケーションの起動に用いるライブラリなどの資源を纏めたコンテナが、ソフトウェアの実行環境として定義される。コンテナの起動に用いられるデータは、コンテナイメージまたは単にイメージと言われる。例えば、コンピュータにより実現されるノードはコンテナエンジンを実行し、コンテナイメージからノード上にコンテナを起動することができる。ノードは、CPU(Central Processing Unit)やRAM(Random Access Memory)などのリソースを有する物理マシンでもよいし、物理マシン上で動作する仮想マシンでもよい。
【0003】
例えば、スケールアウト対象となるコンテナである追加対象コンテナを起動するコンテナ管理装置の提案がある。提案のコンテナ管理装置は、既存のノードに追加対象コンテナを起動できるリソースがなければ、既存のノードで起動中のコンテナのうち停止させるコンテナを選択して当該コンテナを停止させ、既存のノードで追加対象コンテナを起動する。
【0004】
また、起動対象のコンテナを起動させた場合の各コンテナホストでの複数種類の負荷を予測し、それらの負荷が最も小さいコンテナホストを起動対象のコンテナを起動するホストとして決定するコンテナ起動ホスト選択装置の提案もある。
【0005】
更に、ローカルサイトのレジストリ装置およびリモートサイトのレジストリ装置それぞれにコンテナイメージを格納するコンテナ提供支援システムの提案もある。提案のコンテナ提供支援システムは、ローカルサイトにてコンテナの利用時に障害が発生した際、リモートサイトにおいてコンテナイメージから当該コンテナを起動して業務を継続する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2020-154392号公報
【特許文献2】特開2020-160775号公報
【特許文献3】特開2020-95547号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
スケールアウト時などの新たなコンテナの起動の際、ノードによるコンテナ起動用のイメージの取得に時間がかかり、コンテナ起動時間が長くなることがある。1つの側面では、本発明は、コンテナ起動時間を低減することを目的とする。
【課題を解決するための手段】
【0008】
1つの態様では、情報処理装置が提供される。情報処理装置は記憶部と処理部とを有する。記憶部は、複数のノードそれぞれが保持する、コンテナのイメージを示すキャッシュ情報を記憶する。処理部は、キャッシュ情報に基づいて、複数のノードのうちの第1ノードにより実行中である第1コンテナに対応する第1イメージが記憶されていない、第1ノード以外のノードのうちリソースの空き容量が最も多い第2ノードに第1イメージの複製である第2イメージを格納する。処理部は、第1コンテナのスケールアウトまたは第1コンテナの障害に応じて第1コンテナと同じ第2コンテナを起動させる場合、第1コンテナが動作していないノードのうち、第2イメージを保持する第2ノードにより第2コンテナを起動させる。
【0009】
また、1つの態様では、情報処理方法が提供される。
【発明の効果】
【0010】
1つの側面では、コンテナ起動時間を低減できる。
【図面の簡単な説明】
【0011】
図1】第1の実施の形態の情報処理装置を説明する図である。
図2】第2の実施の形態の情報処理システムの例を示す図である。
図3】管理装置のハードウェア例を示す図である。
図4】管理装置の機能例を示す図である。
図5】リソースの空き容量指標値の計算例を示す図である。
図6】コンテナ管理テーブルの例を示す図である。
図7】キャッシュイメージテーブルの例を示す図である。
図8】リソーステーブルの例を示す図である。
図9】コンテナ起動時処理の例を示すフローチャートである。
図10】スケールアウトまたは自動復旧時処理の例を示すフローチャートである。
図11】イメージ配置およびコンテナ起動の例を示す図である。
図12】第3の実施の形態のアプリ消費リソーステーブルの例を示す図である。
図13】リソーステーブルの例を示す図である。
図14】コンテナ起動時処理の例を示すフローチャートである。
図15】スケールアウトまたは自動復旧時処理の例を示すフローチャートである。
図16】イメージ配置の例を示す図である。
図17】コンテナ起動の例を示す図である。
【発明を実施するための形態】
【0012】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0013】
図1は、第1の実施の形態の情報処理装置を説明する図である。
情報処理装置10およびノード20,30,40は、ネットワーク50に接続される。ノード20,30,40は、コンテナを実行する。コンテナの起動には、ノードが保持するコンテナイメージが用いられる。コンテナイメージは単にイメージと言われる。イメージは、例えば図示を省略しているコンテナレジストリ装置に集約して保持されてもよい。コンテナレジストリ装置は、ノード20,30,40にイメージを提供し得る。
【0014】
また、ノード20,30,40は、自ノードで動作するコンテナのイメージを保持する。ノード20,30,40は、自ノードで現在は動作していないが過去に動作していたコンテナのイメージを削除せずに保持していることもある。ノード20,30,40に保持されるイメージは、キャッシュイメージと言われることがある。
【0015】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAMなどの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12は、CPU、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
【0016】
また、ノード20,30,40は、それぞれ記憶部21,31,41を有する。記憶部21,31,41は、RAMやHDDなどの記憶装置により実現される。記憶部21,31,41はコンテナのイメージを記憶する。更に、図示を省略しているが、ノード20,30,40はCPUなどのプロセッサを有する。ノード20,30,40それぞれのプロセッサは、コンテナエンジンを実行し、コンテナエンジンの機能により、自ノードの記憶部に保持されるイメージに基づいてコンテナを動作させる。コンテナエンジンはコンテナランタイムと言われてもよい。ノードが有するCPUおよびRAMなどのリソースの一部が、当該ノードで動作するコンテナに割り当てられる。なお、ノード20,30,40は、プロセッサとRAMとを有する物理マシンにより実現されてもよいし、物理マシン上で動作する仮想マシンにより実現されてもよい。ノード20,30,40が仮想マシンにより実現される場合、物理マシンが備えるCPUおよびRAMなどリソースの一部が、当該ノードに割り当てられる。
【0017】
ここで、コンテナによりアプリケーションを提供することで、コンテナのスケールアウトや自動復旧によりアプリケーションの可用性を向上させることができる。アプリケーションの提供は、例えばネットワーク50を介し、不図示のクライアントコンピュータに対して行われる。スケールアウトは、コンテナの負荷に応じて、同じイメージを基に動作するコンテナの数を増加させることで、複数のノードに負荷を分散させる技術である。自動復旧は、コンテナが動作するノードが異常停止した場合などに、別ノードによりコンテナを自動起動させることで復旧させる技術である。
【0018】
そこで、情報処理装置10は、スケールアウトまたは自動復旧時における、ノード20,30,40によるコンテナの起動の高速化を図る。以下の説明では、スケールアウトまたは自動復旧時における起動の高速化対象のコンテナに対応するアプリケーションを「A」とする。例えば、スケールアウトまたは自動復旧時における起動の高速化対象とするコンテナまたは当該コンテナに対応するアプリケーション「A」はユーザにより予め指定されてもよい。ただし、ノード20,30,40で実行される全てのアプリケーションに対応するコンテナが、スケールアウトまたは自動復旧時における起動の高速化対象とされてもよい。
【0019】
記憶部11は、キャッシュ情報11aおよびリソース情報11bを記憶する。キャッシュ情報11aは、ノード20,30,40それぞれが保持する、コンテナのイメージを示す情報である。リソース情報11bは、ノード20,30,40それぞれのリソースの空き容量指標値を示す情報である。図1におけるリソース情報11bの「リソース空き容量」の記載は、空き容量指標値を示す。空き容量指標値は、ノード20,30,40それぞれのCPUおよびRAMなどの空きリソースの量を示す指標値である。空き容量指標値は、例えば該当ノードの空きCPU数(n)とRAMの空き容量(m)との線形結合(αn+βm)により計算されてもよい。α,βは正の定数である。CPU数は、例えばCPU1個のうちの10%(例えば動作クロック周波数の10%を0.1個とする)が最小単位とされる。空き容量指標値が大きい程、リソースの空き容量が多い。
【0020】
キャッシュ情報11aおよびリソース情報11bは、処理部12により生成され、記憶部11に格納される。処理部12は、所定のタイミングで、ノード20,30,40それぞれが保持するイメージの情報や空きリソース量の情報を、ノード20,30,40から収集し、キャッシュ情報11aおよびリソース情報11bを生成する。なお、ノード20,30,40それぞれの保有するCPU数やRAM容量が異なる場合、処理部12は、空き容量指標値を、ノード20,30,40全体のリソース量で正規化して求めてもよい。例えば、ノード20,30,40のCPU数の総和をN、ノード20,30,40のRAM容量の総和をMとする。このとき、該当ノードの空き容量指標値は(α*n/N+β*m/M)と計算されてもよい。また、所定のタイミングは、何れかのノードで特定のコンテナを起動したタイミングでもよいし、周期的なタイミングでもよい。特定のコンテナは、スケールアウトまたは自動復旧時の起動の高速化対象のコンテナである。
【0021】
ある時点で、ユーザの指示などに応じて、アプリケーション「A」に対応するコンテナ22が、ノード20で新たに起動される。このとき、記憶部21は、イメージ21a,21bを記憶する。イメージ21aは、コンテナ22のイメージである。イメージ21aは、コンテナレジストリ装置から新たにダウンロードされたものでもよい。イメージ21bは、コンテナ23のイメージである。コンテナ23は、ノード20で既に動作中であるアプリケーション「B」のコンテナである。また、記憶部31は、イメージ31aを記憶する。イメージ31aは、コンテナ32のイメージである。コンテナ32は、ノード30で既に動作中であるアプリケーション「C」のコンテナである。更に、記憶部41は、イメージ41aを記憶する。イメージ41aは、コンテナ42のイメージである。コンテナ42は、ノード40で既に動作中であるアプリケーション「D」のコンテナである。
【0022】
ノード20,30,40は、自ノードで動作するコンテナのイメージを保持する。この場合、例えばキャッシュ情報11aは、ノード20にイメージ21a,21bが保持され、ノード30にイメージ31aが保持され、ノード40にイメージ41aが保持されることを示す。また、リソース情報11bは、コンテナ22がノード20で起動された時点におけるノード20,30,40それぞれの空き容量指標値R1,R2,R3を示す。R3はR2より大きい(R3>R2)と仮定する。
【0023】
処理部12は、キャッシュ情報11aに基づいて、ノード20により実行中であるコンテナ22に対応するイメージ21aが記憶されていない、ノード20以外のノード30,40を特定する。
【0024】
処理部12は、ノード30,40のうちリソースの空き容量が最も多いノード40にイメージ21aの複製であるイメージ41bを格納する。イメージ41bは、イメージ21aと同様に、アプリケーション「A」に対応するコンテナのイメージである。処理部12は、ノード20により、イメージ21aからイメージ41bを生成させ、ノード20からノード40へネットワーク50を介してイメージ41bを転送させてもよい。あるいは、処理部12は、前述のコンテナレジストリ装置からイメージ21aと同じイメージ41bを取得し、ノード40に送信してもよい。更に別の例では、処理部12は、ノード40により、コンテナレジストリ装置からイメージ41bを取得させてもよい。コンテナレジストリ装置から取得されるイメージ41bも、イメージ21aの複製であると言うことができる。こうして、記憶部41にイメージ41bが予備的に格納される。この時点では、ノード40は、予備のイメージ41bに対応するコンテナを起動しないが、イメージ41bを記憶部41に保持したままとする。
【0025】
その後、処理部12は、コンテナ22のスケールアウトまたはコンテナ22の障害に応じてコンテナ22と同じコンテナを起動させることを決定する。この場合に、処理部12は、コンテナ22が動作していないノード30,40のうち、イメージ41bを保持するノード40によりコンテナ43を起動させる。コンテナ43は、コンテナ22と同様に、アプリケーション「A」に対応するコンテナである。コンテナ22のスケールアウトは、コンテナ22に対するアクセス負荷の増大に応じて行われる。コンテナ22の障害は、コンテナ22が異常停止したり、通信不能に陥ったりした状態である。コンテナ22の障害は、例えばノード20の一部または全部の機能の異常停止に起因する。
【0026】
ノード40は、コンテナ43の起動の際、自ノードの記憶部41に予め格納されたイメージ41bを使用可能である。このため、ノード40は、コンテナ43の起動のために、コンテナレジストリ装置などの他の装置から、イメージ41bを取得しなくてよい。
【0027】
情報処理装置10によれば、複数のノードそれぞれが保持する、コンテナのイメージを示すキャッシュ情報11aが取得される。キャッシュ情報11aに基づいて、複数のノードのうちの第1ノードにより実行中である第1コンテナに対応する第1イメージが記憶されていない、第1ノード以外のノードが特定される。特定されたノードのうちリソースの空き容量が最も多い第2ノードに第1イメージの複製である第2イメージが格納される。第1コンテナのスケールアウトまたは第1コンテナの障害に応じて第1コンテナと同じ第2コンテナを起動させる場合、第1コンテナが動作していないノードのうち、第2イメージを保持する第2ノードにより第2コンテナを起動させる。これにより、情報処理装置10は、コンテナの起動に要する時間、すなわち、コンテナ起動時間を低減できる。
【0028】
ここで、あるノードでコンテナを起動する際に、当該ノードが起動対象のコンテナのイメージを保持していない場合、当該ノードは、コンテナレジストリ装置などからイメージを取得することになる。この場合、イメージの取得に要する時間がコンテナ起動時間に加算される。このため、コンテナ起動時間が長くなる。
【0029】
一方、情報処理装置10によれば、ノード40の記憶部41には、イメージ21aと同じイメージ41bが予め格納される。このため、ノード40は、コンテナ43を起動する際、記憶部41に格納されているイメージ41bを使用可能である。したがって、ノード40は、コンテナ43の起動のために、コンテナレジストリ装置などの他の装置から、イメージ41bを取得しなくてよい。よって、ノード40においてイメージ41bの取得に要する時間が削減される。こうして、情報処理装置10は、コンテナ22のスケールアウトまたは自動復旧時において、コンテナ43の起動時間を低減できる。その結果、情報処理装置10は、コンテナ22,43により提供されるアプリケーション「A」の可用性を一層向上できる。
【0030】
また、情報処理装置10は、イメージ21aと同じイメージを保持していないノード30,40のうち、リソースの空き容量が最も多いノード40を、イメージ41bの格納先とする。リソースの空き容量が最も多いノード40は、他のノード(ノード30)よりもコンテナ43の起動時に、コンテナ43に割り当てるリソースを適切に確保できる可能性が高い。仮にコンテナ43に割り当てるリソースを確保できない場合、他のノードでコンテナ43を起動することになり、そのために他のノードでコンテナ43のイメージを取得するなどの余計なオーバーヘッドが生じる。そこで、情報処理装置10は、リソースの空き容量が最も多いノード40を、イメージ41bの格納先とすることで、余計なオーバーヘッドが生じる可能性を減らせ、コンテナ43の起動の円滑化を図れる。また、情報処理装置10は、リソースの空き容量が最も多いノード40を、イメージ41bの格納先とし、当該ノード40でコンテナ43を起動させることで、ノード30,40の負荷が偏らないように適切な負荷分散を図れる利点もある。
【0031】
以下では、より具体的な例により、情報処理装置10の機能を更に詳細に説明する。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
【0032】
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、管理装置100およびノード200,200a,200b,…(以降、ノード200,200a,200b,…の任意のノードをノード200nということがある)を有する。管理装置100およびノード200nは、ネットワーク60に接続される。ネットワーク60は、例えばLAN(Local Area Network)である。ネットワーク60には、コンテナレジストリ70および端末装置80が接続される。コンテナレジストリ70および端末装置80は、インターネットやWAN(Wide Area Network)を介して、ネットワーク60に接続されてもよい。
【0033】
第2の実施の形態の情報処理システムは、ノード200nによりコンテナを実行する。コンテナ上のアプリケーションは、端末装置80により利用される。当該アプリケーションを利用する端末装置80は、複数存在し得る。
【0034】
コンテナレジストリ70は、コンテナのイメージを集約して保持するサーバである。コンテナレジストリ70には、複数のアプリケーションに対応する複数のイメージが予め登録される。コンテナレジストリ70は、ノード200nにイメージを提供する。
【0035】
端末装置80は、ユーザにより操作されるクライアントである。端末装置80は、コンテナ上のアプリケーションにリクエストを送信し、当該リクエストに対する処理結果を受信する。
【0036】
管理装置100は、ノード200nによるコンテナの実行を管理するサーバである。管理装置100は、端末装置80を介してユーザにより指示されたコンテナの起動をノード200nに指示する。また、管理装置100は、ノード200nを監視し、コンテナのスケールアウトや自動復旧時におけるコンテナの起動を制御する。管理装置100は、第1の実施の形態の情報処理装置10の一例である。
【0037】
ノード200nは、コンテナを実行するサーバである。ノード200nは、コンテナランタイムを実行する。ノード200nは、コンテナランタイムの機能により、自ノードが保持するイメージからコンテナを起動する。管理装置100による管理対象のノードのグループは、クラスタと言われる。
【0038】
図3は、管理装置のハードウェア例を示す図である。
管理装置100は、CPU101、RAM102、HDD103、GPU(Graphics Processing Unit)104、入力インタフェース105、媒体リーダ106およびNIC(Network Interface Card)107を有する。なお、CPU101は、第1の実施の形態の処理部12の一例である。RAM102またはHDD103は、第1の実施の形態の記憶部11の一例である。
【0039】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、管理装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0040】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、管理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0041】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、管理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0042】
GPU104は、CPU101からの命令に従って、管理装置100に接続されたディスプレイ61に画像を出力する。ディスプレイ61としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0043】
入力インタフェース105は、管理装置100に接続された入力デバイス62から入力信号を取得し、CPU101に出力する。入力デバイス62としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、管理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0044】
媒体リーダ106は、記録媒体63に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体63として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0045】
媒体リーダ106は、例えば、記録媒体63から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体63は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体63やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0046】
NIC107は、ネットワーク60に接続され、ネットワーク60を介して他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。NIC107は、無線通信インタフェースでもよい。
【0047】
ノード200n、コンテナレジストリ70および端末装置80は、管理装置100と同様のハードウェアにより実現される。
図4は、管理装置の機能例を示す図である。
【0048】
管理装置100は、記憶部110および制御部120を有する。記憶部110には、RAM102やHDD103の記憶領域が用いられる。制御部120は、RAM102に記憶されたプログラムがCPU101により実行されることで実現される。
【0049】
記憶部110は、制御部120の処理に用いられる情報を記憶する。具体的には、記憶部110は、コンテナ管理テーブル、キャッシュイメージテーブルおよびリソーステーブルを記憶する。コンテナ管理テーブルは、ノード200nで動作中のコンテナに関する情報である。キャッシュイメージテーブルは、ノード200nが保持するコンテナのイメージに関する情報である。リソーステーブルは、ノード200nのリソースに関する情報である。ここで、リソースは、ノード200nが有するCPUおよびRAM(メモリ)である。
【0050】
制御部120は、ノード200nによるコンテナの実行を制御する。また、制御部120は、あるコンテナについて、スケールアウトや自動復旧時に当該コンテナと同じコンテナを他ノードで起動させるために、当該コンテナに対応する予備のイメージを他ノードへ予め配置する。制御部120は、ノード監視部121、イメージ配置制御部122およびコンテナ起動制御部123を有する。
【0051】
ノード監視部121は、ノード200nを監視する。ノード監視部121は、ノード200nで動作中のコンテナの情報を収集し、コンテナ管理テーブルに記録する。ノード監視部121は、ノード200nが保持するコンテナのイメージの情報を収集し、キャッシュイメージテーブルに記録する。ノード監視部121は、ノード200nが有するリソースの情報を収集し、リソーステーブルに記録する。ノード監視部121は、周期的なタイミングまたは新たなコンテナを起動するタイミングで、これらの情報をノード200nから収集する。
【0052】
また、ノード監視部121は、ノード200nの負荷に応じたコンテナのスケールアウトの実行要否や、コンテナの障害に応じた自動復旧の実行要否を判断する。ノード監視部121は、スケールアウトや自動復旧の実行が必要であると判断すると、該当のコンテナの起動をコンテナ起動制御部123に指示する。
【0053】
イメージ配置制御部122は、ノード200nに対する予備のイメージの配置を制御する。具体的には、イメージ配置制御部122は、記憶部110に記憶されたコンテナ管理テーブルおよびキャッシュイメージテーブルに基づいて、予備のイメージの配置対象のコンテナのイメージを保持していないノードを特定する。
【0054】
イメージ配置制御部122は、コンテナ管理テーブルおよびリソーステーブルに基づいて、特定したノードのうちリソースの空き容量が最も多いノードを予備のイメージの配置先に決定する。このとき、イメージ配置制御部122は、各ノードの空き容量指標値を評価する。空き容量指標値の計算方法は後述される。イメージ配置制御部122は、決定した配置先ノードに予備のイメージを格納する。この段階では、配置先ノードでは予備のイメージからのコンテナの起動は行われない。
【0055】
コンテナ起動制御部123は、ノード200nによるコンテナの起動を制御する。コンテナ起動制御部123は、端末装置80からコンテナの起動指示を受け付ける。すると、コンテナ起動制御部123は、ノード監視部121により収集された情報に基づいて、各ノードの空き容量指標値を計算する。例えば、コンテナ起動制御部123は、各ノードの空き容量指標値に基づいて、リソースの空き容量が最も多いノードによりコンテナを起動させる。
【0056】
また、コンテナ起動制御部123は、ノード監視部121から、スケールアウトや自動復旧に応じたコンテナの起動指示を受け付けることもある。すると、コンテナ起動制御部123は、ノード監視部121により収集された情報に基づいて計算される各ノードの空き容量指標値に基づいて、リソースの空き容量が最も多いノードによりコンテナを起動させる。
【0057】
図5は、リソースの空き容量指標値の計算例を示す図である。
空き容量指標値は、各ノードのCPU数およびメモリ容量の空きをそれぞれクラスタ内のCPU数の総和およびメモリ容量の総和で正規化して加算した値である。CPU数は、例えばCPU1個の10%(例えば、動作クロック周波数の10%を0.1個とする)が最小単位とされる。1CPU当たりのスペックは各ノードで同じとする。各ノードが保有するCPU数は異なってもよい。
【0058】
クラスタ内のノードのCPU数の総和をN、クラスタ内のノードのメモリ容量の総和をMとする。このとき、利用可能CPU数nかつ利用可能メモリ容量mのノードの空き容量指標値は(α*n/N+β*m/M)と計算される。α,βは、CPU数およびメモリ容量に対する重みであり、予め定められる正の実数である。本例ではα=β=1とする。また、利用可能CPU数は、空きCPU数と言われてもよい。また、利用可能メモリ容量は、空きメモリ容量と言われてもよい。更に、利用可能CPU数は、ノードの(保有CPU数-消費CPU数)により計算される。利用可能メモリ容量は、ノードの(保有メモリ容量-消費メモリ容量)により計算される。
【0059】
ここで、図5では、一例として、クラスタに属するノードが、ノード200d,200e,200fと仮定した場合のノード200d,200e,200fそれぞれの空き容量指標値の計算例を示す。ノード200dの保有CPU数は4であり、保有メモリ容量は8GB(Giga Bytes)である。ノード200eの保有CPU数は6であり、保有メモリ容量は12GBである。ノード200fの保有CPU数は2であり、保有メモリ容量は4GBである。この場合、N=12であり、M=24GBである。
【0060】
図5(A)は、ノード200dに対する空き容量指標値の計算例を示す。ノード200dにおいて、利用可能CPU数n=2.2であり、利用可能メモリ容量m=4.5GBであるとする。この場合、ノード200dの空き容量指標値は、2.2/12+4.5GB/24GB≒0.37である。
【0061】
図5(B)は、ノード200eに対する空き容量指標値の計算例を示す。ノード200eにおいて、利用可能CPU数n=4.8であり、利用可能メモリ容量m=9.5GBであるとする。この場合、ノード200eの空き容量指標値は、4.8/12+9.5GB/24GB≒0.80である。
【0062】
図5(C)は、ノード200fに対する空き容量指標値の計算例を示す。ノード200fにおいて、利用可能CPUn=0.5であり、利用可能メモリ容量m=1.5GBであるとする。この場合、ノード200fの空き容量指標値は、0.5/12+1.5GB/24GB≒0.10である。
【0063】
図5の例の場合、リソースの空き容量が最も多いノードは、空き容量指標値の最も大きいノード200eである。こうして、イメージ配置制御部122およびコンテナ起動制御部123は、各ノードの空き容量指標値に基づいて、リソースの空き容量が最も多いノードを特定する。
【0064】
図6は、コンテナ管理テーブルの例を示す図である。
コンテナ管理テーブル111は、記憶部110に記憶される。コンテナ管理テーブル111には、各ノードで動作中のコンテナの情報が登録される。コンテナ管理テーブル111は、ノード名、コンテナ名、イメージ名:版数、消費CPU数および消費メモリ容量の項目を含む。
【0065】
ノード名の項目には、ノード名が登録される。ノード名はノードの識別情報である。コンテナ名の項目には、該当のノードで動作中であるコンテナのコンテナ名が登録される。コンテナ名はコンテナの識別情報である。イメージ名:版数の項目には、当該コンテナの起動に用いられたイメージのイメージ名と版数との組が登録される。イメージ名と版数との組は、イメージの識別情報である。消費CPU数の項目には、当該コンテナにより消費されるCPU数が登録される。消費メモリ容量の項目には、当該コンテナにより消費されるメモリ容量が登録される。メモリ容量の単位は例えばGBである。
【0066】
ここで、ノード200のノード名を「node01」とする。ノード200aのノード名を「node02」とする。ノード200bのノード名を「node03」とする。
例えば、コンテナ管理テーブル111は、ノード名「node01」、コンテナ名「app01-01」、イメージ名「app01:2.1」、消費CPU数「0.5」、消費メモリ容量「1」のレコードを有する。このレコードは、ノード200でコンテナ名「app01-01」のコンテナが動作しており、当該コンテナにより使用されるCPU数が0.5個、使用されるメモリ容量が1GBであることを示す。また、コンテナ名「app01-01」のコンテナに対応するイメージのイメージ名:版数が「app01:2.1」であることを示す。イメージ名:版数の「app01:2.1」の表記は、イメージ名が「app01」であり、版数が「2.1」である。このように、コンテナのイメージは、イメージ名と版数との組により識別される。
【0067】
コンテナ管理テーブル111には、動作中の他のコンテナに関するレコードも登録されている。
図7は、キャッシュイメージテーブルの例を示す図である。
【0068】
キャッシュイメージテーブル112は、記憶部110に格納される。キャッシュイメージテーブル112には、各ノードが保持するイメージの情報が登録される。キャッシュイメージテーブル112は、ノード名およびイメージ名:版数の項目を含む。ノード名の項目には、ノード名が登録される。イメージ名:版数の項目には、イメージ名:版数が登録される。
【0069】
例えば、キャッシュイメージテーブル112は、ノード名「node01」、イメージ名:版数「app01:2.1」のレコードを有する。このレコードは、ノード200がイメージ名:版数「app01:2.1」で識別されるイメージを保持していることを示す。キャッシュイメージテーブル112には、各ノードが保持するイメージを示す複数のレコードが登録される。
【0070】
図8は、リソーステーブルの例を示す図である。
リソーステーブル113は、記憶部110に格納される。リソーステーブル113には、各ノードのリソースの情報が登録される。リソーステーブル113は、ノード名、CPU数、使用中のCPU数、メモリ容量、使用中のメモリ容量および空き容量指標値の項目を含む。
【0071】
ノード名の項目には、ノード名が登録される。CPU数の項目には、当該ノード名で識別されるノードが保有するCPU数が登録される。使用中のCPU数の項目には、当該ノードで使用中のCPU数が登録される。メモリ容量の項目には、当該ノードが保有するメモリ容量が登録される。メモリ容量の単位は例えばGBである。使用中のメモリ容量の項目には、当該ノードで使用中のメモリ容量が登録される。空き容量指標値の項目には、当該ノードに対して評価された空き容量指標値が登録される。
【0072】
例えば、リソーステーブル113は、ノード名「node01」、CPU数「4」、使用中のCPU数「1.5」、メモリ容量「6」、使用中のメモリ容量「3」、空き容量指標値「0.4」のレコードを有する。このレコードは、ノード200が保有するCPU数が4個、メモリ容量が6GBであり、そのうち使用中のCPU数が1.5個、メモリ容量が3GBであること、および、ノード200の空き容量指標値が0.4であることを示す。
【0073】
ここで、リソーステーブル113では、一例として、クラスタ内のノードがノード200,200a,200bのみであると仮定したときの空き容量指標値の例が示されている。リソーステーブル113の例では、CPU数の総和N=4+2+4=10であり、メモリ容量の総和M=6+6+8=20GBである。
【0074】
したがって、ノード名「node01」のノード200の空き容量指標値は(4-1.5)/10+(6-3)/20=0.4である。ノード名「node02」のノード200aの空き容量指標値は(2-0.5)/10+(6-1)/20=0.4である。ノード名「node03」のノード200bの空き容量指標値は(4-1)/10+(8-2)/20=0.6である。
【0075】
次に、管理装置100の処理手順を説明する。
図9は、コンテナ起動時処理の例を示すフローチャートである。
コンテナ起動時処理は、新たなアプリケーションの配置のために新たなコンテナが起動されるタイミングや、スケールアウトや自動復旧のためのコンテナが起動されるタイミングで実行される。
【0076】
(S10)コンテナ起動制御部123は、クラスタ内の何れかのノードでコンテナを起動させる。
(S11)ノード監視部121は、クラスタ内の各ノードのコンテナとキャッシュイメージに関する情報を、各ノードから収集し、コンテナ管理テーブル111およびキャッシュイメージテーブル112に登録する。
【0077】
(S12)イメージ配置制御部122は、該当のコンテナ、すなわち、ステップS10で起動したコンテナが動作しておらず、かつ、該当のコンテナのキャッシュイメージをもつノードが存在するか否かを判定する。該当のコンテナで起動したコンテナが動作しておらず、かつ、該当のコンテナのキャッシュイメージをもつノードが存在する場合、コンテナ起動時処理が終了する。該当のコンテナで起動したコンテナが動作しておらず、かつ、該当のコンテナのキャッシュイメージをもつノードが存在しない場合、ステップS13に処理が進む。イメージ配置制御部122は、コンテナ管理テーブル111およびキャッシュイメージテーブル112に基づいて、ステップS12の判定を行う。
【0078】
(S13)ノード監視部121は、各ノードのリソースに関する情報を収集し、リソーステーブル113に登録する。ステップS13の段階では、リソーステーブル113の各レコードにおける空き容量指標値は未登録である。なお、ノード監視部121は、ステップS15の処理のために、各ノードにおいて使用可能なディスク容量(すなわち、HDDやSSDなどの補助記憶装置の使用可能な容量)の情報も収集し、記憶部110に格納する。
【0079】
(S14)イメージ配置制御部122は、リソーステーブル113に基づいて、各ノードの空き容量指標値を算出し、リソーステーブル113に登録する。
(S15)イメージ配置制御部122は、該当のコンテナが動作しておらず、かつ、該当のコンテナに必要なリソース容量が使用可能、かつ、使用可能なディスク容量が閾値よりも大きいノードを抽出する。ここで、イメージ配置制御部122は、該当のコンテナに必要なリソース容量が使用可能なノードをコンテナ管理テーブル111およびリソーステーブル113に基づいて抽出する。また、イメージ配置制御部122は、ステップS13で収集された各ノードの使用可能なディスク容量の情報に基づいて、使用可能なディスク容量が閾値よりも大きいノードを抽出する。ここで、閾値は、該当のコンテナのキャッシュイメージのサイズである。
【0080】
(S16)イメージ配置制御部122は、ステップS15で抽出したノードの中から空き容量指標値が最大のノードを、ステップS10で起動したコンテナに対応するキャッシュイメージの転送先に決定する。
【0081】
(S17)イメージ配置制御部122は、決定した転送先のノードに、該当のキャッシュイメージを転送する。例えば、イメージ配置制御部122は、ステップS10で該当のコンテナを起動したノード(転送元ノード)から、転送先のノードに、キャッシュイメージを転送するように指示し、転送元ノードによりキャッシュイメージを転送させてもよい。また、イメージ配置制御部122は、コンテナレジストリ70から該当のキャッシュイメージを取得して、転送先のノードに転送してもよい。あるいは、イメージ配置制御部122は、コンテナレジストリ70から該当のキャッシュイメージをダウンロードするように転送先のノードに指示し、転送先のノードにより該当のキャッシュイメージをダウンロードさせてもよい。こうして、転送先のノードにキャッシュイメージが予備的に格納される。そして、コンテナ起動時処理が終了する。
【0082】
なお、ノード監視部121は、ステップS11,S13の情報の収集およびテーブル更新を所定の周期で定期的に行ってもよい。その場合、制御部120は、ステップS11,S13をスキップすることで、コンテナ起動時処理の高速化を図ってもよい。
【0083】
次に、スケールアウトまたは自動復旧時における処理手順を説明する。
図10は、スケールアウトまたは自動復旧時処理の例を示すフローチャートである。
スケールアウトまたは自動復旧時処理は、ノード監視部121が各ノードの監視に応じて、あるコンテナについてスケールアウトまたは自動復旧を行うと判断した際に起動される。
【0084】
(S20)ノード監視部121は、各ノードのリソースに関する情報を収集し、リソーステーブル113に登録する。ステップS20の段階では、リソーステーブル113の各レコードにおける空き容量指標値は未登録である。このとき、ノード監視部121は、各ノードで動作するコンテナや各ノードで保持されるイメージの情報も収集して、コンテナ管理テーブル111およびキャッシュイメージテーブル112を最新の状態に更新してもよい。
【0085】
(S21)コンテナ起動制御部123は、リソーステーブル113に基づいて、各ノードの空き容量指標値を算出し、リソーステーブル113に登録する。
(S22)コンテナ起動制御部123は、該当のコンテナが動作しておらず、かつ、該当のコンテナに必要なリソース容量が使用可能であるノードを抽出する。ここで、コンテナ起動制御部123は、該当のコンテナに必要なリソース容量が使用可能なノードをコンテナ管理テーブル111およびリソーステーブル113に基づいて抽出する。
【0086】
(S23)コンテナ起動制御部123は、ステップS22で抽出したノードの中から空き容量指標値が最大のノードをコンテナの起動先に決定する。
(S24)コンテナ起動制御部123は、起動先に決定したノードにより該当のコンテナを起動させる。起動先のノードが起動対象のコンテナのキャッシュイメージを保持している場合、当該ノードは自ノードに保持されるキャッシュイメージから当該コンテナを起動することができる。そして、スケールアウトまたは自動復旧時処理が終了する。
【0087】
なお、ノード監視部121は、ステップS20の情報の収集およびテーブル更新を、所定の周期で定期的に行ってもよい。その場合、制御部120は、ステップS20をスキップすることで、スケールアウトまたは自動復旧時処理の高速化を図ってもよい。
【0088】
次に、管理装置100によるイメージ配置およびコンテナ起動の流れを説明する。
図11は、イメージ配置およびコンテナ起動の例を示す図である。
図11の例では、ノード200,200a,200b,200cがクラスタに属するものとする。ノード200,200a,200b,200cは、それぞれコンテナランタイム210,210a,210b,210cを実行し、コンテナランタイム210,210a,210b,210c上でコンテナを動作させる。
【0089】
まず、管理装置100は、ノード200,200aにおいて、それぞれ新たなコンテナ211,211aを起動させる。コンテナ211,211aは、何れもアプリケーション「A」のコンテナである。このとき、ノード200はイメージAを保持する。イメージAは、アプリケーション「A」に対応するイメージであることを示す。イメージAは、コンテナ211の起動元のイメージである。また、ノード200aは、イメージA,Bを保持する。イメージAは、コンテナ211aの起動元のイメージである。
【0090】
また、ノード200bは、イメージCを保持する。イメージCは、ノード200bで動作中のコンテナ211bの起動元のイメージである。更に、ノード200cは、イメージE,Dを有する。イメージE,Dは、コンテナ211cを含む、ノード200cで動作中のコンテナの起動元のイメージである。
【0091】
すると、管理装置100は、ノード200~200cからキャッシュイメージに関する情報の収集(キャッシュ情報収集)を行い、キャッシュイメージテーブル112に記録する(ステップST10)。このとき、管理装置100は、ノード200~200cから、動作中のコンテナやリソースに関する情報の収集も行い、コンテナ管理テーブル111およびリソーステーブル113に記録する。
【0092】
次に、管理装置100は、ノード200~200cそれぞれのリソースの空き容量指標値に基づいて、イメージAを保持していないノード200b,200cのうち、空き容量指標値が最大であるノード200bに、イメージAを転送させる(ステップST11)。例えば、管理装置100は、ノード200,200aのうちの任意のノード(例えば、ノード200a)からノード200bへイメージAを複製して転送させることで、ノード200bにイメージAを格納する。なお、管理装置100は、ノード200,200aのうちの負荷が小さい方のノードにより、ノード200bへのイメージAの転送を実行させてもよい。
【0093】
ここで、各ノードは同一LANに接続されることが多い。一方、コンテナレジストリ70は、インターネット上など、各ノードとは異なるネットワークに存在する場合もある。この場合、管理装置100は、ノード間でイメージを転送させる方が、コンテナレジストリ70からイメージをダウンロードするよりも、転送先のノードに高速にイメージを転送できる。
【0094】
そして、管理装置100は、アプリケーション「A」のコンテナ211,211aに対する負荷が高まり、スケールアウトを実行すると判定する。すると、管理装置100は、ノード200~200cそれぞれのリソースの空き容量指標値を評価する。そして、管理装置100は、イメージAを保持していないノード200b,200cのうち、空き容量指標値が最大であるノード200bにおいて、アプリケーション「A」のコンテナ212bを起動させる(ステップST12)。
【0095】
なお、ステップST12は、自動復旧の場合も同様である。例えば、管理装置100は、コンテナ211,211aの少なくとも何れかにおける障害を検知したときに、自動復旧の処理として、ステップST12を実行してもよい。
【0096】
ステップST12のタイミングにおいて、ノード200bは、イメージAを既に保持している。このため、ノード200bは、コンテナレジストリ70から新たにイメージAを取得しなくてよい。こうして、管理装置100は、ノード200bにおけるコンテナ212bの起動時間を低減できる。また、ノード200bにおけるコンテナ212bの起動が高速化される。その結果、管理装置100は、コンテナ211,211a,212bにより提供されるアプリケーション「A」の可用性を一層向上できる。
【0097】
また、管理装置100は、イメージAを保持していないノード200b,200cのうち、リソースの空き容量が最も多いノード200bを、予備のイメージAの格納先とする。リソースの空き容量が最も多いノード200bは、他のノード(ノード200c)よりも新たなコンテナの起動時に、当該コンテナに割り当てるリソースを適切に確保できる可能性が高い。仮に、新たなコンテナに割り当てるリソースを確保できない場合、他のノードでコンテナを起動することになり、そのための余計なオーバーヘッドが生じる。そこで、管理装置100は、リソースの空き容量が最も多いノードを、予備のイメージの格納先とすることで、余計なオーバーヘッドが生じる可能性を減らせ、スケールアウトや自動復旧時のコンテナの起動の円滑化を図れる。また、管理装置100は、リソースの空き容量が最も多いノードを、予備のイメージの格納先とし、当該ノードでコンテナを起動させることで、各ノードの負荷が偏らないように適切な負荷分散を図れる利点もある。
【0098】
[第3の実施の形態]
次に第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0099】
第3の実施の形態では、管理装置100は、スケールアウトまたは自動復旧時におけるコンテナ起動の際、当該コンテナの予備のイメージを配置したノードにより優先的にコンテナを起動させる機能を提供する。
【0100】
ただし、予備のイメージを配置したノードで優先してコンテナを起動する場合、イメージを多く保持するノードにコンテナが集中し易くなり、当該ノードでリソースが枯渇する可能性が高まる。そこで、第3の実施の形態では、管理装置100は、イメージ配置制御における各ノードの空き容量指標値の計算に、各ノードで動作していないが、各ノードで動作する可能性のあるコンテナによる消費リソース量を考慮する。そのため、管理装置100は、アプリ消費リソーステーブルを更に保持する。
【0101】
図12は、第3の実施の形態のアプリ消費リソーステーブルの例を示す図である。
アプリ消費リソーステーブル114は、記憶部110に格納される。例えば、アプリ消費リソーステーブル114は、記憶部110に予め記憶される。ただし、ノード監視部121は、コンテナ管理テーブル111やキャッシュイメージテーブル112の作成のために各ノードから収集した情報に基づいて、アプリ消費リソーステーブル114を作成し、記憶部110に格納してもよい。
【0102】
アプリ消費リソーステーブル114は、アプリケーションに対応するコンテナのイメージと、当該コンテナにより消費されるリソース量とを示す情報である。アプリ消費リソーステーブル114は、アプリ名、コンテナ数、コンテナイメージ、1コンテナ当たりの消費CPU数および1コンテナ当たりの消費メモリ容量の項目を含む。
【0103】
アプリ名の項目には、アプリケーションの名称が登録される。コンテナ数の項目には、該当のアプリケーションに対して実行されたコンテナの数が登録される。コンテナイメージの項目には、当該アプリケーションに対応するコンテナのイメージの識別名(イメージ名:版数)が登録される。1コンテナ当たりの消費CPU数の項目には、当該アプリケーションに対応するコンテナ1個当たりの消費CPU数が登録される。1コンテナ当たりの消費メモリ容量の項目には、当該アプリケーションに対応するコンテナ1個当たりの消費メモリ容量が登録される。メモリ容量の単位は、例えばGBである。
【0104】
例えば、アプリ消費リソーステーブル114は、アプリ名「app01」、コンテナ数「1」、コンテナイメージ「app01:2.1」、1コンテナ当たりの消費CPU数「0.5」、1コンテナ当たりの消費メモリ容量「1」のレコードを有する。このレコードは、アプリ名「app01」に対応するコンテナのイメージの識別名「app01:2.1」であり、当該コンテナ1個当たりの消費CPU数が0.5であり、同消費メモリ容量が1GBであることを示す。
【0105】
アプリ消費リソーステーブル114には、他のアプリケーションに対しても同様のレコードが登録される。なお、各アプリケーションに対して、コンテナのイメージの識別名、1コンテナ当たりの消費CPU数および同消費メモリ容量が予め分かっている場合、前述のように、アプリ消費リソーステーブル114には、これらの情報が予め登録されていてもよい。アプリ消費リソーステーブル114は、コンテナ数の項目を有していなくてもよい。
【0106】
例えば、イメージ配置制御部122は、コンテナ管理テーブル111、キャッシュイメージテーブル112およびアプリ消費リソーステーブル114に基づいて、各ノードで保持される未使用キャッシュイメージを抽出することができる。未使用キャッシュイメージとは、当該ノードで保持されるキャッシュイメージであって、当該ノードで動作していないコンテナのキャッシュイメージである。これらのテーブルの例では、ノード名「node03」に対応するノード200bに保持される、イメージ名:版数が「app03:1.4」のキャッシュイメージが未使用キャッシュイメージである。また、当該未使用キャッシュイメージから作成される1つのコンテナが消費するリソース量は、消費CPU2個、消費メモリ容量4GBとなる。
【0107】
未使用キャッシュイメージから作成されるコンテナが消費するリソース量は、該当のノードにおいて、当該コンテナにより将来利用される可能性のある潜在的な消費リソース量であると言える。
【0108】
なお、アプリ消費リソーステーブル114におけるコンテナの数の項目には、該当のアプリケーション用に1つのノードで起動されるコンテナの数が登録されてもよい。その場合、1コンテナ当たりの消費リソース量に当該コンテナの数を乗じた値が、当該アプリケーションに対応する各コンテナによる、該当のノードでの潜在的な消費リソース量となる。ただし、1つのアプリケーションに対し、該当のノードで起動されるコンテナの数が常に1つである場合、アプリ消費リソーステーブル114は、コンテナ数の項目をもたなくてもよい。
【0109】
例えば、イメージ配置制御部122は、クラスタ内のノード200,200a,200bに対して、未使用キャッシュイメージを考慮した実質の空き容量指標値を次のように求める。
【0110】
図13は、リソーステーブルの例を示す図である。
リソーステーブル113aは、リソーステーブル113に代えて、記憶部110に格納される。リソーステーブル113aは、リソーステーブル113で例示した各項目に加えて、実質の空き容量指標値の項目を更に含む。
【0111】
実質の空き容量指標値の項目には、該当のノードに対して計算された実質の空き容量指標値が登録される。実質の空き容量指標値は、未使用キャッシュイメージにより作成されるコンテナによる消費リソース量を考慮した空き容量指標値である。
【0112】
ここで、未使用キャッシュイメージにより作成されるコンテナで消費されるCPU数をp個とし、当該コンテナで消費されるメモリ容量をqGBとする。実質の空き容量指標値は、p,qおよび前述のn,m,N,Mを用いて、(α*(n-p)/N)+β*(m-q)/M)と計算される。前述のように、α,βは正の実数である。本例ではα=β=1とする。
【0113】
アプリ消費リソーステーブル114の例では、ノード200,200aに対してp=q=0であり、ノード200cに対してp=2、q=4である。このため、ノード200,200aの実質の空き容量指標値は、空き容量指標値に等しくなる。一方、ノード200bの実質の空き容量指標値は、(4-1-2)/10+(8-2-4)/20=0.2である。
【0114】
次に、第3の実施の形態の管理装置100の処理手順を説明する。
図14は、コンテナ起動時処理の例を示すフローチャートである。
第3の実施の形態では、図9のステップS14に代えてステップS14a,S14bを実行する点、ステップS16に代えてステップS16aを実行する点が図9の手順と異なる。そこで、以下ではステップS14a,S14b,S16aを説明し、他のステップの説明を省略する。
【0115】
ステップS14aは、ステップS13の後に実行される。なお、アプリ消費リソーステーブル114は、ノード監視部121により予め作成され、記憶部110に格納されている。また、ステップS13では、ノード監視部121は、各ノードのリソースに関する情報を収集し、リソーステーブル113aに登録する。ただし、ステップS13の段階では、空き容量指標値や実質の空き容量指標値は登録されない。
【0116】
(S14a)イメージ配置制御部122は、各ノードに対し、当該ノードが保有する全てのキャッシュイメージによりコンテナを起動した場合に消費されるリソース容量を算出する。例えば、イメージ配置制御部122は、リソーステーブル113aおよびアプリ消費リソーステーブル114に基づいて、当該リソース容量の算出を行う。
【0117】
(S14b)イメージ配置制御部122は、ステップS14aで算出した、ノードが保有する全てのキャッシュイメージよりコンテナを起動した場合に消費されるリソース容量に基づいて、各ノードの実質の空き容量指標値を算出する。イメージ配置制御部122は、算出した実質の空き容量指標値をリソーステーブル113aに登録する。そして、ステップS15に処理が進む。
【0118】
ステップS15の実行後にステップS16aが実行される。
(S16a)イメージ配置制御部122は、ステップS15で抽出したノードの中から実質の空き容量指標値が最大のノードをキャッシュイメージの転送先に決定する。そして、ステップS17に処理が進む。
【0119】
このように、イメージ配置制御部122は、各ノードの実質の空き容量指標値に基づいて、イメージの配置先のノードを決定してもよい。
図15は、スケールアウトまたは自動復旧時処理の例を示すフローチャートである。
【0120】
第3の実施の形態では、図10のステップS22とステップS23との間にステップS22aを実行する点が図10の手順と異なる。そこで、以下ではステップS22aを説明し、他のステップの説明を省略する。ステップS22aは、ステップS22の後に実行される。
【0121】
(S22a)コンテナ起動制御部123は、ステップS22で抽出されたノードのうち、スケールアウトまたは自動復旧のために起動する該当のコンテナのキャッシュイメージが存在するノードを抽出する。コンテナ起動制御部123は、コンテナ管理テーブル111およびキャッシュイメージテーブル112に基づいて、該当のコンテナのキャッシュイメージが存在するノードを抽出する。そして、ステップS23に処理が進む。
【0122】
ステップS23では、第2の実施の形態と同様に、ステップS22aで抽出されたノードのうち空き容量指標値が最大のノードがコンテナの起動先に決定される。
このように、コンテナ起動制御部123は、予備のイメージを配置したノードにより優先的に、スケールアウトまたは自動復旧対象のコンテナを起動させてもよい。
【0123】
次に、第3の実施の形態の管理装置100によるイメージ配置およびコンテナ起動の流れを説明する。
図16は、イメージ配置の例を示す図である。
【0124】
クラスタには、図11と同様に、ノード200,200a,200b,200cが属するものとする。図16では、ノード200,200a,200b,200cそれぞれの保有リソースのクラスタ内での割合が便宜的に示されている。ノード200の保有リソースの割合は0.5である。ノード200aの保有リソースの割合は0.1である。ノード200bの保有リソースの割合は0.25である。ノード200cの保有リソースの割合は0.15である。
【0125】
まず、管理装置100は、ノード200,200aにおいて、それぞれ新たなコンテナ211,211aを起動させる(ステップST20)。コンテナ211,211a、何れもアプリケーション「A」のコンテナである。このとき、ノード200はイメージAを保持する。ノード200aは、イメージA,Bを保持する。ノード200bは、イメージE,Cを保持する。ノード200bは、コンテナ211bを実行する。ノード200cは、イメージDを有する。ノード200cは、コンテナ211cを実行する。ノード200,200a,200b,200cそれぞれは複数のコンテナを実行していてもよい。
【0126】
管理装置100は、各ノードから収集した情報に基づいて、各ノードの実質の空き容量指標値を算出する。管理装置100は、起動したコンテナ211,211aに対応するイメージAを保持していないノード200b,200cのうち、実質の空き容量指標値が最大であるノードを抽出する。例えば、ノード200bの実質の空き容量指標値は0.1である。また、ノード200cの実質の空き容量指標値は0.12である。この場合、管理装置100は、ノード200cを抽出し、イメージAの転送先とする(ステップST21)。
【0127】
管理装置100は、転送先のノード200cに、イメージAを転送させる(ステップST22)。例えば、管理装置100は、ノード200,200aのうちの任意のノード(例えば、ノード200a)からノード200cへイメージAを複製して転送させることで、ノード200cにイメージAを格納する。なお、管理装置100は、ノード200,200aのうちの負荷が小さい方のノードにより、ノード200cへのイメージAの転送を実行させてもよい。
【0128】
図17は、コンテナ起動の例を示す図である。
ステップST22の実行後、管理装置100は、コンテナ211,211aの負荷の増大に応じてスケールアウトを行うと決定する。すると、管理装置100は、最新のキャッシュイメージテーブルに基づいて、コンテナ211,211aに対応する予備のイメージAを保持するノード200cを特定する。管理装置100は、スケールアウト対象のコンテナをノード200cにより起動すると決定する(ステップST30)。なお、予備のイメージAを保持するノードが複数存在する場合、管理装置100は、そのうち空き容量指標値が最大のノードを、該当のコンテナの起動先のノードとして決定する。
【0129】
そして、管理装置100は、イメージAに基づくコンテナ212cの起動をノード200cに指示し、ノード200cによりコンテナ212cを起動させる(ステップST31)。イメージAは、ノード200cにキャッシュされている。このため、ノード200cによりコンテナ212cが高速に起動される。
【0130】
管理装置100は、ノード200cにおけるコンテナ212cの起動に応じて、図14の手順によりイメージAをノード200bに転送させる(ステップST32)。例えば、管理装置100は、ノード200cからノード200bへイメージAを複製して転送させることで、ノード200bにイメージAを格納する。こうして、次回のスケールアウトに備えて、ノード200bにイメージAがキャッシュされる。
【0131】
なお、ステップST30~ST32は、自動復旧の場合も同様である。例えば、管理装置100は、コンテナ211,211aの少なくとも何れかにおける障害を検知したときに、自動復旧の処理として、ステップST30~ST32を実行してもよい。
【0132】
第3の実施の形態で例示したように、管理装置100は、予備のイメージを配置したノードを優先して選択し、当該ノードによりスケールアウトまたは自動復旧対象のコンテナを起動させてもよい。これにより、管理装置100は、該当のコンテナを高速に起動できる可能性を高められる。
【0133】
ただし、予備のイメージを配置したノードで優先してコンテナを起動する場合、キャッシュイメージを多く保持するノードにコンテナが集中し易くなり、当該ノードでリソースが枯渇する可能性が高まる。そこで、管理装置100は、各ノードにおける未使用キャッシュイメージを考慮した実質の空き容量指標値に基づいて予備のリソースの格納先を決定することで、特定のノードへコンテナが集中する可能性を低減できる。その結果、管理装置100は、当該ノードでリソースが枯渇する可能性を低減できる。
【0134】
こうして、管理装置100は、アプリケーションの可用性を、より一層向上させることができる。
以上説明したように第2,第3の実施の形態の管理装置100は次の処理を実行する。
【0135】
記憶部110は、複数のノードそれぞれが保持する、コンテナのイメージを示すキャッシュ情報を記憶する。制御部120は、キャッシュ情報に基づいて、複数のノードのうちの第1ノードにより実行中である第1コンテナに対応する第1イメージが記憶されていない、第1ノード以外のノードを特定する。制御部120は、特定したノードのうちリソースの空き容量が最も多い第2ノードに第1イメージの複製である第2イメージを格納する。制御部120は、第1コンテナのスケールアウトまたは第1コンテナの障害に応じて第1コンテナと同じ第2コンテナを起動させる場合、第1コンテナが動作していないノードのうち、第2イメージを保持する第2ノードにより第2コンテナを起動させる。
【0136】
これにより、管理装置100は、コンテナ起動時間を低減できる。特に、管理装置100は、スケールアウトや自動復旧時において、第2コンテナの起動を高速化できる。このため、管理装置100は、第2コンテナにより提供されるアプリケーションの可用性を高められる。なお、キャッシュイメージテーブル112は、キャッシュ情報の一例である。
【0137】
なお、制御部120は、第2イメージを、複数の第2ノードに格納してもよい。例えば、制御部120は、第1コンテナに対応する第1イメージが記憶されていない、第1ノード以外のノードのうち、リソースの空き容量が多い順に、2以上の所定数の第2ノードを選択してもよい。そして、制御部120は、選択した所定数の第2ノードそれぞれに、第2イメージを格納してもよい。
【0138】
制御部120は、第2コンテナを起動させる際に、キャッシュ情報に基づいて第2イメージを保持する第2ノードを優先して選択し、当該第2ノードにより第2コンテナを起動させてもよい。
【0139】
これにより、管理装置100は、第2イメージを予め保持する第2ノードにより適切に第2コンテナを起動させることができ、第2コンテナの起動時間を低減できる。例えば、制御部120は、まずは第2ノードにおいて第2コンテナの起動に所要されるリソースを確保できるか否かを判定し、確保できる場合は、第2ノードにより第2コンテナを起動させる。一方、第2ノードで第2コンテナ用のリソースを確保できない場合に、制御部120は、第2コンテナの起動に所要されるリソースを確保可能な他ノードにより、第2コンテナを起動させてもよい。
【0140】
制御部120は、複数のノードそれぞれのリソースの空き容量を、当該ノードで動作中のコンテナにより消費される第1リソース量と、当該ノードで未動作であるが当該ノードが保持するイメージから起動可能なコンテナの動作に所要される第2リソース量とに基づいて評価してもよい。
【0141】
こうして、管理装置100は、該当のノードで将来消費される可能性の高いリソース量を加味して当該ノードのリソースの空き容量を評価し、イメージの配置先の第2ノードを決めることで、第2ノードにコンテナが集中することを抑えられる。なお、前述の未使用キャッシュイメージから起動可能なコンテナは、当該ノードで未動作であるが当該ノードが保持するイメージから起動可能なコンテナに相当する。
【0142】
制御部120は、複数のノードそれぞれが保持するイメージの情報を定期的に収集し、キャッシュ情報を更新してもよい。これにより、管理装置100は、キャッシュ情報を最新の状態に保てる。また、管理装置100は、第2イメージの配置や、第2コンテナの起動時にキャッシュ情報を取得するためのオーバーヘッドを削減でき、第2イメージの配置や第2コンテナの起動に要する時間を低減できる。
【0143】
制御部120は、第2イメージを第2ノードに格納する際、第1イメージから複製された第2イメージを第1ノードから第2ノードへ転送させることで、第2イメージを第2ノードに格納してもよい。管理装置100は、第2ノードへの第2イメージの格納を効率的に行える。例えば、第1ノードと第2ノードとは、同じネットワークに属する可能性が高い。このため、コンテナレジストリ70が上位ネットワークに存在する場合にコンテナレジストリ70から第2イメージをダウンロードするよりも、上位ネットワークの負荷が抑えられる。また、この場合に管理装置100は、コンテナレジストリ70から第2イメージをダウンロードするよりも、第2ノードへの第2イメージの格納を高速に行える。
【0144】
制御部120は、第2コンテナを起動させる際に、第2イメージを保持する第2ノードが複数ある場合、複数の第2ノードのうちリソースの空き容量が最も多い第2ノードにより第2コンテナを起動させてもよい。これにより、管理装置100は、複数のノードに対して適切に負荷を分散させることができる。
【0145】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体63に記録できる。
【0146】
例えば、プログラムを記録した記録媒体63を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体63に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0147】
10 情報処理装置
11 記憶部
11a キャッシュ情報
11b リソース情報
12 処理部
20,30,40 ノード
21,31,41 記憶部
21a,21b,31a,41a,41b イメージ
22,23,32,42,43 コンテナ
50 ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17