(57)【要約】      （修正有）【課題】デバッグ環境としてのコンテナが起動される場合、起動されるコンテナに、本番環境としてのコンテナに紐付けられていたボリューム又はそれの複製ボリュームを紐付けるアプリケーション配置システム及びアプリケーション配置方法を提供する。【解決手段】コンテナエンジンを実行する各サーバにボリュームドライバが備えられる。第１のボリュームドライバが、第１のサーバにおけるコンテナのコンテナイメージに、コンテナに紐づけられているボリュームについてのボリュームＩＤ（ボリュームについてのＩＤでありストレージシステムからボリュームに関して取得された情報に従うＩＤ）を埋め込む。第２のボリュームドライバが、第１のサーバにおいて出力され第２のサーバに入力されたコンテナイメージに埋め込まれているボリュームＩＤを用いて、コンテナイメージに基づくコンテナに紐付けられるボリュームを、ストレージシステムから検索する。【選択図】図１
2019207540.tif 000002
【特許請求の範囲】
【請求項１】
１以上のコンテナエンジンを実行する１以上のサーバにおいて実行される１以上のボリュームドライバを備え、
第１のサーバにおけるコンテナエンジンである第１のコンテナエンジン上でアプリケーションを実行する第１のコンテナに、１以上のストレージ装置であるストレージシステムから提供され前記アプリケーションの実行において使用される第１のボリュームが紐付けられており、
第１のボリュームドライバが、前記第１のコンテナがイメージ化されることにより作成されるコンテナイメージに、前記第１のボリュームについてのボリュームＩＤを埋め込み、ボリュームＩＤは、ボリュームについてのＩＤであり前記ストレージシステムから当該ボリュームに関して取得された情報に従うＩＤであり、
第２のボリュームドライバが、前記第１のサーバにおいて出力され第２のサーバに入力された前記コンテナイメージに埋め込まれている前記ボリュームＩＤを用いて、１以上の第２のコンテナのいずれかである対象の第２のコンテナに紐付けられるボリュームを、前記ストレージシステムから検索し、
前記第２のサーバは、前記１以上のサーバのうち、前記第１のサーバ、又は、前記第１のサーバとは別のサーバであり、
前記第１のボリュームドライバは、前記１以上のボリュームドライバのうち、前記第１のサーバにおけるボリュームドライバであり、
前記第２のボリュームドライバは、前記１以上のボリュームドライバのうち、前記第２のサーバにおけるボリュームドライバであって、前記第１のボリュームドライバ、又は、前記第１のボリュームドライバとは別のボリュームドライバであり、
前記１以上の第２のコンテナの各々は、前記アプリケーションを第２のコンテナエンジン上で実行するコンテナであり、
前記第２のコンテナエンジンは、前記１以上のコンテナエンジンのうち、前記第１のコンテナエンジン、又は、前記第１のコンテナエンジンとは別のコンテナエンジンである、
アプリケーション配置システム。
【請求項２】
前記ボリュームＩＤは、前記ストレージシステムにおけるグローバルなＩＤであり、
前記対象の第２のコンテナに紐付けられるボリュームは、前記第１のボリュームをプライマリのボリュームとする１以上のセカンダリのボリュームである１以上の第２のボリュームのうちのいずれかである、
請求項１に記載のアプリケーション配置システム。
【請求項３】
前記ボリュームＩＤは、ＮＡＡ（Name Address Authority）である、
請求項２に記載のアプリケーション配置システム。
【請求項４】
前記第１のボリュームが、前記ストレージシステムにおける第１のストレージ装置に存在し、
前記第２のボリュームが、前記ストレージシステムにおける第２のストレージ装置に存在し、
前記第１のボリュームドライバが、
前記第１のボリュームと前記１以上の第２のボリュームのうちのいずれかとを１つの仮想ストレージとする設定である仮想ストレージ設定を行い、
前記対象の第２のコンテナに紐付けられるボリュームは、前記仮想ストレージ設定の結果として前記第１のボリュームについての前記ボリュームＩＤと同一のボリュームＩＤが関連付けられた前記第２のボリュームである、
請求項２に記載のアプリケーション配置システム。
【請求項５】
前記第１のボリュームドライバが、前記第１のボリュームに格納されたデータに関して前記ストレージシステムから取得された情報であるボリュームデータ情報と、前記第１のボリュームについての前記ボリュームＩＤとを、前記コンテナイメージに埋め込み、
前記第２のボリュームドライバが、前記入力されたコンテナイメージに埋め込まれている前記ボリュームＩＤと前記ボリュームデータ情報とを用いて、前記対象の第２のコンテナに紐付けられるボリュームを、前記ストレージシステムから検索する、
請求項２に記載のアプリケーション配置システム。
【請求項６】
前記対象の第２のコンテナに紐付けられるボリュームは、前記１以上の第２のボリュームのうち、下記（ａ）及び（ｂ）のいずれかに該当する前記第２のボリュームである、
（ａ）当該第２のボリュームに関連付けられているボリュームデータ情報が、前記コンテナイメージに埋め込まれている前記ボリュームデータ情報と一致し、且つ、当該ボリュームデータ情報が、差分有りを意味する、
（ｂ）当該第２のボリュームに関連付けられているボリュームデータ情報が、前記コンテナイメージに埋め込まれている前記ボリュームデータ情報と一致し、且つ、当該ボリュームデータ情報が差分無しを意味するが、当該第２のボリュームに対応したプライマリのボリュームのボリュームＩＤが、前記コンテナイメージに埋め込まれている前記ボリュームＩＤと一致する、
請求項５に記載のアプリケーション配置システム。
【請求項７】
下記（ｘ１）及び（ｘ２）が、シーケンシャルに１回以上行われ、１回目での（ｘ１）のボリュームドライバが、前記第１のボリュームドライバ又はそれとは別のボリュームドライバであり、２回目以降の各回での（ｘ１）のボリュームドライバが、直前回での（ｘ２）のボリュームドライバである、
（ｘ１）ボリュームドライバが、コンテナに紐付いているボリュームに格納されたデータに関して前記ストレージシステムから取得された情報であるボリュームデータ情報と、当該ボリュームについての前記ボリュームＩＤとを、当該コンテナのコンテナイメージに埋め込む、
（ｘ２）ボリュームドライバが、当該ボリュームドライバを有するサーバに入力された（ｘ１）のコンテナイメージに埋め込まれている前記ボリュームＩＤと前記ボリュームデータ情報とを用いて、当該サーバにおけるコンテナに紐付けられるボリュームを、前記ストレージシステムから検索する、
請求項５に記載のアプリケーション配置システム。
【請求項８】
下記（ｙ１）及び（ｙ２）が行われ、（ｙ１）のボリュームドライバが、前記第１のボリュームドライバであり、（ｙ２）のいずれかのボリュームドライバが、前記第２のボリュームドライバである、
（ｙ１）ボリュームドライバが、コンテナに紐付いているボリュームに格納されたデータに関して前記ストレージシステムから取得された情報であるボリュームデータ情報と、当該ボリュームについての前記ボリュームＩＤとを、当該コンテナのコンテナイメージに埋め込む、
（ｙ２）２以上のセカンダリのボリュームに関わる各ボリュームドライバが、当該ボリュームドライバを有するサーバに入力された（ｙ１）のコンテナイメージに埋め込まれている前記ボリュームＩＤと前記ボリュームデータ情報とを用いて、当該サーバにおけるコンテナに紐付けられるボリュームを、前記ストレージシステムから検索する、
請求項５に記載のアプリケーション配置システム。
【請求項９】
（ｙ２）において、前記各ボリュームドライバが、２以上のボリュームが見つかった場合、当該ボリュームドライバを有するサーバに接続されている各ストレージ装置についての、当該サーバと当該ストレージ装置との間の距離に基づき、当該見つかった２以上のボリュームのうち、当該サーバに最も近いストレージ装置に存在するいずれかのボリュームを、当該サーバにおけるコンテナに紐付けられるボリュームとして選択する、
請求項８に記載のアプリケーション配置システム。
【請求項１０】
前記１以上のサーバに接続された管理サーバにおいて実行される配置マネージャを更に備え、
前記配置マネージャは、
前記第１のコンテナを監視することにより前記アプリケーションの障害を検出し、
当該障害の検出に応答して、当該障害の生じたアプリケーションの前記第１のコンテナをイメージ化することの指示であるイメージ作成指示を、前記第１のコンテナエンジンに対して送信し、当該イメージ作成指示に応答して、前記第１のコンテナエンジンにより前記コンテナイメージが作成され
前記第１のサーバから出力された前記コンテナイメージを格納したコンテナレジストリから通知を受信し、
当該通知に応答して、前記コンテナイメージの入力指示を、前記第２のコンテナエンジンに送信し、前記入力指示に応答して、前記コンテナレジストリから前記第２のサーバに前記第２のコンテナエンジンにより前記コンテナイメージが入力される、
請求項１に記載のアプリケーション配置システム。
【請求項１１】
前記ボリュームデータ情報は、前記第１のボリュームに格納された差分データのハッシュ値であり、
前記第１のボリュームは、オリジナルボリュームのＮ世代目のスナップショットボリュームであり（Ｎは自然数）、
前記第１のボリュームに格納された差分データは、前記オリジナルボリュームとの差分である、
請求項５に記載のアプリケーション配置システム。
【請求項１２】
第１のサーバにおけるコンテナエンジンである第１のコンテナエンジン上でアプリケーションを実行する第１のコンテナに、１以上のストレージ装置であるストレージシステムから提供され前記アプリケーションの実行において使用される第１のボリュームが紐付けられている場合に、第１のボリュームドライバが、前記第１のコンテナがイメージ化されることにより作成されるコンテナイメージに、前記第１のボリュームについてのボリュームＩＤを埋め込み、ボリュームＩＤは、ボリュームについてのＩＤであり前記ストレージシステムから当該ボリュームに関して取得された情報に従うＩＤであり、
第２のボリュームドライバが、前記第１のサーバにおいて出力され第２のサーバに入力された前記コンテナイメージに埋め込まれている前記ボリュームＩＤを用いて、１以上の第２のコンテナのいずれかである対象の第２のコンテナに紐付けられるボリュームを、前記ストレージシステムから検索し、
前記第２のサーバは、１以上のサーバのうち、前記第１のサーバ、又は、前記第１のサーバとは別のサーバであり、
前記第１のボリュームドライバは、１以上のボリュームドライバのうち、前記第１のサーバにおけるボリュームドライバであり、
前記第２のボリュームドライバは、前記１以上のボリュームドライバのうち、前記第２のサーバにおけるボリュームドライバであって、前記第１のボリュームドライバ、又は、前記第１のボリュームドライバとは別のボリュームドライバであり、
前記１以上の第２のコンテナの各々は、前記アプリケーションを第２のコンテナエンジン上で実行するコンテナであり、
前記第２のコンテナエンジンは、１以上のコンテナエンジンのうち、前記第１のコンテナエンジン、又は、前記第１のコンテナエンジンとは別のコンテナエンジンである、
アプリケーション配置方法。
【請求項１３】
コンテナエンジンを実行するコンピュータに、
当該コンピュータにおけるコンテナエンジン上でアプリケーションを実行するコンテナに、１以上のストレージ装置であるストレージシステムから提供され前記アプリケーションの実行において使用されるボリュームが紐付けられている場合、前記コンテナがイメージ化されることにより作成されるコンテナイメージに、前記ボリュームについてのボリュームＩＤを埋め込み、ボリュームＩＤは、ボリュームについてのＩＤであり前記ストレージシステムから当該ボリュームに関して取得された情報に従うＩＤであり、
当該コンピュータにコンテナイメージが入力された場合、当該入力されたコンテナイメージに埋め込まれている前記ボリュームＩＤを用いて、当該コンピュータにおけるコンテナに紐付けられるボリュームを、前記ストレージシステムから検索する、
ことを実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、アプリケーションの配置に関する。
【背景技術】
【０００２】
アプリケーション（アプリケーションプログラム）は、通常、データの入出力を行う。アプリケーションより入出力されるデータが、永続化対象のデータであれば、当該データは、アプリケーションの実行環境に紐付けられているボリュームに格納される。
【０００３】
一般に、障害が発生したアプリケーションについて、デバッグが行われる。デバッグは、アプリケーションの障害が発生した実行環境（以下、本番環境）とは別の実行環境（以下、デバッグ環境）で行われることが多い。
【０００４】
本番環境としての物理的なシステムとは別に、デバッグ環境としての物理的なシステムを構築することは、負担である。
【０００５】
そこで、デバッグ環境の構築に、仮想化技術を利用することが考えられる。
【０００６】
仮想化技術には、ハイパーバイザ型仮想化とコンテナ型仮想化がある。ハイパーバイザ型仮想化に関する技術は、例えば特許文献１に開示されている。コンテナ型仮想化に関する技術は、例えば特許文献２に開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第5318903号明細書
【特許文献２】特開2003-022189号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以下、ハイパーバイザ型仮想化に従う実行環境を「ＶＭ」（ＶＭはVirtual Machineの略）と言い、コンテナ型仮想化に従う実行環境を「コンテナ」と言う。なお、特許文献１は、「コンテナＶＭ」との表現があるが、コンテナＶＭは、ゲストＯＳを有しているため（図４参照）、以下に言う「コンテナ」ではなく「ＶＭ」である。
【０００９】
ＶＭとコンテナの相違点の１つとして、ゲストＯＳ（Operating System）を有するか否かがある。具体的には、ＶＭは、ゲストＯＳを有するが、コンテナは、ゲストＯＳを有さない。コンテナは、ＶＭに比べて、低負荷であり、停止や起動が即座にできる。このため、アプリケーションのデバッグでは、コンテナ型仮想化を利用することが好ましいと考えられる。
【００１０】
デバッグ環境としてのコンテナが起動（構築）される場合、当該起動されるコンテナに、本番環境としてのコンテナに紐付けられていたボリューム又はそれの複製ボリュームを紐付ける必要がある。この紐付けは、手動で行わなければならない（例えば、コンテナ管理者とストレージ管理者との連携が必要になる）。なぜなら、コンテナにとって、ボリュームは、外部のデバイス（例えば、ハードウェア資源相当）であり、コンテナとボリューム間の中間層ではボリューム管理の連携がされていないためである。
【課題を解決するための手段】
【００１１】
コンテナエンジンを実行する各サーバにボリュームドライバが備えられる。第１のサーバにおけるコンテナエンジンである第１のコンテナエンジン上でアプリケーションを実行する第１のコンテナに、ストレージシステムから提供されアプリケーションの実行において使用される第１のボリュームが紐付けられているとする。この場合、第１のボリュームドライバが、コンテナがイメージ化されることにより作成されるコンテナイメージに、第１のボリュームについてのボリュームＩＤ（ボリュームについてのＩＤでありストレージシステムから当該ボリュームに関して取得された情報に従うＩＤ）を埋め込む。第２のボリュームドライバが、第１のサーバにおいて出力され第２のサーバに入力されたコンテナイメージに埋め込まれているボリュームＩＤを用いて、当該コンテナイメージに基づくコンテナ（第２のサーバにおけるコンテナ）に紐付けられるボリュームを、ストレージシステムから検索する。
【００１２】
なお、第２のサーバは、１以上のサーバのうち、第１のサーバ、又は、第１のサーバとは別のサーバである。第１のボリュームドライバは、１以上のボリュームドライバのうち、第１のサーバにおけるボリュームドライバである。第２のボリュームドライバは、上記１以上のボリュームドライバのうち、第２のサーバにおけるボリュームドライバであって、第１のボリュームドライバ、又は、前記第１のボリュームドライバとは別のボリュームドライバである。上記対象の第２のコンテナは、１以上の第２のコンテナのうちのいずれかであり、当該１以上の第２のコンテナの各々は、アプリケーションを第２のコンテナエンジン上で実行するコンテナである。第２のコンテナエンジンは、１以上のコンテナエンジンのうち、第１のコンテナエンジン、又は、第１のコンテナエンジンとは別のコンテナエンジンである。
【発明の効果】
【００１３】
自動的に、入力されたコンテナイメージに基づくコンテナに紐付けられるべきボリュームが特定され、当該ボリュームが当該コンテナに紐付けられる。結果として、コンテナにボリュームを紐付けることの負担が軽減する。
【図面の簡単な説明】
【００１４】
【図１】実施例１の概要（パターンＡの概要を含む）を示す。
【図２】実施例１に係るシステム全体の物理構成を示す。
【図３】実施例１に係るシステム全体の論理構成を示す。
【図４】ボリューム管理テーブルを示す。
【図５】複製管理テーブルを示す。
【図６】障害検出と障害検出に応答して行われる処理（パターンＡに従う処理）とを示す。
【図７】パターンＢの概要を示す。
【図８】パターンＢに従う処理における特定の処理を示す。
【図９】パターンＣの概要を示す。
【図１０】パターンＣに従う処理を示す。
【図１１】コンテナイメージの統合の一例の概要を示す。
【図１２】実施例２に係るサーバ及びストレージの論理構成を示す。
【図１３】距離管理テーブルを示す。
【図１４】ボリューム選択の一例を示す。
【発明を実施するための形態】
【００１５】
以下の説明では、「インターフェース部」は、１以上のインターフェースでよい。当該１以上のインターフェースは、１以上の同種の通信インターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１６】
また、以下の説明では、「メモリ部」は、１以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１７】
また、以下の説明では、「ＰＤＥＶ部」は、１以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００１８】
また、以下の説明では、「記憶部」は、メモリ部とＰＤＥＶ部の少なくとも一部とのうちの少なくとも１つ（典型的には少なくともメモリ部）である。
【００１９】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも１つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも１つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００２０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェース部（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。また、プロセッサ部は、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２１】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００２２】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、ボリュームドライバを区別しない場合には、「ボリュームドライバ１００」と言い、ボリュームドライバを区別する場合には、「ボリュームドライバ１００Ｌ」、「ボリュームドライバ１００Ｒ」のように言う。
【実施例１】
【００２３】
図１は、実施例１の概要を示す。なお、本実施例では、ローカルサイト５０Ｌとリモートサイト５０Ｒがある。ローカルサイト５０Ｌにおける特定の構成要素の参照符号の末尾を「Ｌ」とし、リモートサイト５０Ｒにおける特定の構成要素の参照符号の末尾を「Ｒ」とする。また、ローカルサイト５０Ｌにおける特定の構成要素の名称の前に「ローカル」を付し、リモートサイト５０Ｒにおける特定の構成要素の名称の前に「リモート」を付すことがある。本実施例では、説明を簡単にするために、ローカルサイト５０Ｌとリモートサイト５０Ｒの２つのサイトであるが、サイトは、１つ、又は、３つ以上あってもよい。
【００２４】
１以上のコンテナエンジン１０１を実行する１以上のサーバ１３０において実行される１以上のボリュームドライバ１００が備えられる。１以上のサーバ１３０が、１以上のストレージ装置１７０であるストレージシステム１５０に接続される。本実施例では、１以上のサーバ１３０は、ローカルサイト５０Ｌにあるローカルサーバ１３０Ｌと、リモートサイト５０Ｒにあるリモートサーバ１３０Ｒである。１以上のコンテナエンジン１０１は、ローカルサーバ１３０Ｌにより実行されるローカルコンテナエンジン１０１Ｌと、リモートサーバ１３０Ｒにより実行されるリモートコンテナエンジン１０１Ｒである。１以上のボリュームドライバ１００は、ローカルサーバ１３０Ｌにより実行されるローカルボリュームドライバ１００Ｌと、リモートサーバ１３０Ｒにより実行されるリモートボリュームドライバ１００Ｒである。ストレージシステム１５０は、１以上のストレージ装置の一例として、ローカルストレージ装置１７０Ｌ（以下、ローカルストレージ（又はストレージ）１７０Ｌ）、及び、リモートストレージ装置１７０Ｒ（以下、リモートストレージ（又はストレージ）１７０Ｒ）を含む。図示の例では、サーバ１３０Ｌに、ローカルストレージ１７０Ｌが接続されており、サーバ１３０Ｒに、リモートストレージ１７０Ｒが接続されている。
【００２５】
サーバ１３０Ｌ及び１３０Ｒ（１以上のサーバ１３０の一例）に、管理サーバ１４０が接続されている。管理サーバ１４０が、配置マネージャ１６０を実行する。
【００２６】
サーバ１３０Ｌ及び１３０Ｒと管理サーバ１４０に、コンテナレジストリ１８０が接続されている。コンテナレジストリ１８０は、レジストリ（レポジトリと呼ばれてもよい）という記憶空間を提供するサーバでよい。コンテナレジストリ１８０には、コンテナイメージが登録される。コンテナレジストリ１８０に対するコンテナイメージの登録は、管理サーバ１４０の配置マネージャ１６０による監視の結果として検出されてもよいが、本実施例では、コンテナレジストリ１８０にコンテナイメージの登録のような変更があったときには配置マネージャ１６０に通知を出すという設定が事前にコンテナレジストリ１８０にされていて、その設定に従い、コンテナレジストリ１８０が、変更（例えば登録）を配置マネージャ１６０に通知する（一例としてはＷｅｂｈｏｏｋという仕組み）。
【００２７】
少なくとも１つのサーバ１３０、少なくとも１つのストレージ装置１７０、管理サーバ１４０、及び、コンテナレジストリ１８０の少なくとも１つは、物理的な装置であってもよいし、ソフトウェアディファインドの装置（例えば、クラウド基盤としてのコンピューティングリソース上に構築されるソフトウェアディファインドの装置）であってもよい。また、本実施例では、ボリュームドライバ１００は、コンテナエンジン１０１内に存在するが、コンテナエンジン１０１の外（例えば、サーバ１３０内の後述のホストＯＳとコンテナエンジン１０１との間）に存在してもよい。
【００２８】
図示の通り、ローカルサイト５０Ｌにおいて、コンテナエンジン１０１Ｌ上でＡＰＰ（アプリケーションプログラム）１２５を実行するコンテナ１０２Ａ（第１のコンテナの一例）に、ローカルストレージ１７０Ｌから提供されＡＰＰ１２５の実行において使用されるボリューム１７１Ａ（第１のボリュームの一例）が紐付けられている。ボリューム１７１Ａをプライマリのボリュームとするセカンダリのボリュームであるボリューム１７１Ｂ（第２のボリュームの一例）が、リモートストレージ１７０Ｂにある。すなわち、リモートストレージ１７０Ｂは、ボリューム１７１の複製である。
【００２９】
本実施例では、ＡＰＰ１２５に障害のような特定のイベントが発生した場合、以下のようにして、ＡＰＰ１２５が別のコンテナ１０２Ｂ（第２のコンテナの一例）で実行される。
【００３０】
すなわち、ローカルボリュームドライバ１００Ｌが、コンテナ１０２Ａがイメージ化されることにより作成されるコンテナイメージ１１５に、ボリューム１７１ＡについてのボリュームＩＤを埋め込む。なお、コンテナイメージ１１５の作成は、コンテナエンジン１０１Ｌにより行われる。また、「ボリュームＩＤ」とは、ボリューム１７１についてのＩＤでありストレージシステム１５０（ストレージ装置１７０）から当該ボリューム１７１に関して取得された情報に従うＩＤである。また、コンテナイメージ１１５にボリュームＩＤを「埋め込む」の具体例は、コンテナイメージ１１５のメタ領域にボリュームＩＤを書き込むことである。
【００３１】
コンテナイメージ１１５が、ローカルサーバ１３０Ｌから出力されリモートサーバ１３０Ｒに入力される。本実施例では、コンテナイメージ１１５は、コンテナレジストリ１８０経由で、ローカルサーバ１３０Ｌからリモートサーバ１３０Ｒへと入力される。
【００３２】
リモートボリュームドライバ１００Ｒが、サーバ１３０Ｒに入力されたコンテナイメージ１１５に埋め込まれているボリュームＩＤを用いて、入力されたコンテナイメージ１１５に基づくコンテナ１０２Ｂに紐付けられるボリューム１７１を、ストレージシステム１５０（本実施例では、サーバ１３０Ｒに接続されているリモートストレージ１７０Ｒ）から検索する。結果として、ボリューム１７１Ｂが見つかり、故に、コンテナエンジン１０１Ｒにより、見つかったボリューム１７１Ｂが紐付けられた状態でコンテナ１０２Ｂが起動される。
【００３３】
このようにして、自動的に、入力されたコンテナイメージ１１５に基づくコンテナ１０２Ｂに紐付けられるべきボリューム１７１Ｂが特定され、当該ボリューム１７１Ｂが当該コンテナ１０２Ｂに紐付けられる。具体的には、本実施例に従う「ボリュームＩＤ」は、コンテナ１０２の外にあるハードウェアの情報に相当し、そのようなハードウェア情報相当のボリュームＩＤをコンテナイメージに埋め込むことで、当該コンテナイメージに基づくコンテナに紐付けられるボリュームを、当該コンテナイメージに埋め込まれているボリュームＩＤを用いて、見つけることができる。結果として、コンテナ１０２Ｂにボリューム１７１Ｂを紐付けることの負担が軽減する。
【００３４】
なお、「ボリュームＩＤ」としては、ボリューム１７１を識別可能な種々のＩＤを採用し得るが、本実施例では、ボリュームＩＤは、ＮＡＡである。ＮＡＡとは、Name Address Authorityの略で、ベンダ固有のＩＤやストレージ装置１７０の製品番号やボリューム１７１の識別番号等に基づくＩＤであり、ボリューム１７１を一意に識別することができるＩＤである。ＮＡＡは、ストレージ装置１７０に標準で備わっているＩＤ（ＩＥＥＥ（The Institute of Electrical and Electronics Engineers, Inc.）が定めているＳＣＳＩ（Small Computer System Interface）の標準的な規約）である。ボリュームＩＤとしてＮＡＡを採用することで、ストレージベンダに依存せず汎用性が高く、且つ、実装が容易なシステムの開発が期待できる。なお、ボリュームＩＤに関し、「ストレージシステム１５０（ストレージ装置１７０）から当該ボリューム１７１に関して取得された情報に従うＩＤ」とは、ボリュームＩＤが、ストレージ装置１７０から取得された情報それ自体でもよいし、ストレージ装置１７０から取得された情報に基づきサーバ１３０（例えばボリュームドライバ１００）によって算出された情報でもよい。以下、ボリュームＩＤをＮＡＡとする。ＮＡＡは、ストレージシステム１５０についてグローバルなＩＤ（少なくともストレージシステム１５０において重複の無いＩＤ）の一例である。
【００３５】
また、本実施例では、コンテナイメージ１１５にＮＡＡが埋め込まれ、ＮＡＡが埋め込まれたコンテナイメージ１１５が入出力される。結果として、コンテナイメージ１１５の入出力が、ＮＡＡの送受信を兼ねることができる。
【００３６】
また、本実施例では、サーバ１３０間でのコンテナイメージ１１５の出力（プッシュ）及び入力（プル）は、コンテナレジストリ１８０経由とされ、且つ、管理サーバ１４０（配置マネージャ１６０）が用意される。コンテナレジストリ１８０にサーバ１３０Ｌからコンテナイメージ１１５が登録されたことに応答して自動で通知が配置マネージャ１６０に送信され、その通知に応答して、自動で、配置マネージャ１６０が、当該コンテナイメージ１１５のプル指示をサーバ１３０Ｒに送信し、当該プル指示に応答して、自動で、サーバ１３０Ｒ（例えばボリュームドライバ１００Ｒ）が、コンテナレジストリ１８０から当該コンテナイメージ１１５を入力（プル）する。つまり、コンテナイメージ１１５の出力以降、サーバ１３０Ｒへの入力までを自動化することができる。これにより、コンテナ１０２Ｂにボリューム１７１Ｂを紐付けることに関わる負担の更なる軽減が期待できる。また、コンテナレジストリ１８０にコンテナイメージ１１５が登録されるので、当該コンテナイメージ１１５を複数の環境に配布し、コンテナ１０２Ｂを含む複数のコンテナ１０２を起動することも可能である（後述のパターンＣ）。なお、２以上のサーバ１３０が存在する場合、プル指示の送信先は、配置マネージャ１６０によって所定のポリシーに従い選択されてよい。また、コンテナイメージ１１５の入出力として、コンテナレジストリ１８０経由の入出力に代えて、コンテナイメージをバイナリ形式（tar.gz等）にして配布することが採用されてもよい。
【００３７】
また、本実施例では、リモートサーバ１３０Ｒに入力されたコンテナイメージ１１５に基づくコンテナ１０２Ｂに紐づけられるボリューム１７１は、プライマリのボリューム１７１Ａの複製としてのボリューム１７１Ｂである（ボリューム１７１Ａ及び１７１Ｂがペアとなる）。これにより、コンテナ１０２Ｂにおいて実行されるＡＰＰ１２５によってオリジナルのデータが変更されることを避けることができる。
【００３８】
また、本実施例では、ボリュームＩＤが、グローバルＩＤの一例であるＮＡＡであるため、通常、ボリューム１７１ＢのＮＡＡはボリューム１７１ＡのＮＡＡと異なる。そこで、本実施例では、次の（Ａ）及び（Ｂ）のいずれかの方法で、ボリューム１７１Ｂを見つけることができる。
（Ａ）仮想ストレージ設定。具体的には、ボリュームドライバ１００Ｌが、ボリューム１７１Ａとボリューム１７１Ｂとを１つの仮想ストレージとする設定である仮想ストレージ設定を行う。それにより、ボリューム１７１Ｂには、ボリューム１７１ＡのＮＡＡと同一のＮＡＡが関連付けられる。結果として、コンテナイメージ１１５に埋め込まれているＮＡＡを用いた検索によって、ボリューム１７１ＡのＮＡＡと同一のＮＡＡが関連付けられているボリューム１７１Ｂを見つけることができる。方法（Ａ）は、後述のパターンＡで行われる。
（Ｂ）ＮＡＡとボリュームデータ情報との組合せ。具体的には、ボリュームドライバ１００Ｌが、ボリューム１７１Ａに格納されたデータに関してストレージ装置１７０Ｌから取得された情報であるボリュームデータ情報と、ボリューム１７１ＡのＮＡＡとを、コンテナイメージ１１５に埋め込む（当該コンテナイメージ１１５のメタ領域に書き込む）。ボリュームドライバ１００Ｒが、サーバ１３０Ｒに入力されたコンテナイメージ１１５に埋め込まれているＮＡＡとボリュームデータ情報とを用いて、コンテナ１０２Ｂに紐付けられるボリューム１７１を、ストレージシステム１５０から検索する。結果として、同一のボリュームデータ情報が関連付けられていて、且つ、コピー元についてのＮＡＡとしてボリューム１７１ＡのＮＡＡが関連付けられているボリューム１７１Ｂが見つかる。ボリュームデータ情報は、ボリューム１７１に格納されたデータに関する情報であり、ＮＡＡのように、ハードウェア情報に相当する。この方法（Ｂ）によれば、ＮＡＡに加えてボリュームデータ情報が埋め込まれることで、ボリューム１７１Ａ及び１７１Ｂ間でＮＡＡが異なっていても、ボリューム１７１Ａの複製であるボリューム１７１Ｂを見つけることができる。ボリュームデータ情報は、ボリューム１７１に格納されたデータのハッシュ値でもよいが、本実施例では、ボリュームデータ情報は、スナップショットボリュームとしてのボリューム１７１に格納されたデータと当該ボリューム１７１のオリジナルのボリューム（スナップショットボリュームの起点のボリューム）に格納されたデータとの差分データのハッシュ値である。方法（Ｂ）は、後述のパターンＢ及びＣで行われるが、パターンＡにおいて仮想ストレージ設定が無いケースで採用されてもよい。
【００３９】
以下、本実施例を詳細に説明する。
【００４０】
図２は、本実施例に係るシステム全体の物理構成を示す。
【００４１】
サーバ１３０Ｌ及び１３０Ｒ、管理サーバ１４０及びコンテナレジストリ１８０が、第１のネットワークの一例であるＬＡＮ（Local Area Network）２５０に接続されている。サーバ１３０Ｌ及びストレージ１７０Ｌ、及び、サーバ１３０Ｒ及びストレージ１７０Ｒが、第２のネットワークの一例であるＦＣ（Fibre Channel）ネットワーク２６０に接続されている。ストレージ１７０Ｌ及び１７０Ｒが、第３のネットワークの一例であるＦＣネットワーク２７０に接続されている。ＦＣネットワーク２６０は、ストレージ１７０Ｌ及び１７０Ｒのフロントエンドネットワークの一例である。ＦＣネットワーク２７０は、ストレージ１７０Ｌ及び１７０Ｒのバックエンドネットワークの一例である。第１〜第３のネットワークの２以上のネットワークが一体でもよい。ネットワークとしては、ＷＡＮ（Wide Area Network）のような他種のネットワークが採用されてもよい。
【００４２】
各サーバ１３０は、インターフェース部、記憶部２０２、及び、それらに接続されたプロセッサ部２０３を有する。インターフェース部は、ＬＡＮ２５０に接続されるＬＡＮインターフェース２０１Ｌと、ＦＣネットワーク２６０に接続されるＦＣインターフェース２０１Ｆである。
【００４３】
各ストレージ１７０は、ＰＤＥＶ部２３０と、ＰＤＥＶ部２３０に接続されたストレージコントローラ２２０とを有する。ストレージコントローラ２２０は、ＦＣネットワーク２６０及び２７０に接続されている。ストレージコントローラ２２０は、図示しないが、インターフェース部、メモリ部、及び、それらに接続されたプロセッサ部を有する。ストレージコントローラ２２０は、ＡＰＰ１２５の実行に従いサーバ１３０から出力されたＩ／Ｏ（Input/Output）要求を受信し、当該Ｉ／Ｏ要求に応答して、ボリューム１７１に対するＩ／Ｏを行う。ボリューム１７１に書き込まれるデータは、ボリューム１７１における論理的な記憶領域に関連付けられている物理的な記憶領域（ＰＤＥＶ部２３０における記憶領域）に書き込まれる。
【００４４】
管理サーバ１４０は、ＬＡＮ２５０に接続されるＬＡＮインターフェース２１１（インターフェース部の一例）、記憶部２１２、及び、それらに接続されたプロセッサ部２１３を有する。
【００４５】
図３は、本実施例に係るシステム全体の論理構成を示す。
【００４６】
サーバ１３０では、記憶部２０２に、コンテナエンジン１０１、ボリュームドライバ１００、ボリュームプラグイン３００及びホストＯＳ３０１といったプログラムが格納されており、それらのプログラムが、プロセッサ部２０３によって実行される。
【００４７】
ボリュームプラグイン３００は、仮想ストレージ設定指示に応答して仮想ストレージ設定を行うといったようなボリューム制御を行う。例えば、ボリュームプラグイン３００は、ボリューム複製部３１１、ボリューム紐付け部３１２及びボリュームプロビジョニング部３１３を有する。ボリューム複製部３１１は、或るボリューム１７１をプライマリのボリュームとしたセカンダリのボリュームを作成する指示をストレージ１７０に送信する。その指示に応答して、例えば、ボリューム１７１Ａの複製であるボリューム１７１Ｂが作成される。ボリューム紐付け部３１２は、ストレージ１７０から提供されたボリューム１７１を、コンテナ１０２に紐付ける。ボリュームプロビジョニング部３１３は、仮想ストレージ設定指示に応答して仮想ストレージ設定を行う。
【００４８】
コンテナエンジン１０１は、コンテナ制御部３３１及びボリュームドライバ１００を有する。コンテナ制御部３３１は、コンテナ１０２の起動や、コンテナ１０２のコンテナイメージ１１５の作成等を行う。
【００４９】
ボリュームドライバ１００は、ＩＤ付与部３２１、ＩＤ比較部３２２及びテーブル更新部３２３を有する。ＩＤ付与部３２１は、コンテナ１０２が認識しているボリューム１７１についてＮＡＡ（及びハッシュ値（ボリュームデータ情報の一例））を取得し、取得したＮＡＡ（及びハッシュ値）をコンテナイメージ１１５に埋め込む。ＩＤ比較部３２２は、コンテナ１０２の起動の際に、コンテナイメージ１１５内のＮＡＡ（及びハッシュ値）とボリューム管理テーブル３７１を比較する（つまり、ＮＡＡ（及びハッシュ値）を用いてボリューム１７１を検索する）。該当のボリューム１７１が見つかったら、ＩＤ比較部３２２は、そのボリューム１７１の紐付けをボリュームプラグイン３００に指示し、その指示に応答して起動対象のコンテナ１０２にボリューム１７１が紐付けられた状態で、そのコンテナ１０２を起動する。テーブル更新部３２３は、ストレージ１７０内にあるボリューム管理テーブル３７１を更新する。
【００５０】
ストレージ１７０は、ボリューム１７１を提供する。また、ストレージ１７０は、プール１７３とボリューム管理テーブル３７１とを有する。プール１７３には、ボリューム１７１間の差分としてのデータ（例えば、後述のスナップショットボリュームに対するデータ）が格納される。プール１７３は、例えば、ボリューム１７１がThin Provisioningに従うボリュームの場合、ボリューム１７１に動的に割り当てられる記憶領域を含んだプールを含んでもよい。ボリューム管理テーブル３７１は、ストレージコントローラ２２０のメモリ部に格納されてもよいし、或るボリューム１７１に格納されてもよい。ボリューム管理テーブル３７１の詳細は後述する。なお、本実施例では、全ストレージ１７０において、同内容のボリューム管理テーブル３７１が保持される。言い換えれば、ストレージ１７０において、ボリューム管理テーブル３７１は同期する。
【００５１】
配置マネージャ１６０は、イメージ統合部３４１、イメージ監視部３４２、コンテナ指示部３４３及びコンテナ監視部３４４を有する。また、管理サーバ１４０（例えば記憶部２１２）は、複製管理テーブル３５１を格納する。イメージ統合部３４１は、２以上のコンテナイメージを１つのコンテナイメージに統合する。イメージ監視部３４２は、コンテナイメージがコンテナレジストリ１８０に登録されたことに応答して送信される通知を受信する。イメージ監視部３４２は、当該通知に応答して、コンテナ指示部３４３に、当該通知の受信を報告する。コンテナ指示部３４３は、当該報告に応答して、コンテナエンジン１０１に、コンテナ１０２の起動指示を送信する。コンテナ監視部３４４は、コンテナ１０２を監視する。結果として、コンテナ１０２においてＡＰＰ１２５に障害が発生した場合、その障害を、コンテナ監視部３４４が検出できる。複製管理テーブル３５１は、パターンＡの実行後の処理（パターンＢ、パターンＣ、又は、パターンＢ及びＣ以外）を規定するテーブルである。パターンＡ〜Ｃについては後述する。
【００５２】
コンテナレジストリ１８０は、イメージ管理部３６１を有する。イメージ管理部３６１は、コンテナレジストリ１８０の変更に応答して通知を送信する。
【００５３】
図４は、ボリューム管理テーブル３７１を示す。
【００５４】
ボリューム管理テーブル３７１は、当該テーブル３７１を有するストレージ１７０におけるボリューム１７１に関する情報を保持する。具体的には、例えば、ボリューム管理テーブル３７１は、ボリューム１７１毎に、エントリを有する。各エントリは、Ｎｏ．４０１、親ＮＡＡ４０２、自ＮＡＡ４０３及びハッシュ値４０４といった情報を格納する。以下、１つのボリューム１７１（図４の説明において「対象ボリューム１７１」）を例に取る。
【００５５】
Ｎｏ．４０１は、エントリの番号である。親ＮＡＡ４０２は、対象ボリューム１７１のコピー元のボリュームのＮＡＡを示す。自ＮＡＡ４０３は、対象ボリューム１７１のＮＡＡを示す。ハッシュ値４０４は、対象ボリューム１７１に格納されたデータとそれのオリジナルのボリュームに格納されたデータとの差分データのハッシュ値を示す。対象ボリューム１７１にコピー元ボリュームが存在しない場合、ハッシュ値４０４は、差分無しを意味する値（“ＦＦＦＦ…”）である。また、対象ボリューム１７１がスナップショットボリューム（Ｎ世代目のスナップショットボリューム（Ｎは自然数））であるため対象ボリューム１７１にコピー元ボリュームが存在し、且つ、コピー元ボリュームが、スナップショットボリュームのオリジナルボリュームの場合、対象ボリューム１７１の作成時点では、ハッシュ値４０４は、差分無しを意味する値（“ＦＦＦＦ…”）である。一方、対象ボリューム１７１がスナップショットボリュームであり、且つ、コピー元ボリュームが、別のスナップショットボリュームの場合、対象ボリューム１７１の作成時点では、コピー元ボリュームに対応したハッシュ値４０４と同じハッシュ値である。対象ボリューム１７１が紐付けられているコンテナ１０２のコンテナイメージ１１５が作成される場合、当該コンテナイメージ１１５には、対象ボリューム１７１に対応するハッシュ値４０４と同一のハッシュ値が埋め込まれる。なお、本実施例において、対象ボリューム１７１に関連付いている「差分データ」は、下記の（１）及び（２）のうちの（１）であるが、（１）に代えて（２）が採用されてもよい。
（１）対象ボリューム１７１に関しプール１７３に格納されている全てのデータ（例えば、対象ボリューム１７１を構成する全記憶領域（例えば全ブロック）の各々についての最新の更新後データと全ての更新前データとを含む）。
（２）対象ボリューム１７１に関しプール１７３に格納されている全てのデータのうち、対象ボリューム１７１を構成する全記憶領域の各々についての最新の更新後データ。
【００５６】
エントリは、対象ボリューム１７１のコピー元のボリュームを有するストレージ１７０のＩＤ、対象ボリューム１７１を有するストレージ１７０のＩＤなど、他種の情報を格納していてもよい。なお、本実施例では、ボリュームＩＤがＮＡＡであり、ＮＡＡは、ボリューム１７１を有するストレージ１７０の製造番号等を含むため、ＮＡＡから、当該ボリューム１７１がいずれのストレージ１７０に存在するかがわかる。
【００５７】
図５は、複製管理テーブル３５１を示す。
【００５８】
複製管理テーブル３５１は、パターンＡの実行後の処理（パターンＢ、パターンＣ、又は、パターンＢ及びＣ以外）を規定するテーブルである。具体的には、例えば、複製管理テーブル３５１は、複製パターン５０１及び複製数５０２を格納する。
【００５９】
複製パターン５０１は、パターンＡの実行後の処理の種類を示す。“Single”は、パターンＢを意味する。“Multiple”は、パターンＣを意味する。“−”パターンＢ及びＣ以外を意味する。
【００６０】
複製数５０２は、パターンＡの実行後の処理がパターンＣの場合に有効な値であり、セカンダリのボリュームとして作成されるボリュームの数を示す。なお、複製数５０２は、パターンＡの実行後の処理がパターンＢの場合にも有効な値でよく、その場合、パターンＡの実行後にセカンダリのボリュームとして作成されるボリュームの数を示してよい。
【００６１】
以下、パターンＡ〜パターンＣを説明する。なお、以下の説明では、パターンＡ〜Ｃのいずれのパターンが実施されるかに応じてコンテナイメージには自ＮＡＡに加えてハッシュ値が埋め込まれたり埋め込まれなかったりするが、それに代えて、パターンＡ〜Ｃのいずれであっても、コンテナイメージには、自ＮＡＡに加えてハッシュ値が埋め込まれてもよい。さらに、コンテナイメージには、親ＮＡＡも埋め込まれてもよい。
【００６２】
＜パターンＡ＞
【００６３】
上述した図１が、パターンＡの概要を示している。
【００６４】
すなわち、パターンＡでは、ボリューム１７１Ａのボリューム１７１Ｂについて仮想ストレージ設定がされ、それにより、ボリューム１７１Ｂに、ボリューム１７１ＡのＮＡＡと同一のＮＡＡが関連付けられる。これにより、ボリューム１７１Ａのコンテナイメージ１１５に埋め込まれているＮＡＡをキーとした検索の結果として、ボリューム１７１Ｂが見つかる。
【００６５】
図６は、障害検出と障害検出に応答して行われる処理（パターンＡに従う処理）とを示す。
【００６６】
コンテナ監視部３４４が、コンテナ１０２Ａを監視することによりコンテナ１０２ＡのＡＰＰ１２５の障害を検出する（Ｓ６０１）。当該障害の検出に応答して、コンテナ指示部３４３が、コンテナ１０２Ａのコンテナイメージ１１５を作成するイメージ作成指示を、コンテナエンジン１０１Ｌに送信する（Ｓ６０２）。
【００６７】
コンテナエンジン１０１Ｌのコンテナ制御部３３１が、当該イメージ作成指示に応答して、コンテナ１０２Ａをイメージ化する、つまり、コンテナ１０２Ａのコンテナイメージを作成する（Ｓ６０３）。
【００６８】
その後、ボリュームドライバ１００Ｌが、ボリュームプラグイン３００Ｌに対して、コンテナ１０２に紐付けられているボリューム１７１Ａ、及び、当該ボリューム１７１Ａのペア相手であるボリューム１７１Ｂについての仮想ストレージ設定指示を出す（Ｓ６０４）。その指示に応答して、ボリュームプラグイン３００Ｌのボリュームプロビジョニング部３１３が、ボリューム１７１Ａ及び１７１Ｂについて仮想ストレージ設定することの要求をストレージ１７０Ｌに送信する。その要求に応答して、ボリューム１７１Ａ及び１７１Ｂについて仮想ストレージ設定がされる。例えば、その要求に応答して、ストレージ１７０Ｌが、ボリューム１７１Ａ及び１７１Ｂに仮想的な同一のボリューム番号を付与し、それらのボリューム１７１Ａ及び１７１Ｂを仮想的なストレージに所属させる。結果として、ボリューム１７１Ａ及び１７１ＢのＮＡＡが同一となる。なお、ボリューム１７１Ａ及び１７１Ｂの同一のＮＡＡが、ボリューム管理テーブル３７１Ｌに登録され、ボリューム管理テーブル３７１の同期によりボリューム管理テーブル３７１Ｒにも登録される。但し、ボリューム管理テーブル３７１Ｒでは、自ＮＡＡ４０３は、ボリューム１７１ＢのＮＡＡであり、親ＮＡＡ４０２は、ボリューム１７１ＡのＮＡＡである。なお、仮想ストレージ設定は、コンテナイメージ１１５の作成の前に予めされていてもよい。また、ボリューム複製部３１１が、ボリュームドライバ１００Ｌからの仮想ストレージ設定指示を契機に、ストレージ１７０Ｌへの仮想ストレージ設定要求の送信前に、ボリューム１７１Ａの複製ボリュームの作成要求をストレージ１７０Ｌに送信してもよい。その要求に応答して、ストレージ１７０Ｒに、ボリューム１７１Ａの複製としてのボリューム１７１Ｂが作成されてもよい。その後に、ボリューム１７１Ａとボリューム１７１Ｂについて仮想ストレージ設定が行われてもよい。
【００６９】
ボリュームドライバ１００Ｌが、ボリューム１７１ＡのＮＡＡ（又は、当該ＮＡＡの算出に必要な情報）を、ストレージ１７０Ｒに問合せ、その応答として、ボリューム１７１ＡのＮＡＡ（又は、当該ＮＡＡの算出に必要な情報）を受信する（この処理は、予め（例えばボリューム１７１Ａが紐付けられた時点で）行われていてもよい）。ボリュームドライバ１００Ｌが、ボリューム１７１ＡのＮＡＡ（自ＮＡＡ）を、Ｓ６０３で作成されたコンテナイメージ１１５に埋め込む（Ｓ６０５）。
【００７０】
ボリュームドライバ１００Ｌが、Ｓ６０４の際にボリューム１７１Ｂ（ボリューム１７１Ａの複製ボリューム）が作成された場合には、ボリューム管理テーブル３７１Ｌを更新する（Ｓ６０６）。具体的には、ボリュームドライバ１００Ｌが、ボリューム管理テーブル３７１Ｌのうちボリューム１７１Ｂに対応したエントリ（ボリューム１７１ＢのＮＡＡを自ＮＡＡ４０３として有するエントリ）に、ハッシュ値４０４として差分無しを意味する値（“ＦＦＦＦ…”）を登録する。ハッシュ値４０４として差分無しを意味する値（“ＦＦＦＦ…”）が登録される理由は、ボリューム１７１Ｂの作成時点では、ボリューム１７１Ａとの間での差分が無いためである。このハッシュ値４０４は、ボリューム管理テーブル３７１の同期において、ボリューム管理テーブル３７１Ｒのうちボリューム１７１Ｂに対応したエントリに反映される。なお、予めボリューム１７１Ｂが存在する場合には、Ｓ６０６の少なくとも一部がスキップされてよい。
【００７１】
ボリュームドライバ１００Ｌが、ボリューム１７１ＡのＮＡＡが埋め込まれているコンテナイメージ１１５をコンテナレジストリ１８０にプッシュ（出力）する（Ｓ６０７）。
【００７２】
コンテナイメージ１１５がコンテナレジストリ１８０に登録されたことを、配置マネージャ１６０のイメージ監視部３４２が検出する（Ｓ６０８）。具体的には、コンテナイメージ１１５がコンテナレジストリ１８０に登録されたことに応答してコンテナレジストリ１８０から出力された通知を、配置マネージャ１６０のイメージ監視部３４２が受信する。
【００７３】
イメージ監視部３４２は、コンテナイメージ１１５の登録を、コンテナ指示部３４３に報告する。コンテナ指示部３４３が、当該コンテナイメージ１１５のプル指示（コンテナの起動指示を兼ねてよい）を、サーバ１３０Ｒのコンテナエンジン１０１Ｒに送信する（Ｓ６０９）。なお、プル指示の送信先がサーバ１３０Ｒとなる理由は、例えば、ボリューム１７１Ａの複製先としてストレージ１７０Ｒが指定されたからであってもよいし、ストレージ１７０Ｌ内のボリューム１７１の複製先がストレージ１７０Ｒになることを予め配置マネージャ１６０が把握しているからであってもよい。
【００７４】
当該プル指示に応答して、コンテナエンジン１０１Ｒが、コンテナレジストリ１８０から、コンテナイメージ１１５をプル（入力）する（Ｓ６１０）。
【００７５】
ボリュームドライバ１００Ｒが、入力されたコンテナイメージ１１５内のＮＡＡを取得する（Ｓ６１１）。そして、ボリュームドライバ１００Ｒが、そのＮＡＡと一致する自ＮＡＡ４０３がボリューム管理テーブル３７１Ｒにあるか否かを判断する（Ｓ６１２）。
【００７６】
Ｓ６１２の判断結果が偽の場合（Ｓ６１２：Ｎｏ）、コンテナエンジン１０１Ｒが、ボリューム１７１の紐付け無しに、当該入力されたコンテナイメージ１１５に基づくコンテナ１０２Ｂを起動する（Ｓ６１３）。
【００７７】
一方、Ｓ６１２の判断結果が真の場合（Ｓ６１２：Ｙｅｓ）、コンテナエンジン１０１Ｒが、一致する自ＮＡＡ４０３に対応したボリューム１７１Ｂを、当該入力されたコンテナイメージ１１５に基づくコンテナ１０２Ｂに紐付けた状態で、当該コンテナ１０２Ｂを起動する（Ｓ６１４）。
【００７８】
Ｓ６１３又はＳ６１４の後、ボリュームドライバ１００Ｒが、複製管理テーブル３５１を配置マネージャ１６０から読み込む（Ｓ６１５）。ボリュームドライバ１００Ｒが、複製管理テーブル３５１の複製パターン５０１を参照する（Ｓ６１６）。複製パターン５０１が“Single”の場合、パターンＢの処理が行われる。複製パターン５０１が“Multiple”の場合、パターンＣの処理が行われる。複製パターン５０１が“−”の場合、処理が終了する。
【００７９】
＜パターンＢ＞
【００８０】
図７は、パターンＢの概要を示す。なお、サーバ群７００は、１以上のサーバ１３０である。コンテナエンジン群７２０は、１以上のコンテナエンジン１０１である。ボリュームドライバ群７３０は、１以上のボリュームドライバ１００である。プール群７１０は、１以上のプール１７３である。つまり、複数のコンテナ１０２は、１つのサーバ１３０に存在してもよいし、複数のサーバ１３０に存在してもよい。
【００８１】
パターンＢでは、コンテナ１０２のコンテナイメージ１１５の作成とその作成されたコンテナイメージ１１５に基づくコンテナ１０２の起動とがシーケンシャルに繰り返される。具体的には、パターンＢでは、下記（ｘ１）及び（ｘ２）が、シーケンシャルに１回以上行われる。１回目での（ｘ１）のボリュームドライバ１００が、ボリュームドライバ１００Ｌ又はそれとは別のボリュームドライバ１００（例えば１００Ｒ）である。２回目以降の各回での（ｘ１）のボリュームドライバ１００が、直前回での（ｘ２）のボリュームドライバ１００である。なお、（ｘ１）及び（ｘ２）の組が行われる回数は、ＡＰＰ１２５毎又はＡＰＰ１２５の種類毎等に応じて予め指定されていてもよい。
（ｘ１）ボリュームドライバ１００が、コンテナ１０２に紐付いているボリューム１７１に対応したハッシュ値４０４が示すハッシュ値（ストレージシステム１５０から取得されたハッシュ値）と、当該ボリューム１７１のＮＡＡ（自ＮＡＡ）とを、当該コンテナ１０２のコンテナイメージ１１５に埋め込む。
（ｘ２）ボリュームドライバ１００が、当該ボリュームドライバ１００を有するサーバ１３０に入力された（ｘ１）のコンテナイメージ１１５に埋め込まれているＮＡＡ及びハッシュ値を用いて、当該サーバ１３０におけるコンテナ１０２に紐付けられるボリューム１７１を、ストレージ１７０（ボリューム管理テーブル３７１）から検索する。
【００８２】
図７において、ボリューム１７１Ｂにデータ６０が格納されたとする（具体的には、データ６０がプール群７１０に格納されたとする）。この場合、ボリューム１７１Ｂのボリューム１７１Ａとの間での差分データが、データ６０である。ボリューム１７１Ｂについて、オリジナルのボリューム１７１Ａ（コピー元ボリュームでもある）との間で差分が生じると、ボリューム１７１Ｂに対応したハッシュ値４０４は更新される。また、ボリューム１７１Ｂのセカンダリのボリュームとしてボリューム１７１Ｃが作成される。ボリューム１７１Ｃについてのハッシュ値４０４は、ボリューム１７１Ｂのハッシュ値４０４と同じ値である。（ｘ１）において、ボリューム１７１Ｂが紐付けられているコンテナ１０２Ｂのコンテナイメージ１１５Ｂが作成された場合、そのコンテナイメージ１１５Ｂには、ボリューム１７１ＢのＮＡＡ（自ＮＡＡ）と、更新後のハッシュ値４０４と同一のハッシュ値とが埋め込まれる。ボリューム１７１Ａ及び１７１Ｂについて仮想ストレージ設定がされていれば、ボリューム１７１ＢのＮＡＡは、ボリューム１７１ＡのＮＡＡと同一のＮＡＡである。ボリューム１７１Ａ及び１７１Ｂについて仮想ストレージ設定がされていなければ、ボリューム１７１ＢのＮＡＡは、ボリューム１７１ＡのＮＡＡと異なるＮＡＡである。（ｘ２）では、コンテナイメージ１１５Ｂに埋め込まれているＮＡＡ及びハッシュ値を用いて、コンテナイメージ１１５Ｂに基づくコンテナ１０２Ｃに紐付けられるボリューム１７１を検索する。ここでは、埋め込まれているハッシュ値と同一のハッシュ値が関連付けられていて、ボリューム１７１ＢのＮＡＡを親ＮＡＡ４０２としたボリューム１７１Ｃが見つかる。故に、ボリューム１７１Ｃが、コンテナイメージ１１５Ｂに基づくコンテナ１０２Ｃに紐付けられる。
【００８３】
パターンＢは、例えば、ＡＰＰ１２５のデバッグに際して、チーム間での引継ぎが必要な場合に有効である。例えば、ＡＰＰ１２５の開発中に２つのバグ（以下、バグＰ及びＱ）が検出されたとする。バグＱはバグＰに依存しており、バグＰを解消しない限りＡＰＰ１２５の修正と修正確認ができないとする。この場合、バグＰを作りこんだチームＸが修正を行い、修正確認が取れたら、修正の状態を保存するためにコンテナ１０２Ｂのイメージ化が行われる。その後、バグＱを作りこんだチームＹにその環境が渡され（コンテナイメージ１１５Ｂに基づくコンテナ１０２Ｃが起動され）、修正と修正確認を実施することが可能となる。
【００８４】
図８は、パターンＢに従う処理における１回の上述の（ｘ１）及び（ｘ２）に関わる処理を示す。図８において、ボリュームドライバ１００は、ボリュームドライバ１００Ｒとする。
【００８５】
ボリュームドライバ１００Ｒは、ボリュームプラグイン３００Ｒに対して、複製指示を出す（Ｓ８０１）。ここで言う複製指示は、コンテナ１０２Ｂに紐付けられたボリューム１７１Ｂの複製ボリュームを作成する指示である。当該指示に応答して、ボリュームプラグイン３００Ｒのボリューム複製部３１１Ｒが、ボリューム１７１Ｂの複製ボリュームを作成する要求をストレージ１７０Ｒに送信する。その要求に応答して、ボリューム１７１Ｂの複製ボリュームとしてのボリューム１７１Ｃが、ストレージ１７０Ｒに作成される。なお、ボリューム１７１Ｃは、ストレージ１７０Ｒに代えて、別のストレージ１７０に作成されてもよい。また、ボリューム１７１Ｂのスナップショット世代をｎとした場合、ボリューム１７１Ｃのスナップショット世代は（ｎ＋１）である。
【００８６】
ボリュームドライバ１００Ｒが、ストレージ１７０Ｒから、ボリューム１７１ＢのＮＡＡ及びハッシュ値（ボリューム１７１Ｂに対応した自ＮＡＡ４０３及びハッシュ値４０４と同一のＮＡＡ及びハッシュ値）を取得する（Ｓ８０２）。
【００８７】
コンテナエンジン１０１Ｒが、コンテナ１０２Ｂのコンテナイメージ１１５Ｂを作成する（Ｓ８０３）。ボリュームドライバ１００Ｒが、取得されたＮＡＡ及びハッシュ値を、Ｓ８０３で作成されたコンテナイメージ１１５Ｂに埋め込む（Ｓ８０４）。
【００８８】
ボリュームドライバ１００Ｒが、ボリューム管理テーブル３７１Ｒを更新する（Ｓ８０５）。具体的には、ボリュームドライバ１００Ｒが、ボリューム管理テーブル３７１Ｒのうちのボリューム１７１Ｃに対応したエントリに、親ＮＡＡ４０２としてボリューム１７１ＢのＮＡＡを登録し、自ＮＡＡ４０３としてボリューム１７１ＣのＮＡＡを登録し、ハッシュ値４０４としてボリューム１７１Ｂに対応したハッシュ値４０４と同じ値を登録する。
【００８９】
ボリュームドライバ１００Ｒが、ボリューム１７１ＢについてのＮＡＡ及びハッシュ値が埋め込まれているコンテナイメージ１１５Ｂをコンテナレジストリ１８０にプッシュ（出力）する（Ｓ８０６）。
【００９０】
コンテナイメージ１１５Ｂがコンテナレジストリ１８０に登録されたことを、配置マネージャ１６０のイメージ監視部３４２が検出する（Ｓ８０７）。イメージ監視部３４２は、コンテナイメージ１１５の登録をコンテナ指示部３４３に報告し、コンテナ指示部３４３が、当該コンテナイメージ１１５のプル指示を、サーバ１３０Ｒのコンテナエンジン１０１Ｒに送信する（Ｓ８０８）。当該プル指示に応答して、コンテナエンジン１０１Ｒが、コンテナレジストリ１８０から、コンテナイメージ１１５Ｂをプル（入力）する（Ｓ８０９）。
【００９１】
ボリュームドライバ１００Ｒが、ボリューム管理テーブル３７１Ｒから、コンテナイメージ１１５Ｂに埋め込まれているハッシュ値と同一のハッシュ値４０４が存在するか否かを判断する（Ｓ８１０）。
【００９２】
Ｓ８１０の判断結果が真の場合（Ｓ８１０：Ｙｅｓ）、ボリュームドライバ１００Ｒが、当該ハッシュ値が差分無しを意味する値“ＦＦＦＦ…”であるか否かを判断する（Ｓ８１１）。
【００９３】
Ｓ８１１の判断結果が真の場合（Ｓ８１１：Ｙｅｓ）、ボリュームドライバ１００Ｒが、コンテナイメージ１１５Ｂに埋め込まれているＮＡＡと上記同一のハッシュ値４０４に対応した親ＮＡＡ４０２とが異なるか否かを判断する（Ｓ８１２）。
【００９４】
Ｓ８１０の判断結果が偽の場合（Ｓ８１０：Ｎｏ）、又は、Ｓ８１２の判断結果が真の場合（Ｓ８１２：Ｙｅｓ）、コンテナエンジン１０１Ｒが、ボリューム１７１の紐付け無しに、入力されたコンテナイメージ１１５Ｂに基づくコンテナ１０２Ｃを起動する（Ｓ８１３）。
【００９５】
Ｓ８１１の判断結果が偽の場合（Ｓ８１１：Ｎｏ）、又は、Ｓ８１２の判断結果が偽の場合（Ｓ８１２：Ｎｏ）、コンテナエンジン１０１Ｒが、当該ハッシュ値に対応したボリューム１７１Ｃを、当該入力されたコンテナイメージ１１５Ｂに基づくコンテナ１０２Ｃに紐付けた状態で、当該コンテナ１０２Ｃを起動する（Ｓ８１４）。
【００９６】
図８において、参照符号８００が示す範囲によれば、次のことが言える。ストレージ１７０Ｒ内のコンテナ１０２Ｃに紐付けられるボリューム１７１は、ストレージ１７０Ｒ内の１以上のボリューム１７１のうち、下記（ａ）及び（ｂ）のいずれかに該当するボリュームである。
（ａ）当該ボリューム１７１に関連付けられているハッシュ値４０４が、コンテナイメージ１１５Ｂに埋め込まれているハッシュ値と一致し、且つ、当該ハッシュ値が、差分有りを意味する。
（ｂ）当該ボリューム１７１に関連付けられているハッシュ値４０４が、コンテナイメージ１１５Ｂに埋め込まれているハッシュ値と一致し、且つ、当該ハッシュ値が差分無しを意味するが、当該ボリューム１７１に対応した親ＮＡＡ４０２（プライマリ（コピー元）のボリュームのＮＡＡ）が、コンテナイメージ１１５Ｂに埋め込まれているＮＡＡと一致する。
【００９７】
なお、パターンＢに関しては、コンテナ１０２Ｂが起動した後に、コンテナ１０２ＢにおいてＡＰＰ１２５が実行されることに伴い、コンテナ１０２Ｂに紐付けられているボリューム１７１Ｂが更新されてもよいし、Ｓ８１３又はＳ８１４の後、コンテナ１０２ＣにおいてＡＰＰ１２５が実行されることに伴い、コンテナ１０２Ｃに紐付けられたボリューム１７１（例えば、ボリューム１７１Ｃ又は別のボリューム１７１）が更新されてもよい。
【００９８】
＜パターンＣ＞
【００９９】
図９は、パターンＣの概要を示す。
【０１００】
パターンＣでは、１つのプライマリのボリューム１７１について２以上のセカンダリのボリューム１７１が作成され、且つ、それら２以上のセカンダリのボリューム１７１の各々について、入力されたコンテナイメージ１１５に基づくコンテナ１０２が起動される。具体的には、パターンＣでは、下記（ｙ１）及び（ｙ２）が行われる。（ｙ１）のボリュームドライバ１００が、ボリュームドライバ１００Ｌ又は１００Ｒ（或いは、別のボリュームドライバ１００）である。（ｙ２）のいずれかのボリュームドライバ１００が、ボリュームドライバ１００Ｒ（或いは、別のボリュームドライバ１００）である。
（ｙ１）ボリュームドライバ１００が、コンテナ１０２に紐付いているボリューム１７１に対応したハッシュ値４０４が示すハッシュ値と、当該ボリューム１７１のＮＡＡとを、当該コンテナ１０２のコンテナイメージ１１５に埋め込む。
（ｙ２）２以上のセカンダリのボリューム１７１に関わる各ボリュームドライバ１００が、当該ボリュームドライバ１００を有するサーバ１３０に入力された（ｙ１）のコンテナイメージに埋め込まれているＮＡＡ及びハッシュ値を用いて、当該サーバ１３０におけるコンテナ１０２に紐付けられるボリューム１７１を、ストレージシステム１５０から検索する。
【０１０１】
図９の例によれば、パターンＣは、例えば、ＡＰＰ１２５のデバッグに際して、ゴールデンイメージとしてのコンテナイメージ１１５Ａ（コンテナ１０２Ａのコンテナイメージ）から複製した複数のコンテナ１０２Ｂ及び１０２Ｃを複数人で同時に解析するということが可能である。コンテナ１０２Ｂ及び１０２Ｃにそれぞれ紐付けられるボリューム１７１Ｂ及び１７１Ｃ（ボリューム１７１Ａのスナップショットボリューム）を、コンテナイメージ１１５Ａに（ｙ１）で埋め込まれているＮＡＡ及びハッシュ値を用いて、（ｙ２）において見つけることができる。コンテナ１０２Ｂのコンテナイメージ１１５Ｂと、コンテナ１０２Ｃのコンテナイメージ１１５Ｃとが、配置マネージャ１６０のイメージ統合部３４１により統合され、結果として、１つのコンテナイメージ（統合版コンテナイメージ）１１５Ｆが作成される。
【０１０２】
なお、図６では、パターンＡの後にパターンＣが行われるが、図９に例示するように、パターンＡが行われること無しにパターンＣが行われてもよい。以下、図１０の説明は、説明を分かり易くするために、パターンＡが行われること無しにパターンＣが行われる説明とする。なお、同様に、パターンＡが行われること無しにパターンＢが行われてもよい。また、パターンＢとＣの組合せが行われてもよい。
【０１０３】
図１０は、パターンＣに従う処理を示す。図１０において、ボリュームドライバ１００は、ボリュームドライバ１００Ｌとする。また、図１０の説明において、複製数５０２（図５参照）は“２”であるとする。
【０１０４】
ボリュームドライバ１００Ｌは、ボリュームプラグイン３００Ｌに対して、複製数５０２“２”と同数の（つまり２つの）スナップショットボリューム（ボリューム１７１Ａのスナップショットボリューム）１７１Ｂ及び１７１Ｃを作成するためのスナップショット指示を出す（Ｓ９０１）。スナップショット指示に応答して、ボリュームプラグイン３００Ｌのボリューム複製部３１１により、ストレージ１７０Ｌに、ボリューム１７１Ａのスナップショットボリューム１７１Ｂ及び１７１Ｃが作成される。なお、１つのスナップショット指示に応答して１つのスナップショットボリューム１７１が作成されてもよいし（この場合、複製数５０２が示す数と同数のスナップショット指示が出る）、１つのスナップショット指示に応答して、上記同数のスナップショットボリューム１７１Ｂ及び１７１Ｃが作成されてもよい。また、上記同数のスナップショットボリューム１７１Ｂ及び１７１Ｃの一部のスナップショットボリューム１７１は、ストレージ１７０Ｌとは別のストレージ１７０に作成されてもよい。
【０１０５】
ボリュームドライバ１００Ｌが、ストレージ１７０Ｌから、ボリューム１７１ＡのＮＡＡ及びハッシュ値（ボリューム１７１Ａに対応した自ＮＡＡ４０３及びハッシュ値４０４と同一のＮＡＡ及びハッシュ値）を取得する（Ｓ９０２）。
【０１０６】
コンテナエンジン１０１Ｌが、コンテナ１０２Ａのコンテナイメージ１１５Ａを作成する（Ｓ９０３）。ボリュームドライバ１００Ｌが、取得されたＮＡＡ及びハッシュ値を、Ｓ９０３で作成されたコンテナイメージ１１５Ａに埋め込む（Ｓ９０４）。
【０１０７】
ボリュームドライバ１００Ｌが、ボリューム管理テーブル３７１Ｌを更新する（Ｓ９０５）。具体的には、ボリュームドライバ１００Ｌが、ボリューム管理テーブル３７１Ｌに、スナップショットボリューム１７１毎のエントリを追加し、追加された各エントリに、当該エントリに対応したスナップショットボリューム１７１のＮＡＡを自ＮＡＡ４０３として登録し、ボリューム１７１ＡのＮＡＡを親ＮＡＡ４０２として登録し、ハッシュ値４０４としてボリューム１７１Ａとの差分を意味する値（この時点では初期値“ＦＦＦＦ…”）を登録する。
【０１０８】
ボリュームドライバ１００Ｌが、ボリューム１７１ＡについてのＮＡＡ及びハッシュ値が埋め込まれているコンテナイメージ１１５Ａをコンテナレジストリ１８０にプッシュ（出力）する（Ｓ９０６）。
【０１０９】
コンテナイメージ１１５Ａがコンテナレジストリ１８０に登録されたことを、配置マネージャ１６０のイメージ監視部３４２が検出する（Ｓ９０７）。イメージ監視部３４２は、コンテナイメージ１１５の登録をコンテナ指示部３４３に報告し、コンテナ指示部３４３が、当該コンテナイメージ１１５のプル指示を、サーバ１３０Ｌのコンテナエンジン１０１Ｌに送信する（Ｓ９０８）。当該プル指示に応答して、コンテナエンジン１０１Ｌが、コンテナレジストリ１８０から、コンテナイメージ１１５Ａをプル（入力）する（Ｓ９０９）。
【０１１０】
複製数５０２が示す数と同回数、参照符号９００が示す処理、すなわち、図８のＳ８１０〜Ｓ８１４と同様の処理Ｓ９１０〜Ｓ９１４が行われる。結果として、複製数５０２が示す数と同数のコンテナ（入力されたコンテナイメージ１１５Ａに基づくコンテナ）１０２Ｂ及び１０２Ｃが起動する。コンテナ１０２Ｂにスナップショットボリューム１７１Ｂが紐付けられており、コンテナ１０２Ｃにスナップショットボリューム１７１Ｃが紐付けられている。なお、参照符号９００が示す処理において、コンテナ１０２Ｂ及び１０２Ｃのうち一方のコンテナ１０２について、親ＮＡＡ４０２及びハッシュ値４０４が同一である２つのスナップショットボリューム１７１が見つかるが、ここでは任意に選択された１つのスナップショットボリューム１７１が選択されるとする（この点に関する１つの工夫を、後に、実施例２で説明する）。
【０１１１】
参照符号９００が示す処理において起動したコンテナ１０２毎に、運用（具体的には、例えば、ＡＰＰ１２５の修正）が行われる（Ｓ９１５）。
【０１１２】
次に統合が行われる。ここでは、適宜、図１１も参照して説明する。コンテナエンジン１０１Ｌが、参照符号９００が示す処理において起動したコンテナ１０２Ｂ及び１０２Ｃについて、当該コンテナ１０２のコンテナイメージ１１５Ｂ及び１１５Ｃを作成し（Ｓ９１６）、且つ、当該コンテナイメージ１１５Ｂ及び１１５Ｃの構成ファイル１００１Ｂ及び１００１Ｃを作成する（Ｓ９１７）。構成ファイル１００１Ｂは、コンテナ１０２Ｂのコンテナ１０２Ａとの差分データ（例えばＡＰＰ１２５の修正に関わるデータ）６５Ｂを含み、同様に、構成ファイル１００１Ｃは、コンテナ１０２Ｃのコンテナ１０２Ａとの差分データ６５Ｃを含む。コンテナエンジン１０１Ｌが、構成ファイル１００１Ｂ及び１００１Ｃを、配置マネージャ１６０に送信する。配置マネージャ１６０のイメージ統合部３４１が、構成ファイル１００１Ｂ及び１００１Ｃを統合した統合ファイル１００２を作成し、統合ファイル１００２からコンテナイメージ（統合版コンテナイメージ）１１５Ｆを作成する（Ｓ９１８）。
【０１１３】
統合版コンテナイメージ１１５Ｆが配置マネージャ１６０からコンテナエンジン１０１Ｌに送信される。コンテナエンジン１０１Ｌが、統合版コンテナイメージ１１５Ｆに基づくコンテナ１０２を起動する（Ｓ９１９）。
【０１１４】
以上が、実施例１の説明である。なお、パターンＢにおいて、作成されるセカンダリのボリュームは、スナップショットボリュームでもよい。また、パターンＣにおいて、作成されるセカンダリのボリュームは、スナップショットボリュームに代えて、コピー元のボリュームの複製ボリュームでもよい。
【実施例２】
【０１１５】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【０１１６】
実施例２では、サーバ１３０とストレージ１７０間の距離が管理される。ＮＡＡ（及びハッシュ値）を用いたボリューム検索において２以上の該当ボリューム１７１が見つかった場合、サーバ１３０とストレージ１７０間の距離を基に、ボリューム１７１が選択される。
【０１１７】
図１２は、実施例２に係るサーバ１３０及びストレージ１７０の論理構成を示す。
【０１１８】
サーバ１３０において、ボリュームドライバ１００が、距離管理テーブル作成部１２００を有する。距離管理テーブル作成部１２００が、ストレージ１７０内に、距離管理テーブル１２１０を作成する。距離管理テーブル１２１０は、ストレージ１７０内に代えて又は加えて、サーバ１３０内に作成されてもよい。
【０１１９】
図１３は、距離管理テーブル１２１０を示す。なお、図示の例は、サーバ１３０Ｌ及び１３０Ｒの各々が、ストレージ１７０Ｌ及び１７０Ｒの各々に接続されている例である。
【０１２０】
距離管理テーブル１２１０は、サーバ１３０とストレージ１７０間の距離を示す情報を保持する。具体的には、例えば、距離管理テーブル１２１０は、互いに接続されているサーバ１３０及びストレージ１７０の組毎に、エントリを有する。各エントリは、サーバＷＷＮ１３０１、ストレージ製番１３０２及びレスポンスタイム１３０３といった情報を格納する。
【０１２１】
サーバＷＷＮ１３０１は、サーバ１３０のＷＷＮ（World Wide Name）を示す。ストレージ製番１３０２は、ストレージ１７０の製番を示す。レスポンスタイム１３０３は、サーバ１３０がストレージ１７０に対して情報を送信してから応答があるまでの時間であるレスポンスタイムを示す。レスポンスタイム１３０３の値が小さい程、距離が短い、ということである。レスポンスタイムは、例えばfcpingコマンドで取得可能である。また、距離の表現としては、レスポンスタイム以外の表現が採用されてもよい。
【０１２２】
図１４は、ボリューム選択の一例を示す模式図である。
【０１２３】
図１４の例は、次の通りである。ボリューム１７１Ｐがコンテナ１０２Ｐに紐付けられている。そして、パターンＢに従い、シーケンシャルに、ボリューム１７１Ｐのセカンダリのボリューム１７１Ｑが作成され、ボリューム１７１Ｑのセカンダリのボリューム１７１Ｒが作成される。同様に、コンテナ１０２Ｐのコンテナイメージに基づきコンテナ１０２Ｑが起動され、コンテナ１０２Ｑのコンテナイメージに基づきコンテナ１０２Ｒが作成される。コンテナ１０２Ｑにボリューム１７１Ｑが紐付けられる。コンテナ１０２Ｒにボリューム１７１Ｒが紐付けられる。
【０１２４】
その後、パターンＣに従い、ボリューム１７１Ｒのセカンダリのボリューム１７１Ｕがローカルストレージ１７０Ｌに作成され、ボリューム１７１Ｒのセカンダリのボリューム１７１Ｔがリモートストレージ１７０Ｔに作成されたとする（ボリューム１７１Ｕ及び１７１Ｔの各々に対応したハッシュ値４０４は、ボリューム１７１Ｒのハッシュ値４０４“ＹＹ”と同じ値である）。また、コンテナ１０２Ｒのコンテナイメージに基づくコンテナ１０２Ｕがローカルサーバ１３０Ｌにおいて起動され、コンテナ１０２Ｒのコンテナイメージに基づくコンテナ１０２Ｔがリモートサーバ１３０Ｒにおいて起動されるとする。具体的には、コンテナ１０２Ｕがコンテナ１０２Ｔよりも先に起動されるとする。
【０１２５】
この場合（例えば上記（ｙ２）において）、ボリュームドライバ１００Ｌが、ボリューム検索において、ボリューム１７１Ｕ及び１７１Ｔを見つけることになる。コンテナ１０２のコンテナイメージには、ボリューム１７１ＲのＮＡＡとボリューム１７１Ｒに対応したハッシュ値“ＹＹＹ”とが埋め込まれており、そのハッシュ値“ＹＹＹ”を使用した検索では、ボリューム１７１Ｕ及び１７１Ｔの各々がヒットするからである（“ＹＹＹ”は、“ＦＦＦ”と異なり差分有りを意味するハッシュ値である）。そこで、ボリュームドライバ１００Ｌは、距離管理テーブル１２１０Ｌに基づき、当該見つかったボリューム１７１Ｕ及び１７１Ｔのうち、ボリュームドライバ１００Ｌが存在するローカルサーバ１３０Ｌに最も近いストレージ１７０Ｌに存在するボリューム１７１Ｕを、ローカルサーバ１３０Ｌにおけるコンテナ１０２Ｕに紐付けられるボリューム１７１として選択する。具体的には、ボリュームドライバ１００Ｌは、見つかったボリューム１７１Ｕ及び１７１Ｔの各々について、当該ボリューム１７１に対応した自ＮＡＡ４０３からストレージ製番（ＮＡＡはストレージ製番を含んでいる）を取得する。ボリュームドライバ１００Ｌは、取得したストレージ製番毎に、当該ストレージ製番をキーとして、距離管理テーブル１２１０Ｌから、レスポンスタイムを取得する。ボリュームドライバ１００Ｌは、取得されたレスポンスタイムのうちの最も短いレスポンスタイムに対応したストレージ製番に関連付いているボリューム１７１Ｕを、ボリューム１７１Ｕ及び１７１Ｔから選択する。選択されたボリューム１７１Ｕが、コンテナ１０２Ｕに紐付けられる。これにより、起動されたコンテナ１０２Ｕにおいて実行されるＡＰＰ１２５のＩ／Ｏ性能が最適となることが期待できる。
【０１２６】
以上、本発明の幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【０１２７】
例えば、上述の説明において、「コンテナ」が、「ＶＭ」（Virtual Machine）と読み替えられてもよい。ＶＭは、仮想的なハードウェアと、当該仮想的なハードウェア上で実行されるゲストＯＳとを有するが、コンテナ同様、ＶＭの外にあるボリュームについてのＮＡＡのようなハードウェア資源情報（例えば、ＬａｗデバイスのＩＤ）を有していないためである。従って、例えば次のような表現が可能である。実行環境（例えばコンテナ又はＶＭ）のエンジン（例えばハイパーバイザ又はコンテナエンジン）を実行する各サーバにボリュームドライバが備えられる。第１のサーバにおけるエンジンである第１のエンジン上でアプリケーションを実行する第１の実行環境に、ストレージシステムから提供されアプリケーションの実行において使用される第１のボリュームが紐付けられているとする。この場合、第１のボリュームドライバが、実行環境がイメージ化されることにより作成される実行環境イメージに、第１のボリュームについてのボリュームＩＤ（ボリュームについてのＩＤでありストレージシステムから当該ボリュームに関して取得された情報に従うＩＤ）を埋め込む。第２のボリュームドライバが、第１のサーバにおいて出力され第２のサーバに入力された実行環境イメージに埋め込まれているボリュームＩＤを用いて、当該実行環境イメージに基づく実行環境（第２のサーバにおける実行環境）に紐付けられるボリュームを、ストレージシステムから検索する。
【符号の説明】
【０１２８】
１００…ボリュームドライバ
【図１】
2019207540.tif 000003
【図２】
2019207540.tif 000004
【図３】
2019207540.tif 000005
【図４】
2019207540.tif 000006
【図５】
2019207540.tif 000007
【図６】
2019207540.tif 000008
【図７】
2019207540.tif 000009
【図８】
2019207540.tif 000010
【図９】
2019207540.tif 000011
【図１０】
2019207540.tif 000012
【図１１】
2019207540.tif 000013
【図１２】
2019207540.tif 000014
【図１３】
2019207540.tif 000015
【図１４】
2019207540.tif 000016