(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-31
(45)【発行日】2024-11-11
(54)【発明の名称】コンテナ化されたワークロードの分離を変更する方法、コンピュータ・システム、およびコンピュータ・プログラム。
(51)【国際特許分類】
G06F 9/455 20180101AFI20241101BHJP
G06F 21/57 20130101ALI20241101BHJP
G06F 9/445 20180101ALI20241101BHJP
【FI】
G06F9/455 150
G06F21/57 370
G06F9/445
(21)【出願番号】P 2021566234
(86)(22)【出願日】2020-05-04
(86)【国際出願番号】 IB2020054210
(87)【国際公開番号】W WO2020225708
(87)【国際公開日】2020-11-12
【審査請求日】2022-10-21
(32)【優先日】2019-05-09
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】クマタジ、マンジュナス
(72)【発明者】
【氏名】パティル、ハーシャル
(72)【発明者】
【氏名】バネルジー、プラディプタ
(72)【発明者】
【氏名】ショー、ヘマント
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0053001(US,A1)
【文献】中国特許出願公開第107608757(CN,A)
【文献】特開2017-107555(JP,A)
【文献】特表2018-530033(JP,A)
【文献】米国特許出願公開第2018/0225104(US,A1)
【文献】米国特許出願公開第2019/0235906(US,A1)
【文献】須田 一輝 KAZUKI SUDA,Kubernetes実践入門 初版 ,第1版,日本,株式会社技術評論社 片岡 巌,2019年03月16日,1-4,262,263頁
【文献】藤田 稜 RYOU FUJITA,Red Hat Enterprise Linux 7に向けた 最終段階に入ったFedora 19,SoftwareDesign 発刊275号 ,日本,(株)技術評論社,2013年09月18日,106-116頁
【文献】中西 建登,ネットワークの状況を考慮したコンテナ型コンテンツ配信基盤の検討,情報処理学会 研究報告 インターネットと運用技術(IOT) 2019-IOT-044 [online] ,日本,情報処理学会,2019年02月28日,1-8頁
【文献】山内 和朗 KAZUO YAMAUCHI,Windows Server 2012テクノロジ入門 新世代OSの新機能・機能強化のすべて 初版 ,第1版,日本,日経BP社 瀬川 弘司,2012年10月29日,353-363頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455
G06F 21/57
G06F 9/445
(57)【特許請求の範囲】
【請求項1】
ホスト・カーネルをそれぞれ有する1つ以上のコンピュート・ノードを有するシステムにおいて、コンテナ化されたワークロードの分離を変更する方法であって、
デフォルト・コンテナ・ランタイムを使用してワークロードをコンテナ化するステップであって、前記デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナを前記コンピュート・ノード上に生成する、前記コンテナ化するステップと、
前記デフォルト・コンテナ・ランタイムにより生成された前記cgroupベースの1つ以上のコンテナにおいて実行されている前記コンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイムにより起動された1つ以上の仮想マシン(VM)に、トリガ要因の検出に応答してマイグレーションするステップであって、前記トリガ要因は、認識された脅威、コンプライアンス要件の変更、およびその組み合わせからなるグループから選択される、前記マイグレーションするステップと、
を含
み、
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションするステップは、
前記スタンバイ・コンテナ・ランタイムを始動させるステップと、
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのうちの少なくとも1つの各コンテナの前記cgroupおよび前記名前空間を前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップと、
を含む、方法。
【請求項2】
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションするステップは、サービスの中断なしに実行される、請求項1に記載の方法。
【請求項3】
前記デフォルト・コンテナ・ランタイムは、cgroupおよび名前空間ベースのコンテナ・ランタイムである、請求項1または2に記載の方法。
【請求項4】
前記スタンバイ・コンテナ・ランタイムは、VMベースのコンテナ・ランタイムである、請求項1から3のいずれかに記載の方法。
【請求項5】
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのうちの少なくとも1つの各コンテナの前記cgroupおよび前記名前空間を前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップは、ユーザ空間でのチェックポイント/リストア(CRIU)を呼び出すステップを含み、前記方法は、
マイグレーションされた前記コンテナ化されたワークロードの前記少なくとも一部に対するイングレス・トラフィックを前記1つ以上のVMランタイムに再ルーティングするステップ
をさらに含む、請求項1
から4のいずれかに記載の方法。
【請求項6】
前記デフォルト・コンテナ・ランタイムにより生成された前記cgroupベースの1つ以上のコンテナにおいて実行されている前記コンテナ化されたワークロードのサブセットのコンテナ・ランタイムを、スタンバイ・コンテナ・ランタイムによって生成された1つ以上の仮想マシン(VM)において前記ワークロードを開始することにより切り替えるステップであって、切り替えは、CRIUを呼び出すことを含まない、前記切り替えるステップと、
切り替えられた前記コンテナ化されたワークロードの前記サブセットに対するイングレス・トラフィックを、前記1つ以上のVMランタイムにおいて開始された前記ワークロードに再ルーティングするステップと、
をさらに含む、請求項
5に記載の方法。
【請求項7】
前記トリガ要因を検出するステップと、
前記トリガ要因に関連する1つ以上の特性に基づいて、完全マイグレーション・モードまたは部分マイグレーション・モードのいずれかを選択するステップと、
をさらに含む、請求項1から
6のいずれかに記載の方法。
【請求項8】
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションするステップは、
前記スタンバイ・コンテナ・ランタイムを始動させるステップと、
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナの各コンテナの前記cgroupおよび前記名前空間を、前記完全マイグレーション・モードを選択することに応答して、前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップと、
を含む、請求項
7に記載の方法。
【請求項9】
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションするステップは、
前記スタンバイ・コンテナ・ランタイムを始動させるステップと、
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのサブセットの各コンテナの前記cgroupおよび前記名前空間を、前記部分マイグレーション・モードを選択することに応答して、前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップと、
を含む、請求項
7に記載の方法。
【請求項10】
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのサブセットの各コンテナの前記cgroupおよび前記名前空間を、前記部分マイグレーション・モードを選択することに応答して、前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップは、ロード・バランシングを活用することによって、通常のcgroupランタイムおよびVMランタイムにわたりコンテナを水平にスケーリングするステップを含む、請求項
9に記載の方法。
【請求項11】
前記1つ以上のVM上の前記1つ以上のVMランタイムに関連する1つ以上のサービス・メッシュ・サイドカーから送信されたランタイム・メタデータを、サービス・メッシュ・コントローラにて受信するステップと、
前記ランタイム・メタデータに基づいて前記サービス・メッシュ・コントローラにてルーティング・ルールを更新して、更新されたルーティング・ルールをイングレス・トラフィック・コントローラに送信するステップと、
前記更新されたルーティング・ルールに基づいて前記イングレス・トラフィック・コントローラにてイングレス・トラフィックをルーティングするステップと、
をさらに含む、請求項
1から10のいずれかに記載の方法。
【請求項12】
ホスト・カーネルをそれぞれ有する1つ以上のコンピュート・ノードを有するシステムにおいて、コンテナ化されたワークロードの分離を変更する方法であって、
デフォルト・コンテナ・ランタイムを使用してワークロードをコンテナ化するステップであって、前記デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナを前記コンピュート・ノード上に生成する、前記コンテナ化するステップと、
前記デフォルト・コンテナ・ランタイムにより生成された前記cgroupベースの1つ以上のコンテナにおいて実行されている前記コンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイムにより起動された1つ以上の仮想マシン(VM)に、トリガ要因の検出に応答してマイグレーションするステップであって、前記トリガ要因は、認識された脅威、コンプライアンス要件の変更、およびその組み合わせからなるグループから選択される、前記マイグレーションするステップと、
を含み、
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションするステップはさらに、
検出された前記トリガ要因に関連する1つ以上の特性に基づいて、完全マイグレーション・モードまたは部分マイグレーション・モードのいずれかを選択するステップと、
前記スタンバイ・コンテナ・ランタイムを始動させるステップと、
前記部分マイグレーション・モードを選択することに応答して、前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのサブセットの各コンテナの前記cgroupおよび前記名前空間を、前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップと、
を含む、方法。
【請求項13】
前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのサブセットの各コンテナの前記cgroupおよび前記名前空間を、前記部分マイグレーション・モードを選択することに応答して、前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするステップは、ロード・バランシングを活用することによって、通常のcgroupランタイムおよびVMランタイムにわたりコンテナを水平にスケーリングするステップを含む、請求項12に記載の方法。
【請求項14】
前記1つ以上のVM上の前記1つ以上のVMランタイムに関連する1つ以上のサービス・メッシュ・サイドカーから送信されたランタイム・メタデータを、サービス・メッシュ・コントローラにて受信するステップと、
前記ランタイム・メタデータに基づいて前記サービス・メッシュ・コントローラにてルーティング・ルールを更新して、更新されたルーティング・ルールをイングレス・トラフィック・コントローラに送信するステップと、
前記更新されたルーティング・ルールに基づいて前記イングレス・トラフィック・コントローラにてイングレス・トラフィックをルーティングするステップと、
をさらに含む、請求項12または13に記載の方法。
【請求項15】
コンテナ化されたワークロードの分離を変更するコンピュータ・システムであって、前記コンピュータ・システムは、
1つ以上のプロセッサ、1つ以上のコンピュータ可読ストレージ・デバイス、および前記1つ以上のプロセッサのうちの少なくとも1つによる実行のために前記1つ以上のコンピュータ可読ストレージ・デバイスのうちの少なくとも1つに記憶されたプログラム命令
を含み、前記プログラム命令は、
デフォルト・コンテナ・ランタイムを使用してワークロードをコンテナ化することであって、前記デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナを前記コンピュート・ノード上に生成する、前記コンテナ化すること、
前記デフォルト・コンテナ・ランタイムにより生成された前記cgroupベースの1つ以上のコンテナにおいて実行されている前記コンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイムにより起動された1つ以上の仮想マシン(VM)に、トリガ要因の検出に応答してマイグレーションすることであって、前記トリガ要因は、認識された脅威、コンプライアンス要件の変更、およびその組み合わせからなるグループから選択される、前記マイグレーションすること、
のために実行可能であ
り、
前記コンテナ化されたワークロードの少なくとも一部をマイグレーションすることのために実行可能な前記プログラム命令は、前記スタンバイ・コンテナ・ランタイムを始動させて、前記コンピュート・ノード上で実行されている前記cgroupベースの1つ以上のコンテナのうちの少なくとも1つの各コンテナの前記cgroupおよび前記名前空間を前記1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションするために実行可能なプログラム命令を含む、コンピュータ・システム。
【請求項16】
マイグレーションされた前記コンテナ化されたワークロードの前記少なくとも一部に対するイングレス・トラフィックを前記1つ以上のVMランタイムに再ルーティングするために実行可能な前記プログラム命令をさらに含む、請求項
15に記載のコンピュータ・システム。
【請求項17】
前記1つ以上のVM上の前記1つ以上のVMランタイムに関連する1つ以上のサービス・メッシュ・サイドカーから送信されたランタイム・メタデータを、サービス・メッシュ・コントローラにて受信すること、
前記ランタイム・メタデータに基づいて前記サービス・メッシュ・コントローラにてルーティング・ルールを更新して、更新されたルーティング・ルールをイングレス・トラフィック・コントローラに送信すること、
前記更新されたルーティング・ルールに基づいて前記イングレス・トラフィック・コントローラにてイングレス・トラフィックをルーティングすること、
のために実行可能な前記プログラム命令をさらに含む、請求項
16に記載のコンピュータ・システム。
【請求項18】
コンテナ化されたワークロードの分離を変更するコンピュータ・プログラムであって、1つ以上のプロセッサに、請求項1から
14のいずれかに記載の方法を実行させる、コンピュータ・プログラム。
【請求項19】
請求項
18に記載のコンピュータ・プログラムを記憶したコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、全般的に情報処理の分野に関する。特に本発明は、コンテナ化されたワークロードの分離をトリガ要因の検出に応答して動的に変更することに関する。
【背景技術】
【0002】
新たな情報技術(IT:information technology)提供モデルは、共有されるリソース、ソフトウェア、および情報がインターネット上でコンピュータおよびその他デバイスにオンデマンドで提供されるクラウド・コンピューティングである。クラウド・コンピューティングは、ITのコストおよび複雑性を大幅に軽減し、その一方で、ワークロードの最適化およびサービスの提供を改善することができる。この手法では、HTTP上で従来のウェブ・ブラウザを通してアクセス可能なインターネット・ベースのリソースから、アプリケーション・インスタンスがホストされて、利用可能にされることが可能である。例示の用途としては、電子メール、カレンダー、連絡先管理、およびインスタント・メッセージなど、メッセージ機能の一般的なセットを提供するものが考えられる。その場合、ユーザはインターネット上でサービスに直接アクセスすることになるであろう。このサービスを使用すると、企業は、その電子メール、カレンダー、もしくは共同作業インフラストラクチャ、またはそのいずれかの組み合わせをクラウドに置くことになり、エンド・ユーザは、適切なクライアントを使用して自身の電子メールにアクセスし、またはカレンダーの操作を実行することになるであろう。
【0003】
クラウド・コンピュート・リソースは、典型的には、1つ以上のネットワーク・アプリケーションを実行する大規模なサーバ・ファームに格納され、データ・センター設備内の物理的なサーバにマッピングされた仮想サーバ、つまりいわゆる「仮想マシン」(VM:virtual machine)の内部でアプリケーションが実行される仮想化アーキテクチャが使用されるのが典型的である。仮想マシンは、典型的には、仮想マシンに物理リソースを割り当てる制御プログラムであるハイパーバイザの上で実行される。最新のハイパーバイザは、ハードウェア支援仮想化を使用することが多く、ハードウェア支援仮想化は、主としてホストCPUの、仮想化特有のハードウェア能力を使用することにより、効率的且つ完全な仮想化を提供する。
【0004】
オペレーティング・システム(OS:operating system)レベル仮想化が、仮想化のもう1つの手法である。OSレベル仮想化は、オペレーティング・システムのカーネルが、分離されたユーザ空間インスタンスを複数サポートすることにより、コンピュータのリソースがパーティショニングされることを可能にし、ユーザ空間インスタンスは、通常はコンテナと呼ばれる。したがって、この仮想化の手法は、コンテナ・ベースの仮想化と呼ばれることが多い。より一般的には、OSレベル仮想化にはLinux(R)上の「Container」、FreeBSD上の「Jail」、およびSolaris上の「Zone」などが含まれるが、これらに限定はされない。コンテナは、例として、Linux(R)Container(LXC)、Docker、およびCoreOS Rocket(rkt)により実装され得る。コンテナは、エンド・ユーザには個々のマシンと区別がつかない場合もある。クラウド環境では、コンテナ・ベースの仮想化(例えばDocker)が広く使用される。例として、現在の多くのデータ・センターでは、ワークロードがコンテナ内部で実行される。コンテナは、ワークロードからの需要の変化に対して、より優れた俊敏性およびオーケストレーションを提供することができる。多数の技術がコンテナ・ベースの仮想化において使用される。当該の技術には、例として、後述する名前空間およびcgroupが含まれる。登録商標Linux(R)は、この商標の世界規模での所有者であるLinus Torvaldsの独占的被許諾者、Linux Foundationからのサブライセンスに従い使用される。
【0005】
代表的なコンテナ・クラウド・コンピュータ環境では、ホストはLinux(R)カーネルなどのオペレーティング・システムを実行する。上述した「コンテナ」という専門用語は、単一のオペレーティング・システム・カーネルを使用して、制御ホスト上で分離されたコンピューティング・ワークロード(コンテナ)を実行する、OSレベル仮想化メカニズムを指す。この手法では、単一のオペレーティング・システムによって管理されるリソースを分離されたグループに事実上パーティショニングし、分離されたグループ間のリソース使用に関する競合する需要のバランスを改善する。他のタイプの仮想化とは対照的に、命令レベルのエミュレーションも、ジャストインタイム・コンパイルも要求されない。さらにコンテナは、特別な解釈メカニズムなしに、コアCPUにネイティブな命令を実行することができる。コンテナを作成して入力する方法を提供することにより、オペレーティング・システムは、別個のマシン上で実行されていると各アプリケーションに錯覚させ、その一方で同時に、各アプリケーションは基礎をなすリソースの多くを共有する。
【0006】
Linux(R)カーネルは「名前空間」と呼ばれる機能を有する。Linux(R)コンテナの主要な構成要素であるLinux(R)カーネル名前空間は、ネットワーク、プロセス、ユーザ、およびファイル・システムなどの種々の「ユーザ空間」内にアプリケーションを分離する。名前空間は、プロセスの集合に対してシステム・リソースを分離し、仮想化する。仮想化できるリソースのいくつかの例として、プロセスID、ホスト名、ユーザID、および同様のものが挙げられる。名前空間は、典型的には、名前空間のタイプ、ならびに当該のタイプの特定のインスタンスを指す。Linux(R)オペレーティング・システムは、名前空間の各タイプの単一のインスタンスにより初期化される。初期化後、追加の名前空間を作成または結合できる。
【0007】
Linux(R)カーネルはさらに、リソース(CPU、メモリ、ブロックI/O、ネットワークなど)の制限および優先順位付けを可能にするコントロール・グループという機能性を提供し、これは「cgroup」としても知られている。cgroup機能性は、CPUの数および使用率、ディスク・パフォーマンス、メモリ、ならびにその他プロセス制限など、様々なホスト・リソースを制限する。
【0008】
コンテナ技術は、カーネルによるcgroupおよび名前空間のサポートを組み合わせて、アプリケーションのための分離された実行環境を提供する。
【0009】
コンテナは、ホスト・オペレーティング・システムとカーネルを共有する。したがって、コンテナは、カーネルの様々な脆弱性の悪用のために使用されるおそれがあり得る。ホスト・カーネルの構成に脆弱性がある場合、ホスト・カーネルの脆弱性がセキュリティ・ホールをもたらして、そこからコンテナが他のコンテナまたはホスト・システムに対する非特権アクセスを得るおそれがある。そのような脆弱性の適例は、カーネルのローカル特権昇格「Dirty COW」(CVE-2016-5195)である。悪意のあるユーザがコンテナを「脱出」してカーネルおよび他のコンテナに対するアクセスを得ることを可能にする、既知の悪用が存在する。さらなるホスト・カーネルの脆弱性および付随する悪用が引き続き発見されるであろうことは間違いない。
【0010】
この問題に対処する解決策は、これまでのところ不十分である。そのような手法の1つは、1つ以上の仮想マシンを使用してコンテナの実行を分離することを伴う。この手法では、コンテナ・ワークロードは、通常のcgroupベースのコンテナではなく、1つ以上の仮想マシンの内部で起動される。しかしながら、仮想マシンは典型的に、cgroupベースのコンテナに比べてより遅く、リソース使用量がより多い。結果として、この手法(すなわち、常に1つ以上の仮想マシンの内部でワークロードを実行すること)は、リソースの深刻な浪費につながる。
【0011】
したがって、当該技術分野において、前述の問題に対処する必要性がある。
【発明の概要】
【0012】
第1の側面から考察すると、本発明は、ホスト・カーネルをそれぞれ有する1つ以上のコンピュート・ノードを有するシステムにおいて、コンテナ化されたワークロードの分離を変更する方法を提供し、方法は、デフォルト・コンテナ・ランタイムを使用してワークロードをコンテナ化するステップであって、デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナをコンピュート・ノード上に生成する、コンテナ化するステップ、デフォルト・コンテナ・ランタイムにより生成されたcgroupベースの1つ以上のコンテナにおいて実行されているコンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイムにより起動された1つ以上の仮想マシン(VM)に、トリガ要因の検出に応答してマイグレーションするステップであって、トリガ要因は、認識された脅威、コンプライアンス要件の変更、およびその組み合わせからなるグループから選択される、マイグレーションするステップ、を含む。
【0013】
さらなる側面から考察すると、本発明は、コンテナ化されたワークロードの分離を変更するコンピュータ・システムを提供し、コンピュータ・システムは、1つ以上のプロセッサ、1つ以上のコンピュータ可読ストレージ・デバイス、および1つ以上のプロセッサのうちの少なくとも1つによる実行のために1つ以上のコンピュータ可読ストレージ・デバイスのうちの少なくとも1つに記憶されたプログラム命令を含み、プログラム命令は、デフォルト・コンテナ・ランタイムを使用してワークロードをコンテナ化することであって、デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナをコンピュート・ノード上に生成する、コンテナ化すること、デフォルト・コンテナ・ランタイムにより生成されたcgroupベースの1つ以上のコンテナにおいて実行されているコンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイムにより起動された1つ以上の仮想マシン(VM)に、トリガ要因の検出に応答してマイグレーションすることであって、トリガ要因は、認識された脅威、コンプライアンス要件の変更、およびその組み合わせからなるグループから選択される、マイグレーションすること、のために実行可能である。
【0014】
さらなる側面から考察すると、本発明は、ホスト・カーネルをそれぞれ有する1つ以上のコンピュート・ノードを有するシステムにおいて、コンテナ化されたワークロードの分離を変更するコンピュータ・プログラム製品を提供し、コンピュータ・プログラム製品は、本発明の各ステップを実行する方法を実行するために処理回路により実行される命令を記憶し処理回路によって読み取り可能なコンピュータ可読ストレージ媒体を含む。
【0015】
さらなる側面から考察すると、本発明は、コンピュータ可読媒体上に記憶されデジタル・コンピュータの内部メモリ内にロード可能なコンピュータ・プログラムを提供し、コンピュータ・プログラムは、前記プログラムがコンピュータ上で実行されると本発明の各ステップを実行するソフトウェア・コード部分を含む。
【0016】
本開示の実施形態は、コンテナ化されたワークロードの分離を、認識された脅威もしくはコンプライアンス要件の変更またはその両方などのトリガ要因の検出に応答して動的に変更する方法、装置、およびコンピュータ・プログラム製品を含む。例として、コンテナ化されたワークロードの分離は、コンテナ化されたワークロードを実行するホスト・オペレーティング・システムの脅威レベルの変化に動的に対応するために増大されてもよい。一部の実施形態において、ワークロードは、デフォルト・コンテナ・ランタイム(例えばrunC)を使用してコンテナ化され、デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナをコンピュート・ノード上に生成する。一部の実施形態において、コンテナ化されたワークロードの少なくとも一部が、ホスト・カーネルの脆弱性などの認識された脅威に応答してcgroupベースの1つ以上のコンテナにおける実行からスタンバイ・コンテナ・ランタイム(例えばrunV)により起動される1つ以上の仮想マシン(VM)にマイグレーションされる。一部の実施形態において、CRIU、つまりユーザ空間でのチェックポイント/リストア(checkpoint/restore in userspace)を使用して、cgroupベースの1つ以上のコンテナのcgroupおよび名前空間が、サービスの中断なしに1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションされる。
【0017】
以下、本発明について、次の図面に示されている好適な実施形態を参照しながら、単なる例として記載する。
【0018】
以下、添付の図面に関連して各実施形態について記載するが、図面では、同じ表示は同じ構成要素を表す。
【図面の簡単な説明】
【0019】
【
図1】1つ以上の実施形態によるクラウド・コンピューティング・ノードを示す。
【
図2】1つ以上の実施形態によるクラウド・コンピューティング環境を示す。
【
図3】1つ以上の実施形態による抽象化モデル層を示す。
【
図4】1つ以上の実施形態による、複数のコンピュート・ノードを示し、コンピュート・ノードのうちの少なくとも1つは複数の仮想マシンを含む。
【
図5】1つ以上の実施形態による、複数のコンピュート・ノードを示し、コンピュート・ノードのうちの少なくとも1つは複数のコンテナを含む。
【
図6】1つ以上の実施形態による、複数のコンピュート・ノードを含むコンテナ・オーケストレーション・システムを示し、コンピュート・ノードの少なくとも1つが、複数のコンテナを起動するコンテナ・ランタイム(例えばrunC)を含む。
【
図7】1つ以上の実施形態による、複数のコンピュート・ノードを含むコンテナ・オーケストレーション・システムを示し、コンピュート・ノードの少なくとも1つが、cgroupおよび名前空間を使用して作成されたコンテナではなく複数の従来の仮想マシンにおいてワークロードを起動するように変更されたコンテナ・ランタイム(例えばrunV)を含む。
【
図8】1つ以上の実施形態による、複数のコンピュート・ノードを含むコンテナ・オーケストレーション・システムを示し、コンピュート・ノードの少なくとも1つは、複数の実行中コンテナと、複数の仮想マシンを起動できるハイパーバイザ・ベースのコンテナ・ランタイム(例えばrunV)と、ホストから複数の仮想マシンに実行中コンテナのcgroupおよび名前空間をライブ・マイグレーションするためにトリガ要因の検出に応答して利用されるユーザ空間でのチェックポイント/リストア(CRIU)とを含む。
【
図9】1つ以上の実施形態による、CRIUを使用して複数の実行中コンテナのcgroupおよび名前空間をホストから複数の仮想マシンにライブ・マイグレーションすることにより、コンテナ化されたワークロードの分離をトリガ要因の検出に応答して動的に変更する、説明のための方法のフロー図である。
【
図10】1つ以上の実施形態による、
図8のコンテナ・オーケストレーション・システムに相当するがサービス・メッシュを介したトラフィック・シェーピングをさらに用いる、コンテナ・オーケストレーション・システムを示す。
【発明を実施するための形態】
【0020】
1つ以上の実施形態によれば、コンテナ化されたワークロードの分離が、認識された脅威もしくはコンプライアンス要件の変更またはその両方などのトリガ要因の検出に基づいて動的に変更される。例として、コンテナ化されたワークロードの分離は、コンテナ化されたワークロードを実行するホスト・オペレーティング・システムの脅威レベルの変化に動的に対応するために増大されてもよい。1つ以上の実施形態において、ワークロードは、デフォルト・コンテナ・ランタイム(例えばrunC)を使用してコンテナ化され、デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナをコンピュート・ノード上に生成する。1つ以上の実施形態において、コンテナ化されたワークロードの少なくとも一部が、認識された脅威(例えばホスト・カーネルの脆弱性)または他のトリガ要因(例えばコンプライアンス要件の変更)に応答してcgroupベースの1つ以上のコンテナにおける実行からスタンバイ・コンテナ・ランタイム(例えばrunV)により起動された1つ以上の仮想マシン(VM)にマイグレーションされる。一部の実施形態において、CRIU、つまりユーザ空間でのチェックポイント/リストアを使用して、cgroupベースの1つ以上のコンテナのcgroupおよび名前空間が、サービスの中断なしに1つ以上のVM上の1つ以上のVMランタイムにライブ・マイグレーションされる。
【0021】
当然のことながら、本開示はクラウド・コンピューティングについての詳細な記載を含むものの、本願明細書に記載する教示の実装はクラウド・コンピューティング環境に限定されない。むしろ、本発明の実施形態は、現在周知の、または後に開発される、ほかの任意のタイプのコンピューティング環境に関連して実装することができる。
【0022】
クラウド・コンピューティングは、最小限の管理作業またはサービス・プロバイダとの相互作用で迅速にプロビジョニングおよびリリースできる構成可能なコンピューティング・リソース(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールに対するオンデマンドの便利なネットワーク・アクセスを実現する、サービス提供のモデルである。このクラウド・モデルは、少なくとも5つの特徴と、少なくとも3つのサービス・モデルと、少なくとも4つの展開モデルとを含み得る。
【0023】
特徴は以下のとおりである。
オンデマンド・セルフサービス:クラウド消費者は、サーバ時間およびネットワーク・ストレージなどのコンピューティング能力を、サービスのプロバイダとの人的な相互作用をする必要なく、必要に応じて自動的に、一方的にプロビジョニングできる。
広範なネットワーク・アクセス:各能力はネットワーク上で利用可能であり、異種のシン・クライアントまたはシック・クライアントのプラットフォーム(例えばモバイル電話、ラップトップ、およびPDA(personal digital assistant:携帯情報端末))による使用を促進する標準のメカニズムを通してアクセスされる。
リソース・プーリング:プロバイダのコンピューティング・リソースは、マルチ・テナント・モデルを使用して複数の消費者にサービスを提供するようプールされ、種々の物理リソースおよび仮想リソースが需要に応じて動的に割り当ておよび再割り当てされる。一般に、消費者は、提供されるリソースの正確な場所についての制御権または知識を有しないという点で、非場所依存の感覚があるが、より高い抽象化レベルでは場所(例えば国、州、またはデータ・センター)を指定できることもある。
迅速な伸縮性:各能力は、迅速且つ伸縮自在に、場合によっては自動的にプロビジョニングされて、素早くスケール・アウトすること、および迅速に解放され素早くスケール・インすることができる。多くの場合、消費者には、プロビジョニングに利用可能な各能力は無制限であるように見え、任意の量をいつでも購入できる。
測定されるサービス:クラウド・システムは、サービスのタイプ(例えばストレージ、処理、帯域幅、およびアクティブなユーザ・アカウント)に適した或る抽象化レベルでの計測能力を活用することによって、リソースの使用を自動的に制御および最適化する。リソース使用量は、モニタリング、制御、およびレポート可能であり、利用されるサービスのプロバイダおよび消費者の双方に透明性が提供される。
【0024】
サービス・モデルは以下のとおりである。
ソフトウェア・アズ・ア・サービス(SaaS:Software as a Service):消費者に提供される能力は、クラウド・インフラストラクチャ上で実行されるプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザなどのシン・クライアント・インターフェース(例えばウェブ・ベースの電子メール)を通して様々なクライアント・デバイスからアクセス可能である。消費者は、ネットワーク、サーバ、オペレーティング・システム、ストレージを含む基礎をなすクラウド・インフラストラクチャも、個々のアプリケーションの能力さえも、管理または制御しないが、限られたユーザ別のアプリケーション構成設定は例外とされることもある。
プラットフォーム・アズ・ア・サービス(PaaS:Platform as a Service):消費者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、消費者が作成または入手したアプリケーションを、クラウド・インフラストラクチャ上に展開することである。消費者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基礎をなすクラウド・インフラストラクチャの管理または制御は行わないが、展開されたアプリケーション、さらに場合によってはアプリケーション・ホスティング環境構成を制御する。
インフラストラクチャ・アズ・ア・サービス(IaaS:Infrastructure as a Service):消費者に提供される能力は、処理、ストレージ、ネットワーク、およびその他基本的なコンピューティング・リソースのプロビジョニングであり、消費者はそこで、オペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを展開し実行することができる。消費者は、基礎をなすクラウド・インフラストラクチャの管理または制御は行わないが、オペレーティング・システム、ストレージ、展開されたアプリケーションを制御し、場合によっては、選ばれたネットワーキング・コンポーネント(例えばホスト・ファイアウォール)を限定的に制御する。
コンテナ・アズ・ア・サービス(CaaS:Containers as a Service)は、ユーザがコンテナ・ベースの仮想化を通してコンテナ、アプリケーション、およびクラスタを展開および管理できるようにするクラウド・コンピューティング・サービス・モデルである。CaaSは、概して、クラウド・コンピューティング・サービス・モデルのスペクトルにおいて、どちらも上述されているインフラストラクチャ・アズ・ア・サービス(IaaS)とプラットフォーム・アズ・ア・サービス(PaaS)との間に位置する。ただし、典型的には、CaaSはIaaSのサブセットとみなされるが、CaaSは(IaaS環境をサポートするために従来使用される仮想マシンまたはベアメタル・ハードウェア・ホスト・システムとは対照的に)その基本的なリソースとしてコンテナを含む。
【0025】
展開モデルは以下のとおりである。
プライベート・クラウド:クラウド・インフラストラクチャは、或る組織のみのために運用される。クラウド・インフラストラクチャは、組織またはサード・パーティによって管理可能であり、構内または構外に存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャは、いくつかの組織によって共有され、共有される関心事(例えばミッション、セキュリティ要件、ポリシー、およびコンプライアンス意識)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、組織またはサード・パーティによって管理可能であり、構内または構外に存在し得る。
パブリック・クラウド:クラウド・インフラストラクチャは、公衆または大規模業界団体に利用可能にされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の複合であり、各クラウドは一意のエンティティのままであるが、データおよびアプリケーションのポータビリティを実現する標準化された、または専有の技術(例えばクラウド間のロード・バランシングのためのクラウド・バースト)によってバインドされる。
【0026】
クラウド・コンピューティング環境は、サービス指向であり、ステートレス性、疎結合性、モジュール性、および意味的相互運用性に焦点を合わせる。クラウド・コンピューティングの中心には、相互接続されたノードのネットワークを含むインフラストラクチャがある。
【0027】
以下、
図1を参照する。クラウド・コンピューティング・ノードの例の略図が示されている。クラウド・コンピューティング・ノード10は、適切なクラウド・コンピューティング・ノードの一例でしかなく、なんら意味することも目的としていない。
【0028】
以下、
図1を参照する。クラウド・コンピューティング・ノードの例の略図が示されている。クラウド・コンピューティング・ノード10は、適切なクラウド・コンピューティング・ノードの一例でしかなく、本願明細書に記載される本発明の実施形態の用途または機能性の範囲について、いかなる制限を意味することも目的としていない。いずれにせよ、クラウド・コンピューティング・ノード10は、上記に記載された機能性のいずれかの実装もしくは実行またはその両方ができる。
【0029】
クラウド・コンピューティング・ノード10内には、コンピュータ・システム/サーバ12があり、これは、多数の他の汎用または専用のコンピューティング・システム環境もしくはコンピューティング・システム構成とともに動作可能である。コンピュータ・システム/サーバ12とともに使用するのに適していると考えられる周知のコンピューティング・システム、環境、もしくは構成、またはそのいずれかの組み合わせの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルド・デバイスまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境、ならびに同様のものが挙げられるが、これらに限定はされない。
【0030】
コンピュータ・システム/サーバ12については、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的文脈において記載することができる。一般に、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを通してリンクされているリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施されてもよい。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に位置し得る。
【0031】
図1に示されているように、クラウド・コンピューティング・ノード10内のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ12のコンポーネントには、1つ以上のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム・コンポーネントをプロセッサ16に結合するバス18が含まれ得るが、これらに限定はされない。
【0032】
バス18は、メモリ・バスまたはメモリ・コントローラ、周辺機器用バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサ・バスまたはローカル・バスを含む、いくつかのタイプのバス構造の任意のもの1つ以上を表現する。限定ではなく例として、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA:Industry Standard Architecture)バス、マイクロ・チャネル・アーキテクチャ(MCA:Micro Channel Architecture)バス、拡張ISA(EISA:Enhanced ISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA:Video Electronics Standards Association)ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI:Peripheral Component Interconnects)バスが含まれる。
【0033】
コンピュータ・システム/サーバ12は、典型的には、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体としてよく、揮発性および不揮発性の媒体、ならびにリムーバブルおよび非リムーバブルの媒体の両方を含む。
【0034】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM:random access memory)30もしくはキャッシュ・メモリ32またはその両方など、揮発性メモリの形態のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、このほか、リムーバブル/非リムーバブルの揮発性/不揮発性コンピュータ・システム・ストレージ媒体をさらに含んでもよい。単なる例として、非リムーバブルの不揮発性磁気媒体(図示はしておらず、典型的には「ハード・ドライブ」と呼ばれる)、およびその他非リムーバブルの不揮発性媒体(例えば「ソリッドステート・ドライブ」)に対する読み取りおよび書き込みのために、ストレージ・システム34を提供できる。図示してはいないが、リムーバブル不揮発性磁気ディスク(例えば「フレキシブル・ディスク」)に対する読み取りおよび書き込みのための磁気ディスク・ドライブ、およびCD-ROM(compact disc read-only memory:コンパクト・ディスク読み取り専用メモリ)、DVD-ROM、またはその他の光媒体などのリムーバブル不揮発性光ディスクに対する読み取りもしくは書き込みまたはその両方のための光ディスク・ドライブを提供できる。そのような事例では、それぞれを、1つ以上のデータ媒体インターフェースによってバス18に接続できる。さらに後述されるように、メモリ28は、本発明の1つ以上の特徴を実行するように構成されたコンピュータ可読命令を含むプログラム・モジュール42のセット(例えば少なくとも1つ)を記憶するコンピュータ・プログラム製品を含んでもよい。
【0035】
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40は、限定ではなく例として、オペレーティング・システム、1つ以上のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様にメモリ28に記憶されてもよい。オペレーティング・システム、1つ以上のアプリケーション・プログラム、その他プログラム・モジュール、およびプログラム・データ、またはその何らかの組み合わせのそれぞれが、ネットワーキング環境の実装を含んでもよい。一部の実施形態において、プログラム・モジュール42は、本発明の1つ以上の実施形態の1つ以上の機能もしくは方法論またはその両方を、広く実行するようになっている。
【0036】
コンピュータ・システム/サーバ12はさらに、例えばキーボード、ポインティング・デバイス、ディスプレイ24などの1つ以上の外部デバイス14、もしくはユーザがコンピュータ・システム/サーバ12と相互作用できるようにする1つ以上のデバイス、もしくはコンピュータ・システム/サーバ12が1つ以上のほかのコンピューティング・デバイスと通信できるようにする任意のデバイス(例えばネットワーク・カード、モデムなど)、またはそのいずれかの組み合わせと通信してもよい。そのような通信は、入出力(I/O:Input/Output)インターフェース22を介して発生できる。さらにコンピュータ・システム/サーバ12は、ローカル・エリア・ネットワーク(LAN:local area network)、一般的なワイド・エリア・ネットワーク(WAN:wide area network)、もしくはパブリック・ネットワーク(例えばインターネット)、またはそのいずれかの組み合わせなどの1つ以上のネットワークと、ネットワーク・アダプタ20を介して通信できる。図示されているように、ネットワーク・アダプタ20は、コンピュータ・システム/サーバ12の他のコンポーネントとバス18を介して通信する。図示されてはいないが、当然のことながら、他のハードウェアもしくはソフトウェアまたはその両方のコンポーネントを、コンピュータ・システム/サーバ12とともに使用できるであろう。例としては、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これに限定はされない。
【0037】
以下、
図2を参照する。説明のためのクラウド・コンピューティング環境50が示されている。図のように、クラウド・コンピューティング環境50は、1つ以上のクラウド・コンピューティング・ノード10を含み、例として携帯情報端末(PDA)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、もしくは自動車用コンピュータ・システム54N、またはそのいずれかの組み合わせなど、クラウド消費者により使用されるローカル・コンピューティング・デバイスが、クラウド・コンピューティング・ノード10と通信できる。ノード10は、互いに通信し得る。ノード10は、上述のプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、もしくはハイブリッド・クラウド、またはその組み合わせなどの1つ以上のネットワークにおいて、物理的または仮想的にグループ化されてもよい(図示せず)。これにより、クラウド・コンピューティング環境50は、インフラストラクチャ、プラットフォーム、もしくはソフトウェア、またはそのいずれかの組み合わせをサービスとして提供することができ、それらのためにクラウド消費者がローカル・コンピューティング・デバイス上にリソースを維持する必要はない。当然のことながら、
図2に示されているコンピューティング・デバイス54A~Nのタイプは、説明のみを目的としており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意のタイプのネットワークもしくはネットワーク・アドレス指定可能な接続(例えばウェブ・ブラウザを使用)またはその両方によって、任意のタイプのコンピュータ化デバイスと通信できる。
【0038】
以下、
図3を参照する。クラウド・コンピューティング環境50(
図2)によって提供される機能抽象化層のセットが示されている。
図3に示されているコンポーネント、層、および機能は、説明のみを目的としており、本発明の実施形態はこれらに限定されないことをあらかじめ理解されたい。図示されているように、以下の層および対応する機能が提供される。
【0039】
ハードウェアおよびソフトウェア層60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61、RISC(縮小命令セット・コンピュータ(Reduced Instruction Set Computer))アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーキング・コンポーネント66が挙げられる。一部の実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0040】
仮想化層70は、抽象化層を提供し、抽象化層から、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75を例とする仮想エンティティが提供されてもよい。
【0041】
一例において、管理層80は下記の機能を提供してもよい。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用されるコンピューティング・リソースおよびその他のリソースの動的な調達を提供する。計測および価格決定82は、クラウド・コンピューティング環境内でリソースが利用されるときのコストの追跡と、こうしたリソースの消費に対する請求またはインボイスの作成とを提供する。一例において、これらのリソースはアプリケーション・ソフトウェア・ライセンスを含んでもよい。セキュリティは、クラウド消費者およびタスクのアイデンティティ確認、ならびにデータおよびその他のリソースの保護を提供する。ユーザ・ポータル83は、消費者およびシステム管理者に、クラウド・コンピューティング環境に対するアクセスを提供する。サービス・レベル管理84は、必要なサービス・レベルが満たされるようにクラウド・コンピューティング・リソースの割り当ておよび管理を提供する。サービス・レベル合意(SLA:Service Level Agreement)計画および達成85は、SLAに従い将来の要求が予想されるクラウド・コンピューティング・リソースの事前準備および調達を提供する。
【0042】
ワークロード層90は、クラウド・コンピューティング環境が利用される目的となり得る機能性の例を提供する。この層から提供され得るワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ分析処理94、トランザクション処理95、ならびにモバイル・デスクトップ96が挙げられる。
【0043】
図4および
図5はそれぞれ、本発明の一部の実施形態に従って使用され得る複数のコンピュート・ノード400および500(「ホスト・デバイス」とも呼ばれる)を示す。
図4のコンピュート・ノード400は、対象の実マシンの完全な代わりとなり、且つ完全なオペレーティング・システム403の実行に必要なレベルの機能性を提供する、例示的な複数のシステムVM、すなわち完全仮想化VMを含む。
図5のコンピュート・ノード500は、例示的なOSレベルの仮想化システムを複数含み、このシステムは、通常はコンテナと呼ばれてエンド・ユーザには実マシンのような外観および操作性を持ち得る分離された複数のユーザ空間インスタンスをカーネルがサポートすることにより、コンピュータのリソースのパーティショニングを可能にする。本発明の一部の実施形態は、様々なタイプの仮想化とともに使用されてもよい。例として、本発明の一部の実施形態は、仮想マシンの管理(OpenStackなど)およびコンテナの管理(Kubernetesなど)とともに使用されてもよい。
【0044】
例として、コンテナ管理システム(例えばKubernetes、Docker Swarm)が、クラスタ規模のシステムにおいてコンテナのライフサイクル(作成、読み取り、更新、および削除(CRUD:Create,Read,Update,and Delete))を管理するために利用されてもよい。典型的な例として、コンテナ作成リクエストが受信されると、スケジューラが、リクエストされたコンテナが実行されるホストを選択する。次に、選択されたホスト内のエージェントがコンテナを起動する。当然のことながら、「ホスト」および「ノード」という用語は、本願明細書において交換可能なように使用され、プロセッサと、メモリと、他のホスト/ノードと相互作用するための通信メカニズムとを少なくとも伴うハードウェア装置またはハードウェア・システムを指す。
【0045】
図4および
図5は、完全仮想化およびOSレベル仮想化を使用するコンピュート・ノード400および500をそれぞれ示している。本発明の一部の実施形態は、これらのタイプのコンピュート・ノードのいずれかとともに使用されてもよく、さらに、単一または複数のコンピュート・ノードにわたるこれらのコンピュート・ノードの組み合わせを備えたハイブリッド環境において使用されてもよい。
【0046】
図4に示されているように、コンピュート・ノード400はそれぞれ、プロセッサ(またはCPU)407、メモリ408、ネットワーク・インターフェース・カード(NIC:network interface card)409、およびディスク・ドライブ410を含み得るハードウェア406を含む。ディスク・ドライブ410は、ソリッド・ステート・ドライブもしくはハード・ディスク・ドライブ、またはこの2つの何らかの組み合わせを含んでもよい。コンピュート・ノード400は、ハードウェア上でホスト・オペレーティング・システム405を実行する。コンピュート・ノード400はさらに、ハードウェア406を共有および管理するためのハイパーバイザ404を含み、相互に分離された異なる複数の環境401が同じ物理マシン400上で実行できる。ハイパーバイザ404は、ハードウェア支援仮想化を使用してもよく、ハードウェア支援仮想化は、主としてホストCPU407の、仮想化特有のハードウェア能力を使用することにより、効率的且つ完全な仮想化を提供する。各コンピュート・ノード400は、1つ以上の仮想マシン401を含み、そのそれぞれが、ゲスト・オペレーティング・システム403と、ゲスト・オペレーティング・システム403上で実行される1つ以上のアプリケーション・プログラム(またはアプリケーション)402とを含む。
【0047】
同様に、
図5に示されているように、コンピュート・ノード500はそれぞれ、プロセッサ(またはCPU)507、メモリ508、ネットワーク・インターフェース・カード(NIC)509、およびディスク・ドライブ510を含み得るハードウェア506を含む。ディスク・ドライブ510は、ソリッド・ステート・ドライブもしくはハード・ディスク・ドライブ、またはこの2つの何らかの組み合わせを含んでもよい。コンピュート・ノード500は、ハードウェア上でホスト・オペレーティング・システム505を実行する。各コンピュート・ノード500は、1つ以上のコンテナ501を含み、そのそれぞれが、1つ以上のアプリケーション502を含む。
【0048】
一部の実施形態によれば、コンピュート・ノード500は、1つ以上のポッド503を含んでもよく、そのそれぞれが1つ以上のコンテナ501を含み、そのそれぞれが1つ以上のアプリケーション502を含む。例として、Kubernetesでは、コンテナはポッド内で実行される。
【0049】
「Kubernetes」は、コンテナ化されたワークロードおよびサービスを管理する、ポータブル且つ拡張可能なオープンソースのプラットフォームである。Kubernetesは、宣言的な構成および自動化の両方を促進する。Kubernetesプロジェクトは、2014年にGoogleによってオープンソース化された。Kubernetesは、ユーザ・ワークロードのためにコンピューティング、ネットワーキング、およびストレージ・インフラストラクチャをオーケストレーションする。Kubernetesは、オーケストレーション・フレームワークの一例である。他のオーケストレーション・フレームワークには、Docker Swarm、LXD、Rancher、およびApache Aurora/Mesosが含まれるが、これらに限定はされない。
【0050】
複数のコンピュート・ノード内のコンテナ化されたワークロードは、コンテナ・オーケストレーション・マネージャ(COM:container orchestration manager)によって管理されてもよい。コンテナ・オーケストレーション・マネージャ(COM)の一例は、Kubernetesマスタである。
【0051】
いくつかのバイナリ・コンポーネント(例えばマスタ・コンポーネント、ノード・コンポーネント、およびアドオン)が、機能するKubernetesクラスタを提供するために利用される。
【0052】
マスタ・コンポーネントは、Kubernetesクラスタの制御プレーン(「Kubernetes制御プレーン」とも呼ばれる)を提供する。マスタ・コンポーネントには、kube-apiserver、etcd、kube-scheduler、kube-controller-manager、およびcloud-controller-managerが含まれ得るが、これらに限定はされない。マスタ・コンポーネントは、Kubernetesクラスタについてのグローバルな決定を下す。例としてマスタ・コンポーネントは、スケジューリングを処理する。さらにマスタ・コンポーネントは、クラスタ・イベントの検出およびそれに対する応答に利用される。例としてマスタ・コンポーネントは、レプリケーション・コントローラの「レプリカ」フィールドが満たされていない場合に、新しいポッドを開始することを担当する。マスタ・コンポーネントは、クラスタ内の任意のマシン上で実行できる。とはいえ、セットアップ・スクリプトは、典型的にはすべてのマスタ・コンポーネントを同じマシン上で開始し、そのマシン上ではユーザ・コンテナを実行しない。
【0053】
ノード・コンポーネントは、Kubernetesクラスタ内のすべてのコンピュート・ノード上で実行される。ノード・コンポーネントは、実行中のポッドを維持すること、およびKubernetesランタイム環境を提供することを担当する。ノード・コンポーネントには、kubelet、kube-proxy、およびコンテナ・ランタイムが含まれ得るが、これらに限定はされない。
【0054】
kubeletは、ポッド内でコンテナが実行されていることを確認するエージェントである。kubeletは、様々なメカニズムを通して提供されるPodSpecsのセットにおいて指定されたコンテナが、実行されていて、且つ健全であることを保証する。
【0055】
kube-proxyは、ネットワーク・プロキシである。kube-proxyは、コンピュート・ノード上でネットワーク・ルールを維持して接続転送を実行することにより、Kubernetesサービスの抽象化を可能にする。
【0056】
コンテナ・ランタイムは、コンテナの実行を担当するソフトウェアである。より具体的には、コンテナ・ランタイムは、コンテナのライフサイクルを処理するノード・コンポーネントである。コンテナ・ランタイムは、コンテナ・ワークロードの作成、開始、停止、および除去などの基本的な概念を実装する。Kubernetesは、Docker、containerd、CRI-O、およびrktletを含むがこれらに限定されない、いくつかのランタイムをサポートする。
【0057】
より一般的には、Kubernetesは、Kubernetesが提供するコンテナ・ランタイム・インターフェース(CRI:Container Runtime Interface)の任意の実装をサポートする。CRIは、様々なコンテナ・ランタイムが容易にプラグインされることを可能にする。Kubernetes 1.5においてCRIが導入される前は、デフォルトのDockerイメージ・リポジトリおよびそのデフォルトのOCI互換ランタイムであるrunCのみが使用されていた。オープン・コンテナ・イニシアチブ(OCI:Open Container Initiative)が、OCI互換コンテナ・ランタイムのAPIを詳述するランタイム仕様を作成した。runC、runV、およびIntelのClear Containers(「cc-runtime」としても周知である)が、OCI互換コンテナ・ランタイムの例である。runCには、コンテナのチェックポイントおよびリストアを行う、後述のCRIU、つまりユーザ空間でのチェックポイント/リストアのサポートが組み込まれている。runVは、OCIのためのハイパーバイザ・ベースのDockerランタイムである。runVは、「Hyper runV」とも呼ばれる。
【0058】
CRIランタイムは、より高い抽象化レベルにあり、OCI互換ランタイムと混同されるべきではない。CRIランタイムは、「CRIシム(shim)」とも呼ばれる。CRIシムには、cri-containerd、CRI-O、dockershim、およびfraktiが含まれる。一部のCRIシム(例えばcri-containerd、CRI-O、およびdockershim)は、OCI互換ランタイムを呼び出す一方で、他のCRIシム(例えばfrakti)は、モノリシックなソリューションである。
【0059】
少なくとも一部のCRIシムは、単一のコンピュート・ノード上で実行される複数のランタイムをサポートする。例として、CRI-Oは、信頼されたサンドボックスおよび信頼されていないサンドボックスの概念をサポートする。Kubernetesでは、1つ以上のVMベースのポッドおよび1つ以上のcgroup/名前空間ベースのポッドの複合が、ポッド・アノテーションおよびデフォルトのCRI-O構成に基づいて、単一のコンピュート・ノード上で実行され得る。VMベースのポッドの内部で実行されるコンテナは、runCにより行われるのと同様に、名前空間およびcgroupにより分離され、管理され得る。
【0060】
アドオンは、クラスタ機能の実装を担当するポッドおよびサービスである。アドオンには、クラスタDNS(すなわち、KubernetesサービスのDNSレコードを提供するDNSサーバ)、ダッシュボード(すなわち、クラスタ内で実行されているアプリケーションならびにクラスタ自体をユーザが管理し、トラブルシューティングを行うことを可能にする、Kubernetesクラスタのウェブ・ベースのUI)、コンテナ・リソース・モニタリング(すなわち、コンテナについての一般的な時系列のメトリクスを中央データベースに記録すること、ならびにそのデータベースに記録されたデータを閲覧するためのUIを提供することを担当する)、およびクラスタ・レベル・ロギング(すなわち、検索/閲覧インターフェースを備えた中央ログ・ストアにコンテナ・ログを保存することを担当する)が含まれるが、これらに限定はされない。
【0061】
1つ以上の実施形態によれば、CRIUの機能を使用して、コンテナ化されたワークロードの1つのランタイム(例えばrunC)から別のランタイム(例えばrunV)へのライブ・マイグレーションが、サービスの中断なしに達成され得る。概して、CRIUは、ソースにおいて実行中コンテナの状態を凍結し、デスティネーションにおいて同じ実行状態でコンテナをリストアする能力を提供する。CRIUプロセスは、典型的には次の動作を含む:1)ソースとデスティネーションとの間でコンテナのファイル・システムを同期する(凍結前/ダンプ)、2)ソースにてコンテナのプロセスを凍結する、3)ソースにてコンテナを(例えばチェックポイント・ディレクトリ内のダンプ・ファイルに)ダンプする、4)ソースとデスティネーションとの間でコンテナのファイル・システムを同期する(凍結後/ダンプ)、5)デスティネーションにてダンプ・ファイルをコピーする、6)デスティネーションにてコンテナを再開する、7)デスティネーションにて、コンテナの凍結されたプロセスを再開する、8)ソースにてコンテナを停止する、さらに9)ソースにてコンテナを破壊する。
【0062】
図6は、1つ以上の実施形態による、複数のコンピュート・ノード602を含むコンテナ・オーケストレーション・システム600を示し、コンピュート・ノードの少なくとも1つが、複数のコンテナ606を起動するコンテナ・ランタイム(例えばrunC)604を含む。コンテナ・オーケストレーション・システム600は、クラスタとも呼ばれることがある(例えば、コンテナ・オーケストレーション・システム600はKubernetesクラスタに相当し得る)。コンピュート・ノード602は、コンテナ・オーケストレーション・マネージャ(COM)610によって管理されてもよい。例として、Kubernetesでは、各コンピュート・ノード602は1つ以上のポッド608を実行するのに必要なサービス(すなわちノード・コンポーネント)を含み、Kubernetesマスタ・コンポーネントによって管理される。各コンピュート・ノード602上のサービスは、コンテナ・ランタイム604(例えばrunC)、当該のコンピュート・ノード上で実行されるコンテナ・ライフサイクル動作に関するコンテナ・オーケストレーション・マネージャ(COM)610からの命令をリッスンするエージェント612(例えばkubelet)、およびネットワーク・プロキシ(例えばkube-proxy)を含んでもよい。コンテナ・オーケストレーション・マネージャ(COM)610は、Kubernetesマスタ・コンポーネントのうちの1つ以上の、少なくとも一部を含んでもよい。
【0063】
コンテナ・ランタイム604(例えばrunC)は、コンピュート・ノード・レベルで1つ以上のコンテナ606を管理する。コンテナ・オーケストレーション・マネージャ(COM)610は、分散型システム(Kubernetesクラスタ)レベルで各コンテナ・ランタイム604(例えばrunC)を管理する(すなわち1つ以上のコンテナ・ランタイム(例えばrunC)を管理する)。
【0064】
当然のことながら、コンテナ606は、コンテナ・ランタイム604(例えばrunC)を使用して、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間などのリソース制限能力を用いてコンピュート・ノード602上に生成される。runCは、オープン・コンテナ・イニシアチブ(OCI)仕様に従ってコンテナを生成し、実行するコマンド・ライン・ツールである。runCは、ライトウェイト・ユニバーサル・コンテナ・ランタイムであり、Linux(R)cgroupおよび名前空間を使用して分離を提供する。runCは、OCI互換コンテナ・ランタイムの一例である。当業者であれば当然のことながら、runCの代わりに、またはrunCに加えて、他のコンテナ・ランタイムが使用されてもよい。例としてrunCは、runCを呼び出すCRI-OなどのCRIランタイム(CRIシム)とともに使用されてもよい。
【0065】
図6に示されている実施形態において、コンテナ・オーケストレーション・システム600は、イングレス・トラフィック・コントローラ614を含む。
図6では、イングレス・トラフィック・コントローラ614がコンテナ・オーケストレーション・マネージャ(COM)610と別個に示されているが、コンテナ・オーケストレーション・マネージャ(COM)610およびイングレス・トラフィック・コントローラ614は同じマシン上で実行されてもよい。イングレス・トラフィック・コントローラ614は、管理者616によって設定されてもよい。
【0066】
Kubernetesにおいて、イングレスは、Kubernetesクラスタ内のサービスに対するKubernetesクラスタ外部からのアクセスを管理するAPIオブジェクトである。アクセスは、どのインバウンド接続がクラスタ内のどのKubernetesサービスに到達するかを定義するルール(「ルーティング・ルール」と呼ばれる)の集合を作成することによって設定できる。トラフィック・ルーティングは、イングレス・リソース上に定義されたルーティング・ルールによって制御される。ルーティング・ルールは、典型的には、一箇所(「イングレス・リソース」と呼ばれる)に統合される。イングレスは、例として、ロード・バランシング、SSLターミネーション、および名前ベースのルーティングなどを提供することができる。イングレスは、クラスタ外部からクラスタ内のサービスへのHTTPおよびHTTPSルートを公開する。
【0067】
図6に示されているイングレス・トラフィック・コントローラ614などのイングレス・コントローラは、イングレスを実行することを担当する。例として、Googleコンピュート・エンジン(GCE:Google Compute Engine)/Google Kubernetesエンジン(GKE:Google Kubernetes Engine)は、マスタ上にイングレス・コントローラを展開(デプロイ)する。GCE/GKE以外の環境では、いくつかのイングレス・コントローラのいずれか(例えばNginxイングレス・コントローラ)が展開に利用可能である。
【0068】
図7は、1つ以上の実施形態による、複数のコンピュート・ノード702を含むコンテナ・オーケストレーション・システム700を示し、コンピュート・ノードの少なくとも1つが、cgroupおよび名前空間を使用して作成されたコンテナではなく複数の従来の仮想マシン708においてワークロード706を起動するように変更されたコンテナ・ランタイム704(例えばrunV)を含む。このタイプのセットアップは、例として、ワークロード706が非常に重要な性質のもの(例えば金融取引およびハイパーレジャー・ブロックチェーンのバリデーション)であり、「Dirty COW」などのカーネルの脆弱性から保護する必要がある場合に有用である。コンテナ・オーケストレーション・システム700は、クラスタとも呼ばれることがある(例えば、コンテナ・オーケストレーション・システム700はKubernetesクラスタに相当し得る)。コンピュート・ノード702は、コンテナ・オーケストレーション・マネージャ(COM)710によって管理されてもよい。例として、Kubernetesでは、各コンピュート・ノード702は1つ以上のポッドを実行するのに必要なサービス(すなわちノード・コンポーネント)を含み、Kubernetesマスタ・コンポーネントによって管理される。各コンピュート・ノード702上のサービスは、コンテナ・ランタイム704(例えばrunVまたはその他OCIランタイム仕様のハイパーバイザ・ベースのランタイム実装)、当該のコンピュート・ノード上で実行されるコンテナ・ライフサイクル動作に関するコンテナ・オーケストレーション・マネージャ(COM)710からの命令をリッスンするエージェント712(例えばkubelet)、およびネットワーク・プロキシ(例えばkube-proxy)を含んでもよい。コンテナ・オーケストレーション・マネージャ(COM)710は、Kubernetesマスタ・コンポーネントのうちの1つ以上の、少なくとも一部を含んでもよい。
【0069】
コンテナ・ランタイム704(例えばrunV)は、コンピュート・ノード・レベルでワークロード706を管理する。コンテナ・オーケストレーション・マネージャ(COM)710は、分散型システム(Kubernetesクラスタ)レベルで各コンテナ・ランタイム704(例えばrunV)を管理する(すなわち1つ以上のコンテナ・ランタイム(例えばrunV)を管理する)。
【0070】
Hyper runV(「runV」とも呼ばれる)は、OCIランタイムのためのハイパーバイザ・ベースのランタイム(すなわちOCI互換ランタイム)であり、runCと同様に機能する。ただし、runCとは異なり、runVはcgroupおよび名前空間を使用せず、ハイパーバイザを使用して(Docker)イメージを実行する。当業者には当然のことながら、OCIランタイム仕様の他のハイパーバイザ・ベースのランタイム実装が、runVの代わりに、またはrunVに加えて使用されてもよい。runVなどのハイパーバイザ・ベースのランタイムは、本願明細書において「VMベースのコンテナ・ランタイム」とも呼ばれる。このほか、OCIランタイム仕様のハイパーバイザ・ベースのランタイム実装の例として、Intel(R)Clear Containers(「cc-runtime」としても周知である)およびVMWareのVSphere Integrated Containers(VIC)が挙げられるが、これらに限定はされない。さらに、runVおよびその他OCIランタイム仕様のハイパーバイザ・ベースのランタイム実装は、CRI-Oなど、ハイパーバイザ・ベースのランタイムを呼び出すCRIランタイム(CRIシム)とともに使用されてもよい。Intelは、Intel Corporationまたはその子会社の米国およびその他の国々における商標または登録商標である。VMwareは、VMware,Inc.またはその子会社の米国もしくはその他の法域またはその両方における登録商標または商標である。
【0071】
図8は、1つ以上の実施形態による、複数のコンピュート・ノード802を含むコンテナ・オーケストレーション・システム800を示し、コンピュート・ノードの少なくとも1つは、複数の実行中コンテナ806と、複数の仮想マシン810を起動できるハイパーバイザ・ベースのコンテナ・ランタイム805(例えばrunV)と、ホスト802から複数の仮想マシン810に実行中コンテナ806のcgroupおよび名前空間をライブ・マイグレーションするためにトリガ要因の検出に応答して利用されるユーザ空間でのチェックポイント/リストア(CRIU)820とを含む。ホスト802から複数の仮想マシン810へのcgroupおよび名前空間のライブ・マイグレーションは、複数の仮想マシン810上で実行されるcgroupベースのコンテナ808を確立する。
【0072】
1つ以上の実施形態によれば、コンテナ・オーケストレーション・マネージャ(COM)811は、完全マイグレーション・モードまたは部分マイグレーション・モードのいずれかを始動させることによってトリガ要因の検出に応答するように(例えば管理者801によって)設定されてもよい。例として、検出されるトリガ要因次第で、COM811の管理者801は、完全なワークロードを通常のcgroupおよび名前空間ベースのコンテナ・ランタイムからVMベースのコンテナ・ランタイムに移行させる完全マイグレーション・モードを選択してもよく、またはロード・バランシングを活用することによって通常のcgroupおよび名前空間ベースのコンテナ・ランタイムならびにVMベースのコンテナ・ランタイムにわたりコンテナを水平にスケーリングする部分マイグレーション・モードを選択してもよい。
【0073】
例として、cgroupベースのコンテナにおいて実行されているワークロードは、ホスト・カーネルの脆弱性などのトリガ要因の検出に応答してマイグレーションすることができる。一部の実施形態において、このマイグレーションは、サービスの中断を招くことなく発生することができる。なお、cgroupベースのコンテナで実行されているワークロードは、ホスト・カーネルの脆弱性の代わりに、またはそれに加えて他の1つ以上のトリガ要因が検出されることに応答して、マイグレーションされてもよいことは、当業者に理解されるであろう。この手法は、例えば、実行中のサービスのコンプライアンス要件がサービス・アップタイムの中断なしに変更される必要があるシナリオにおいても使用できる。
【0074】
コンテナ・ランタイム804(例えばrunC)は、コンピュート・ノード・レベルでコンテナ806を管理する。コンテナ・ランタイム804(例えばrunC)は、本願明細書において「デフォルト・コンテナ・ランタイム」とも呼ばれる。
【0075】
ハイパーバイザ・ベースのコンテナ・ランタイム805(例えばrunV)は、コンピュート・ノード・レベルでコンテナ808を管理する。ハイパーバイザ・ベースのコンテナ・ランタイム805(例えばrunV)は、本願明細書において「スタンバイ・コンテナ・ランタイム」とも呼ばれる。
【0076】
コンテナ・オーケストレーション・マネージャ(COM)811は、分散型システム(Kubernetesクラスタ)レベルで各コンテナ・ランタイム804(例えばrunC)および各ハイパーバイザ・ベースのコンテナ・ランタイム805(例えばrunV)を管理する(すなわち1つ以上のコンテナ・ランタイム804(例えばrunC)および1つ以上のハイパーバイザ・ベースのコンテナ・ランタイム(例えばrunV)を管理する)。
【0077】
チェックポイント・コマンドは、コンテナが現在実行されているホスト上でのコンテナの現在の状態をチェックポイント(すなわちCRIUの「C」)する。そのデフォルト設定で、runCは、チェックポイント・データをチェックポイントと呼ばれるディレクトリに書き込む。チェックポイントは、コンテナ内のすべてのプロセスを、チェックポイント中に当該プロセスがあった状態と同じ状態にリストアするために必要な情報をすべて含む。このチェックポイント・データは、オープン・ファイル、メモリ・コンテンツ、およびファイル・システムを含む。このチェックポイント・データはさらに、cgroupおよび名前空間を含む。1つ以上の実施形態によれば、runCによってすべてのチェックポイント・データがチェックポイント・ディレクトリに書き込まれると、runVによって起動されたVM上でコンテナをリストアできる。リストア・コマンドは、チェックポイント・ディレクトリからチェックポイント・データを読み取り、コンテナ内のすべてのプロセスを、チェックポイント中に当該プロセスがあった状態と同じ状態にリストアする(すなわちCRIUの「R」)。
【0078】
1つ以上の実施形態によれば、コンテナのランタイム状態をチェックポイントすることは、実行中コンテナを一時的に休止し、コンテナのインメモリ・データおよびファイル・システムの状態の両方を捕捉して、ローカル・ディスクに記憶することを含んでもよい。例示的な実装において、CRIUは、コンテナのインメモリ・データを休止してイメージ・ファイルのセットの形式でダンプし、コンテナのファイル・システムをスナップショットして、コンテナのオンディスク状態を捕捉するために使用されてもよい。
【0079】
図8を参照する。コンテナ806がインスタンス化され、ホスト802上で実行される。コンテナ806は、コンテナ・メモリ・データおよびコンテナ・ファイル・システムを含む。チェックポイントすると、コンテナ806からのデータはローカル・ディスク(例えば
図5のディスク510)に記憶されてもよい。このデータは、コンテナ・メモリ・データおよびコンテナ・ファイル・システムを含む。例示的な一実施形態において、メモリ・データは、/var/lib/container/CONTAINER-ID/statesSTATE-ID/MEM-IDに記憶でき、ファイル・システムは、/var/lib/container/CONTAINER-ID/statesSTATE-ID/FS-IDに記憶できる。
【0080】
コンテナ・オーケストレーション・システム800は、クラスタとも呼ばれることがある(例えば、コンテナ・オーケストレーション・システム800はKubernetesクラスタに相当し得る)。コンピュート・ノード802は、コンテナ・オーケストレーション・マネージャ(COM)811によって管理されてもよい。例として、Kubernetesでは、各コンピュート・ノード802は1つ以上のポッド807、809を実行するのに必要なサービス(すなわちノード・コンポーネント)を含み、Kubernetesマスタ・コンポーネントによって管理される。各コンピュート・ノード802上のサービスは、コンテナ・ランタイム804(例えばrunC)、ハイパーバイザ・ベースのコンテナ・ランタイム805(例えばrunV)、当該のコンピュート・ノード上で実行されるコンテナ・ライフサイクル動作に関するコンテナ・オーケストレーション・マネージャ(COM)811からの命令をリッスンするエージェント812(例えばkubelet)、およびネットワーク・プロキシ(例えばkube-proxy)を含んでもよい。コンテナ・オーケストレーション・マネージャ(COM)811は、Kubernetesマスタ・コンポーネントのうちの1つ以上の、少なくとも一部を含んでもよい。
【0081】
図8に示されている実施形態では、複数の実行中コンテナ806は、コンテナ・ランタイム804(例えばrunC)によって起動されるcgroupベースのコンテナである。当然のことながら、コンテナ806は、コンテナ・ランタイム804(例えばrunC)を使用して、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間などのリソース制限能力を用いてコンピュート・ノード802上に生成される。runCは、オープン・コンテナ・イニシアチブ(OCI)仕様に従ってコンテナを生成し、実行するコマンド・ライン・ツールである。runCは、ライトウェイト・ユニバーサル・コンテナ・ランタイムであり、Linux(R)cgroupおよび名前空間を使用して分離を提供する。
【0082】
runCは、OCI互換コンテナ・ランタイムの一例である。当業者であれば当然のことながら、runCの代わりに、またはrunCに加えて、他のコンテナ・ランタイムが使用されてもよい。例としてrunCは、runCを呼び出すCRI-OなどのCRIランタイム(CRIシム)とともに使用されてもよい。
【0083】
runVは、OCIランタイムのための、Hyper(The Hyper.sh Team)からのハイパーバイザ・ベースのDockerランタイム(すなわちOCI互換ランタイム)であり、runCと同様に機能する。ただし、runCとは異なり、runVはcgroupおよび名前空間を使用せず、ハイパーバイザを使用して(Docker)イメージを実行する。runVは、ハイパーバイザ・ベースのDockerランタイムであるが、ハイパーバイザに依存しない。例としてrunVは、KVM、Xen、およびESXiなどの既存のハイパーバイザを使用することができる。当業者には当然のことながら、OCIランタイム仕様の他のハイパーバイザ・ベースのランタイム実装が、runVの代わりに、またはrunVに加えて使用されてもよい。このほか、OCIランタイム仕様のハイパーバイザ・ベースのランタイム実装の例として、IntelのClear Containers(「cc-runtime」としても周知である)およびVMWareのVSphere Integrated Containers(VIC)が挙げられるが、これらに限定はされない。さらに、runVおよびその他OCIランタイム仕様のハイパーバイザ・ベースのランタイム実装は、CRI-Oなど、ハイパーバイザ・ベースのランタイムを呼び出すCRIランタイム(CRIシム)とともに使用されてもよい。
【0084】
図8に示されている実施形態において、コンテナ・オーケストレーション・システム800は、イングレス・トラフィック・コントローラ814を含む。イングレス・トラフィック・コントローラ814は、管理者816によって設定されてもよい。例として、
図8に示されている実施形態において管理者816は、サービス・アップタイムに影響を与えることなく(通常のcgroupおよび名前空間ベースのコンテナ・ランタイムにもともと向かっていた)イングレス・トラフィックをVMベースのコンテナ・ランタイムに再ルーティングするように、イングレス・トラフィック・コントローラ814を設定してもよい。
【0085】
図8では、イングレス・トラフィック・コントローラ814がコンテナ・オーケストレーション・マネージャ(COM)811と別個に示されているが、コンテナ・オーケストレーション・マネージャ(COM)811およびイングレス・トラフィック・コントローラ814は同じマシン上で実行されてもよい。一部の実施形態において、コンテナ・オーケストレーション・マネージャ(COM)811およびイングレス・トラフィック・コントローラ814は、同じ管理者によって設定されてもよい。
【0086】
Kubernetesにおいて、イングレスは、Kubernetesクラスタ内のサービスに対するKubernetesクラスタ外部からのアクセスを管理するAPIオブジェクトである。アクセスは、どのインバウンド接続がクラスタ内のどのKubernetesサービスに到達するかを定義するルール(「ルーティング・ルール」と呼ばれる)の集合を作成することによって設定できる。トラフィック・ルーティングは、イングレス・リソース上に定義されたルーティング・ルールによって制御される。ルーティング・ルールは、典型的には、一箇所(「イングレス・リソース」と呼ばれる)に統合される。イングレスは、例として、ロード・バランシング、SSLターミネーション、および名前ベースのルーティングなどを提供することができる。イングレスは、クラスタ外部からクラスタ内のサービスへのHTTPおよびHTTPSルートを公開する。
【0087】
図8に示されているイングレス・トラフィック・コントローラ814などのイングレス・コントローラは、イングレスを実行することを担当する。例として、Googleコンピュート・エンジン(GCE)/Google Kubernetesエンジン(GKE)は、マスタ上にイングレス・コントローラを展開する。GCE/GKE以外の環境では、いくつかのイングレス・コントローラのいずれか(例えばNginxイングレス・コントローラ)が展開に利用可能である。
【0088】
図9は、1つ以上の実施形態による、CRIUを使用して複数の実行中コンテナのcgroupおよび名前空間をホストから複数の仮想マシンにライブ・マイグレーションすることにより、コンテナ化されたワークロードの分離をトリガ要因の検出に応答して動的に変更する、説明のための方法900のフロー図である。方法900は、各ブロックの好適な順序を規定する。しかし、当然のことながら、様々なブロックが互いに対して相対的に任意の時点で発生してよい。
【0089】
方法900は、デフォルト・コンテナ・ランタイム(例えばrunC)を使用してワークロードをコンテナ化することにより開始する(ブロック902)。例として、デフォルト・コンテナ・ランタイムは、コンピュート・ノードのホスト・カーネルの、cgroupおよび名前空間を含むリソース制限能力を使用して、cgroupベースの1つ以上のコンテナをコンピュート・ノード上に生成してもよい。デフォルト・コンテナ・ランタイムは、runCまたはその他任意の適切なデフォルト・コンテナ・ランタイムとされてもよい。適切なデフォルト・コンテナ・ランタイムには、Linux(R)cgroupおよび名前空間を使用して分離を提供するOCI互換コンテナ・ランタイムが含まれるが、これに限定はされない。一部の実施形態において、コンピュート・ノード上のrunC(またはその他任意の適切なデフォルト・コンテナ・ランタイム)は、当該コンピュート・ノード上で実行されるコンテナ・ライフサイクル動作に関するコンテナ・オーケストレーション・マネージャ(COM)からの命令をリッスンする当該コンピュート・ノード上のエージェントからのリクエストに応答して、当該コンピュート・ノード上にcgroupベースの1つ以上のコンテナを生成してもよい(すなわち、エージェントは、当該コンピュート・ノード上にコンテナが作成されることの命令をコンテナ・オーケストレーション・マネージャ(COM)から受信するのに応答して、デフォルト・コンテナ・ランタイムにリクエストを送信した)。他の実施形態において、デフォルト・コンテナ・ランタイムは、エージェントとデフォルト・コンテナ・ランタイムとの間に置かれているCRI-OなどのCRIランタイム(CRIシム)を通して間接的にエージェントからリクエストを受信してもよい。
【0090】
方法900は、トリガ要因の検出に進む(ブロック904)。トリガ要因の説明のための例としては、脅威の認識(例えばホスト・カーネルの脆弱性)、コンプライアンス要件の変更(例えば実行中のサービスのコンプライアンス要件が変更される必要がある)、およびその組み合わせが挙げられるが、これらに限定はされない。例として、コンテナ・オーケストレーション・マネージャ(COM)の管理者が、モニタリング・サービスを通してホスト・カーネルの脆弱性を知ることが考えられる。認識されたカーネルの脆弱性に応じて、COMの管理者は、コンテナ化されたワークロードの少なくとも一部の分離を変更するのが賢明であると決定するかもしれない。例として、COMの管理者は、1つ以上の仮想マシンを起動するスタンバイ・コンテナ・ランタイムを始動させてもよく、次にこの仮想マシンに、コンテナ化されたワークロードの少なくとも一部が移行される。一部の実施形態において、COMの管理者は、脆弱性に応じて、完全なワークロードをVMベースのコンテナ・ランタイムに移行することを選択してもよく、またはロード・バランシングを活用することによって通常のcgroupおよび名前空間ベースのコンテナ・ランタイムおよびVMベースのコンテナ・ランタイムにわたりコンテナを水平にスケーリングすることを選択してもよい(後述される任意選択のブロック906)。
【0091】
任意選択で、方法900は、完全マイグレーション・モードまたは部分マイグレーション・モードの選択に進む(ブロック906)。ブロック906は、任意選択性を表すために破線を使用して
図9に示されている。例として、トリガ要因に関連する1つ以上の特性(例えばブロック904において検出されたホスト・カーネルの脆弱性の深刻度)に基づいて、COMの管理者は、完全マイグレーション・モード(すなわちコンテナ化されたワークロードのすべてがVMベースのコンテナ・ランタイムへと移行される)または部分マイグレーション・モード(すなわち、コンテナ化されたワークロードが、ロード・バランシングを活用することによって通常のcgroupおよび名前空間ベースのコンテナ・ランタイムおよびVMベースのコンテナ・ランタイムにわたり水平にスケーリングされる)のいずれかを選択してもよい。
【0092】
次に方法900は、デフォルト・コンテナ・ランタイムによって生成されたcgroupベースの1つ以上のコンテナにおいて実行されているコンテナ化されたワークロードの少なくとも一部を、スタンバイ・コンテナ・ランタイム(例えばrunV)によって起動された1つ以上の仮想マシンに、ブロック904におけるトリガ要因の検出(および任意選択でブロック906におけるマイグレーション・モードの選択)に応答してマイグレーションすることにより継続する(ブロック908)。一部の実施形態において、COMは、トリガ要因の検出に応答して、「分離変更コンテナ・マイグレーション」がコンピュート・ノード上で実行されることの命令を自動的に送信してもよい。
【0093】
他の実施形態において、COMの管理者は、コンテナ化されたワークロードの少なくとも一部の分離をトリガ要因の検出に応答して変更することが賢明であるか否かを決定してもよい。COMの管理者は、コンテナ化されたワークロードの少なくとも一部の分離を変更することが賢明であると決定した場合、「分離変更コンテナ・マイグレーション」がコンピュート・ノード上で実行されることの命令をCOMが送信することを生じさせてもよい。
【0094】
「分離変更コンテナ・マイグレーション」命令は、自動的に送信されたかCOMの管理者の指示で送信されたかを問わず、コンピュート・ノード上の1つ以上の仮想マシンを起動するrunVなどのスタンバイ・コンテナ・ランタイムを始動させ、次に、コンピュート・ノード上で実行されているcgroupベースの1つ以上のコンテナのうちの少なくとも1つの各コンテナのcgroupおよび名前空間の、1つ以上の仮想マシン上の1つ以上のVMランタイムに対するライブ・マイグレーションを始動させる。cgroupおよび名前空間は、例として、ユーザ空間でのチェックポイント/リストア(CRIU)を使用してライブ・マイグレーションされてもよい。1つ以上の実施形態によれば、「分離変更コンテナ・マイグレーション」命令は、任意選択のブロック906において完全マイグレーション・モードが選択されたか、または部分マイグレーション・モードが選択されたかを表すフラグを含んでもよい。
【0095】
スタンバイ・コンテナ・ランタイムは、runVまたはその他任意の適切なスタンバイ・コンテナ・ランタイムとされてもよい。適切なスタンバイ・コンテナ・ランタイムには、OCIランタイム仕様の他のハイパーバイザ・ベースのランタイム実装が含まれるが、これに限定はされない。一部の実施形態において、コンピュート・ノード上のrunV(またはその他任意の適切なスタンバイ・コンテナ・ランタイム)は、当該コンピュート・ノード上で実行されるコンテナ・ライフサイクル動作に関するコンテナ・オーケストレーション・マネージャ(COM)からの命令をリッスンする当該コンピュート・ノード上のエージェントからのリクエストに応答して、当該コンピュート・ノード上に1つ以上の仮想マシンを生成してもよい(すなわち、エージェントは、当該コンピュート・ノード上で「分離変更コンテナ・マイグレーション」が実行されるようコンテナ・オーケストレーション・マネージャ(COM)から命令を受信するのに応答して、スタンバイ・コンテナ・ランタイムにリクエストを送信した)。他の実施形態において、デフォルト・コンテナ・ランタイムは、エージェントとデフォルト・コンテナ・ランタイムとの間に置かれているCRI-OなどのCRIランタイム(CRIシム)を通して間接的にエージェントからリクエストを受信してもよい。
【0096】
上述のように、1つ以上の実施形態によれば、「分離変更コンテナ・マイグレーション」命令は、任意選択のブロック906において完全マイグレーション・モードが選択されたか、または部分マイグレーション・モードが選択されたかを表すフラグを含んでもよい。言い換えれば、通常のcgroupランタイムからVMベースのコンテナ・ランタイムへのワークロードのマイグレーションは、完全(すなわちワークロードの100%がマイグレーションされる)であってもよく、または部分的(すなわちワークロードの<100%がマイグレーションされる)であってもよい。1つ以上の実施形態によれば、このような、認識された脅威(またはコンプライアンス要件の変更)に基づくコンテナ・ランタイムの動的な切り替えは、サービスの中断なしに発生する。
【0097】
一方では、任意選択のブロック906において完全マイグレーション・モードが選択されたことを命令のフラグの値が表す場合、「分離変更コンテナ・マイグレーション」命令は、コンピュート・ノード上の1つ以上の仮想マシンを起動するスタンバイ・コンテナ・ランタイムを始動させ、次に、コンピュート・ノード上で実行されているcgroupベースの1つ以上のコンテナの各コンテナのcgroupおよび名前空間の、1つ以上の仮想マシン上の1つ以上のVMランタイムに対するライブ・マイグレーションを始動させる。
【0098】
他方、任意選択のブロック906において部分マイグレーション・モードが選択されたことを命令のフラグの値が表す場合、「分離変更コンテナ・マイグレーション」命令は、コンピュート・ノード上の1つ以上の仮想マシンを起動するスタンバイ・コンテナ・ランタイムを始動させ、次に、コンピュート・ノード上で実行されているcgroupベースの1つ以上のコンテナのサブセットの各コンテナのcgroupおよび名前空間の、1つ以上の仮想マシン上の1つ以上のVMランタイムに対するライブ・マイグレーションを始動させる。部分マイグレーションは、例として、通常のcgroupランタイムおよびVMランタイムにわたりコンテナを水平にスケーリングすることにより促進されてもよい。
【0099】
次に方法900は、マイグレーションされたコンテナ化されたワークロードのイングレス・トラフィックを1つ以上のVMランタイムに再ルーティングすることにより継続する(ブロック910)。例としてイングレス・トラフィック・コントローラは、サービス・アップタイムに影響を与えることなく、(マイグレーションされた通常のcgroupおよび名前空間ベースのコンテナ・ランタイムにもともと向かっていた)イングレス・トラフィックをVMベースのコンテナ・ランタイムに再ルーティングするように設定されてもよい。通常のcgroupおよび名前空間ベースのコンテナ・ランタイムからVMベースのコンテナ・ランタイムへのワークロードのマイグレーションが完全であった(すなわちワークロードの100%がマイグレーションされた)1つ以上の実施形態において、イングレス・トラフィック・コントローラは、すべてのイングレス・トラフィックをVMベースのコンテナ・ランタイムに再ルーティングしてもよい。通常のcgroupおよび名前空間ベースのコンテナ・ランタイムからVMベースのコンテナ・ランタイムへのワークロードのマイグレーションが部分的であった(すなわちワークロードの<100%がマイグレーションされた)1つ以上の実施形態において、イングレス・トラフィック・コントローラは、マイグレーションされた通常のcgroupランタイムにもともと向かっていたイングレス・トラフィックのみをVMベースのコンテナ・ランタイムに再ルーティングしてもよい。
【0100】
さらに、1つ以上の実施形態によれば、ブロック910の、マイグレーションされたコンテナ化されたワークロードに対するイングレス・トラフィックの再ルーティングは、サービス・メッシュを介したトラフィック・シェーピングを使用してもよい。サービス・メッシュを介したトラフィック・シェーピングを用いるコンテナ・オーケストレーション・システムの一例が、後述の
図10に示されている。
【0101】
図10は、1つ以上の実施形態による、
図8のコンテナ・オーケストレーション・システム800に相当するがサービス・メッシュを介したトラフィック・シェーピングをさらに用いる、コンテナ・オーケストレーション・システム1000を示す。コンテナがランタイムを切り替える(すなわちコンテナが通常のcgroupおよび名前空間ベースのコンテナ・ランタイムからVMベースのコンテナ・ランタイムに切り替わる)と、コンテナ・ランタイムに関連する決定を確実に下せるようにするために、1つ以上のサービス・メッシュ・サイドカー1009(「サイドカー・コンテナ」とも呼ばれる)から、コンテナに関するランタイム・メタデータ(すなわちランタイム変更イベントを含むがこれに限定されない)が「中央コントローラ」(例えばサービス・メッシュ・コントローラ1002)に送信される。
図10に示されている実施形態において、各ポッド807(通常のcgroupおよび名前空間ベースのコンテナ・ランタイムを備える)は、サイドカー・コンテナ1007を含み、各ポッド809(VMベースのコンテナ・ランタイムを備える)は、サイドカー・コンテナ1009を含む(
図10では、サイドカー・コンテナをポッド内の他のコンテナから区別するために、各ポッド内のサイドカー・コンテナに陰影が付されている)。1つ以上の実施形態によれば、サービス・メッシュ・コントローラ1002は、サービス・メッシュ・サイドカー1009からサービス・メッシュ・コントローラ1002が受信するランタイム・メタデータに基づいて、ルーティング・ルールの更新をイングレス・トラフィック・コントローラ814に送信してもよい。
【0102】
サービス・メッシュの作成には、2つの論理コンポーネントが必要である。サービス・メッシュの作成に必要な第1の論理コンポーネントは、ポッドである。ポッドは、多数のコンテナを有するように設計される。サービス・メッシュの作成に必要な第2の論理コンポーネントは、「サイドカー」と呼ばれるコンテナである(例えばコンテナ・サイドカー1009)。サービス・メッシュでは、各ポッドは1つ以上のサイドカー・コンテナを含む。サイドカーは、ポッド内のプライマリ・コンテナを拡張し、強化する。例としてサイドカー・コンテナは、プライマリ・コンテナ上のものをモニタリングし、モニタリング動作から生じるデータに対して1つ以上のタスクを実行し、それによってプライマリ・コンテナの当該の責任を軽減してもよい。サービス・メッシュでは、サイドカーはサービス・プロキシまたはデータ・プレーンであってもよい。
【0103】
Kubernetes上のサービス・メッシュは、Istioおよび(Buoyantにより作成された)Linkerdなどのサービス・メッシュ・ソリューションを使用して作成されてもよい。そのようなサービス・メッシュ・ソリューションでは、サービス・メッシュにおける「中央コントローラ」(例えばサービス・メッシュ・コントローラ1002)が、各サイドカー・コンテナがどのように作動するかを定義する(サイドカー・プロキシを除く)。
【0104】
1つ以上の実施形態によれば、種々のランタイムの優先順位レベルを設定することによって、様々なトラフィック・シェーピング・ポリシーがサービス・メッシュに追加されてもよい。例として、1つ以上の実施形態においてサービス・メッシュ・コントローラ1002は、通常のcgroupおよび名前空間ベースのコンテナ・ランタイム(例えばrunC)またはVMベースのコンテナ・ランタイム(例えばrunV)からランタイム・メタデータが受信されているかどうかに基づいて、サービス・メッシュ・ルーティング・ポリシーの変更を引き起こしてもよい。
【0105】
1つ以上の実施形態によれば、サービス・メッシュにおける「中央コントローラ」(例えばサービス・メッシュ・コントローラ1002)は、新たなコンテナ・ランタイムから現在フェッチされている新たなメトリクス(すなわちランタイム・メタデータ)に基づいて、トラフィックをシェーピングする。これは、コンテナ・ランタイム・エンジンに応じてサービス・メッシュのメトリクス・プロバイダがランタイムで切り替えられるのと同じように、動的に起こってもよい。例として、
図10に示されている実施形態において、サービス・メッシュのメトリクス・プロバイダは、サイドカー・コンテナ1007(通常のcgroupおよび名前空間ベースのコンテナ・ランタイムを備える)からサイドカー・コンテナ1009(VMベースのコンテナ・ランタイムを備える)にランタイムで切り替えられる。したがって、サービス・メッシュにおける「中央コントローラ」(例えばサービス・メッシュ・コントローラ1002)は、この変更を透過的に処理するメトリクス・アダプタ1010を備えてもよい。
【0106】
1つ以上の実施形態によれば、VMベースのコンテナ・ランタイムが過負荷になりつつあることを示す新たなメトリクス(すなわちランタイム・メタデータ)に応答して、サービス・メッシュ・コントローラ1002は、イングレス・トラフィックの一定の割合が別のノードに再ルーティングされる(すなわちVMベースのコンテナ・ランタイムに再ルーティングされない)サービス・メッシュ・ルーティング・ポリシーを生成してもよい。
【0107】
図10において、1つ以上の実施形態によれば、CRIU820は、ブロックのサブセットに対して任意選択(すなわちCRIU820として
図10に示されているブロックのうち少なくとも1つであるがすべてではない)とされることができる。CRIUを用いない場合、コンテナ・ランタイムの切り替えは、スタンバイ・コンテナ・ランタイムによって生成されたVM(例えばVM810)においてワークロードを開始して、イングレス・トラフィック・コントローラ(例えばイングレス・トラフィック・コントローラ814)のルールに適切な修正を加えてすべてのトラフィックをVMにルーティングすることによって実現できる(
図10ではcgroupおよび名前空間ベースのコンテナ・ランタイムに0%のトラフィック、VMベースのコンテナ・ランタイムに100%のトラフィックとして示されている)。
【0108】
本発明は、システム、方法、もしくはコンピュータ・プログラム製品、またはそのいずれかの組み合わせとされ得る。コンピュータ・プログラム製品は、プロセッサに本発明の各側面を実行させるコンピュータ可読プログラム命令を有する1つまたは複数のコンピュータ可読ストレージ媒体を含んでもよい。
【0109】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持および記憶することができる有形のデバイスとすることができる。コンピュータ可読ストレージ媒体は、例として、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または前述のものの任意の適切な組み合わせとされ得るが、これらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の網羅的でないリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM(erasable programmable read-only memory)またはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フレキシブル・ディスク、パンチ・カードまたは命令が記録された溝の中の隆起構造などの機械的にエンコードされたデバイス、および前述のものの任意の適切な組み合わせを含む。本願明細書で使用されるとき、コンピュータ可読ストレージ媒体は、電波もしくはその他自由に伝搬する電磁波、導波路もしくはその他伝送媒体を伝搬する電磁波(例えば光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通して伝送される電気信号など、本質的に一時的信号であるとは解釈されないものとする。
【0110】
本願明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から個々のコンピューティング/処理デバイスに、または例としてインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそのいずれかの組み合わせなどのネットワークを介して外部コンピュータもしくは外部ストレージ・デバイスに、ダウンロード可能である。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはそのいずれかの組み合わせを含んでもよい。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を個々のコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体での記憶のために転送する。
【0111】
本発明の動作を実行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行されても、部分的にユーザのコンピュータ上で実行されても、スタンドアロン・ソフトウェア・パッケージとして実行されても、部分的にユーザのコンピュータ上で且つ部分的にリモート・コンピュータ上で実行されても、または完全にリモート・コンピュータもしくはサーバ上で実行されてもよい。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通してリモート・コンピュータがユーザのコンピュータに接続されてもよく、または(例としてインターネット・サービス・プロバイダを使用しインターネットを通して)外部コンピュータに接続されてもよい。1つ以上の実施形態において、本発明の各側面を実行するために、例としてプログラマブル論理回路構成、フィールド・プログラマブル・ゲート・アレイ(FPGA:field-programmable gate array)、またはプログラマブル論理アレイ(PLA:programmable logic array)を含む電子回路構成が、電子回路構成をパーソナライズするためコンピュータ可読プログラム命令の状態情報を利用することによりコンピュータ可読プログラム命令を実行してもよい。
【0112】
本発明の各側面は、1つ以上の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本願明細書に記載されている。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータ可読プログラム命令により実装可能である。
【0113】
マシンをもたらすよう、こうしたコンピュータ可読プログラム命令が、汎用コンピュータ、専用コンピュータ、またはその他プログラマブル・データ処理装置のプロセッサに提供されて、この命令が、コンピュータまたはその他プログラマブル・データ処理装置のプロセッサにより実行されて、フローチャートもしくはブロック図またはその両方の1つもしくは複数のブロックにおいて指定された機能/動作を実装する手段を作り出すようにすることもできる。特定の形で機能するようコンピュータ、プログラマブル・データ処理装置、もしくはその他デバイス、またはそのいずれかの組み合わせに指示することができる当該コンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体に記憶されて、命令を記憶されたコンピュータ可読ストレージ媒体が、フローチャートもしくはブロック図またはその両方の1つもしくは複数のブロックにおいて指定された機能/動作の各側面を実装する命令を含む製品を含むようにすることもできる。
【0114】
コンピュータ可読プログラム命令はさらに、コンピュータ、その他プログラマブル・データ処理装置、またはその他デバイスにロードされて、コンピュータ、その他プログラマブル装置、またはその他デバイス上で一連の動作ステップが実行されるようにしてコンピュータで実装されるプロセスをもたらし、コンピュータ、その他プログラマブル装置、またはその他デバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の1つもしくは複数のブロックにおいて指定された機能/動作を実装するようにすることもできる。
【0115】
各図面のフローチャートおよびブロック図は、様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能性、および動作を示す。この関連で、フローチャートまたはブロック図の中の各ブロックは、指定の論理機能(単数または複数)を実装する1つ以上の実行可能命令を含むモジュール、セグメント、または命令の一部を表現し得る。一部の代わりの実装では、ブロックに示されている機能が、図面に示されているのとは異なる順序で発生してもよい。例として、関連する機能性次第で、連続して示されている2つのブロックが実際には事実上同時に実行されてもよく、または各ブロックが逆順で実行されることがあってもよい。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方の複数ブロックの組み合わせは、指定の機能もしくは動作を実行する、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する、専用ハードウェア・ベースのシステムにより実装できるということに留意されたい。
【0116】
当業者には当然のことながら、本発明の範囲内で多数の変形物が考えられる。例として、本願明細書に記載された特定のハードウェアおよびソフトウェア実装の詳細(つまりLinux(R)カーネルを使用する)は、単に説明を目的としており、記載された主題の範囲を限定することは意図していない。よって、本発明について、その好適な実施形態を参照して詳しく示し記載したが、当業者には当然のことながら、それに対して、形態および細部における変更が、本発明の範囲から逸脱することなく加えられ得る。