本発明の1つまたは複数の実施形態は、Kubernetesのリモートポッドにおける新しいコンテナストレージシステムを提供するために配置及び構成されたコンピュータ実装方法、コンピュータシステム、及びコンピュータプログラム製品を提供する。本発明の1つまたは複数の実施形態は、ポッド仮想マシンが論理的にワーカーノード仮想マシンに属するが、ポッド仮想マシンはワーカー仮想マシンから遠隔の仮想マシン内で物理的に実行される、新しいワーカー及びポッド階層を導入する。したがって、ポッド仮想マシンは、それ自身の仮想マシンにあることによって、より良い分離とより良い性能の両方を有する。さらに、1つまたは複数の実施形態は、コンテナストレージインターフェース(CSI)コントローラプラグイン及びCSIノードプラグインと共に利用することができるCSIポッドプラグインを追加することによって、新しいコンテナストレージシステムを提供する。1つまたは複数の実施形態によれば、例えば、ファイルストレージもしくはブロックストレージまたはその組み合わせのような永続ボリュームをリモートポッド仮想マシンにアタッチし、新しいCSIポッドプラグインを使用してリモートポッド内のコンテナにマウントすることが可能である。
一般的なKubernetesクラスタでは、ワーカーノードのプロセスであるコンテナとして、ワークロード(ソフトウェアアプリケーションなど)がポッド内で動作する。オープンソースでOCI(Open Container Initiative)に準拠するKata Containersは、仮想マシンをポッドとして導入し、クラウドネイティブアプリケーションのワーカーノード内/上のゲスト仮想マシン内でワークロードが実行されるようになっている。しかし、ワーカーノードの仮想マシン上でゲスト仮想マシンとして動作するKataポッドは、パフォーマンス上の問題を引き起こす。特に、第2レベルの仮想マシンやネストされた仮想マシンは、通常、中央処理装置(CPU)やメモリの使用率/効率が5~10%低下し、入出力操作毎秒(IOPS)などの入出力(I/O)ではさらに悪化する。最悪の場合、I/Oのダウングレードは約30%になる。
1つまたは複数の実施形態は、ポッド仮想マシンをピア仮想マシンとして(物理的に)実行させながら、論理的にはワーカーノード仮想マシンに所属させることができる新しいシステムを提供するものである。このようにして、システムは、Kubernetesの機能と一致し、Kataにおけるネストされた仮想マシンの性能損失/問題を回避する。技術的な利益及び利点は、1つまたは複数の実施形態によれば、ワーカーノードは管理されたリモートポッド仮想マシンに直接アクセスできないため、ワーカーノード仮想マシンとリモートポッド仮想マシンとの間のより良い分離を提供する。技術的な利益及び利点は、CPU、メモリ、及びディスクの使用/性能の点で、リモートポッド仮想マシンのより良い性能を含む。さらに、1つまたは複数の実施形態は、リモートポッド仮想マシンがワーカーノード仮想マシンのリソースによって制限されず、任意のホストマシンにデプロイされることができるので、より良い拡張性を証明する。
さらに、典型的には、CSIは、最初にワーカーノードに永続ボリュームをアタッチし、次にワーカーノード内に含まれるポッドにボリュームをマウントするため、CSIドライバは、リモートポッドシステムでは動作しない。しかしながら、リモートポッド仮想マシンは、1つまたは複数の実施形態による、ワーカーノード仮想マシンとは別の仮想マシンで実行されており、それによって、ワーカーノード仮想マシン内に含まれていない。したがって、リモートポッド仮想マシンがワーカーノード仮想マシンに含まれていないときに、リモートポッド仮想マシン内の新しいCSIポッドプラグインコンポーネントを使用して、永続ボリュームをアタッチおよびマウントする、新しいコンテナストレージシステムが提供される。1つまたは複数の実施形態は、リモートポッド仮想マシンへの永続ボリュームのアタッチを支援する技術とともに、ボリュームのアタッチを記述するための拡張ボリュームアタッチメント(VolumeAttachment)オブジェクトを開示する。
図1において、本発明の1つまたは複数の実施形態による、コンピュータシステム100が概ね示されている。コンピュータシステム100は、本明細書で説明するように、様々な通信技術を利用するコンピューティングデバイス及びネットワークの任意の数及び組合せを含む、もしくは使用する、またはその両方をする、電子、コンピュータフレームワークとすることができる。コンピュータシステム100は、容易にスケール変更が可能で、拡張可能で、モジュール式であってもよく、異なるサービスに変更する能力があってもよく、他の機能とは独立していくつかの機能を再構成したりすることができる。コンピュータシステム100は、例えば、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、又はスマートフォンであり得る。いくつかの例では、コンピュータシステム100は、クラウドコンピューティングノードであり得る。コンピュータシステム100は、プログラムモジュールなどのコンピュータシステム実行可能命令がコンピュータシステムによって実行されるという一般的な文脈で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含むことができる。コンピュータシステム100は、通信ネットワークを介してリンクされるリモート処理装置によってタスクが実行される分散型クラウドコンピューティング環境において実施することができる。分散型クラウドコンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカル及びリモートコンピュータシステム記憶媒体の両方に配置することができる。
図1に示すように、コンピュータシステム100は、1つまたは複数の中央処理装置(CPU)101a、101b、101cなど(総称または一般的にプロセッサ101と呼ぶ)を有する。プロセッサ101は、シングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ、または任意の数の他の構成とすることができる。プロセッサ101は処理回路とも呼ばれ、システムバス102を介して、システムメモリ103および他の様々なコンポーネントに結合される。システムメモリ103は、リードオンリーメモリ(ROM)104とランダムアクセスメモリ(RAM)105を含むことができる。ROM104は、システムバス102に結合され、コンピュータシステム100の特定の基本機能を制御する基本入出力システム(BIOS)またはUEFI(Unified Extensible Firmware Interface)のようなその後継者を含むことができる。RAMは、プロセッサ101が使用するためにシステムバス102に結合された読み書き可能なメモリである。システムメモリ103は、動作中に前記命令の動作のための一時的なメモリ空間を提供する。システムメモリ103は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ、フラッシュメモリ、または他の任意の適切なメモリシステムを含むことができる。
コンピュータシステム100は、システムバス102に結合された入出力(I/O)アダプタ106および通信アダプタ107から構成される。I/Oアダプタ106は、ハードディスク108もしくは任意の他の同様のコンポーネントまたはその組み合わせと通信する小型コンピュータシステムインタフェース(SCSI)アダプタとすることができる。I/Oアダプタ106およびハードディスク108は、本明細書では集合的に、マスストレージ110と呼ばれる。
コンピュータシステム100上で実行するためのソフトウェア111は、マスストレージ110に格納され得る。マスストレージ110は、プロセッサ101によって読み取り可能な有形記憶媒体の一例であり、ソフトウェア111は、様々な図に関して以下で説明するように、コンピュータシステム100を動作させるために、プロセッサ101によって実行するための命令として格納される。コンピュータプログラム製品の例およびそのような命令の実行は、本明細書においてより詳細に説明される。通信アダプタ107は、システムバス102を、外部ネットワークであり得るネットワーク112と相互接続し、コンピュータシステム100が他のそのようなシステムと通信することを可能にする。一実施形態では、システムメモリ103の一部とマスストレージ110は、まとめてオペレーティングシステムを格納し、これは、図1に示す様々な構成要素の機能を調整するための任意の適切なオペレーティングシステムとすることができる。
追加の入出力デバイスは、ディスプレイアダプタ115およびインタフェースアダプタ116を介してシステムバス102に接続されるように示されている。一実施形態では、アダプタ106、107、115、116は、中間バスブリッジ(図示せず)を介してシステムバス102に接続される1つまたは複数のI/Oバスに接続され得る。ディスプレイ119(例えば、スクリーンまたはディスプレイモニタ)は、ディスプレイアダプタ115によってシステムバス102に接続され、これは、グラフィックス集約型アプリケーションの性能を向上させるためのグラフィックスコントローラおよびビデオコントローラを含むことができる。キーボード121、マウス122、スピーカー123などは、インタフェースアダプタ116を介してシステムバス102に相互接続することができ、これは、例えば、複数のデバイスアダプタを単一の集積回路に統合したスーパーI/Oチップを含むことができる。ハードディスクコントローラ、ネットワークアダプタ、及びグラフィックスアダプタなどの周辺装置を接続するための適切なI/Oバスは、典型的には、PCI(Peripheral Component Interconnect)及びPCIe(Peripheral Component Interconnect Express)などの共通のプロトコルを含む。したがって、図1に構成されるように、コンピュータシステム100は、プロセッサ101の形態の処理能力、および、システムメモリ103およびマスストレージ110を含むストレージ能力、キーボード121およびマウス122などの入力手段、および、スピーカー123およびディスプレイ119を含む出力能力を含んでいる。
いくつかの実施形態では、通信アダプタ107は、特に、インターネットスモールコンピュータシステムインタフェースなどの任意の適切なインタフェース又はプロトコルを用いてデータを伝送することができる。ネットワーク112は、特に、セルラーネットワーク、無線ネットワーク、ワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、又はインターネットとすることができる。外部のコンピューティングデバイスは、ネットワーク112を介してコンピュータシステム100に接続することができる。 いくつかの例では、外部コンピューティングデバイスは、外部ウェブサーバまたはクラウドコンピューティングノードであり得る。
図1のブロック図は、コンピュータシステム100が図1に示される構成要素の全てを含むことを示すことを意図していないことを理解されたい。むしろ、コンピュータシステム100は、図1に図示されていない任意の適切な少数または追加の構成要素(例えば、追加のメモリ構成要素、組み込みコントローラ、モジュール、追加のネットワークインタフェースなど)を含むことができる。さらに、コンピュータシステム100に関して本明細書に記載された実施形態は、任意の適切なロジックで実装することができ、本明細書に言及されるロジックは、様々な実施形態において、任意の適切なハードウェア(例えば、プロセッサ、組み込みコントローラ、または特定用途向け集積回路)、ソフトウェア(例えば、アプリケーション)、ファームウェア、またはハードウェア、ソフトウェア、およびファームウェアの任意の適切な組合せを含むことが可能である。
図2は、本発明の1つまたは複数の実施形態による、Kubernetesにおけるリモートポッドを提供し使用するためのシステム200のブロック図である。システム200は、コンピュータシステム251、252、253、254に結合されたコンピュータシステム202を含む。コンピュータシステム202は、制御ノード、マスターノード、Kubernetesデプロイメントコントローラなどと呼ばれることがある。コンピュータシステム202は、コントロールプレーンの一部であってもよい。コンピュータシステム251、252、253、254はそれぞれ、クラスタ内のサーバとすることができる。説明のために、コンピュータシステム251、252、253、254はそれぞれ、クラスタ内の1つまたは複数のワーカーノードをホストすることができ、一般にコンピュータシステム251~254と呼ぶことができる。コンピュータシステム251~254は、本明細書でさらに議論するように、ノードのための、および仮想マシンを実行するためのホストまたはホストマシンとすることができる。コンピュータシステム202及びコンピュータシステム251~254は、1つまたは複数の実施形態に従って実行するために、図1で議論されたコンピュータシステム100の任意の要素及び機能を含むことができる。
Kubernetesは、マスターノードとも呼ばれるコントロールプレーン/パネルを最上位に有する。コントロールプレーン(例えば、コンピュータシステム202)がアプリケーションであるワークロードを受信した後、APIサーバ204は、アプリケーションをAPIオブジェクトとして「etcd」に保存する。Kubernetesでは、コントローラマネージャは、制御サイクルによるオーケストレーションを担当する。この制御サイクルは、オーケストレーションを行うために使用され、これらのアプリケーションが必要とするポッドの作成を支援する。ポッドが出現すると、スケジューラは新しいポッドの変化を監視する。スケジューラは新しいポッドを見つけると、スケジューリング・アルゴリズムの実行を支援し、実行結果(例えば、ポッドオブジェクトのノードネーム(NodeName)フィールドにノードの名前、いわゆるバインド操作)を書き込む。そして、スケジューラの作業プロセスであるetcdにバインド結果を書き戻す。その結果、ポッドはノードにバインドされ、これをスケジューリングと呼ぶ。例えば、ポッドがワーカーノードにバインドされている場合である。
kubelet(例えば、図3のkubelet312)は、すべてのポッドオブジェクトの変化を監視/モニターし、ポッドがノードにバインドされていることを発見すると、kubeletは、その後のすべてのタスクを実行する。kubeletは、この情報を取得した後、各マシン上で動作するcontainerdプロセスを呼び出し、このポッド内の全てのコンテナを動作させる。このとき、containerd(例えば、図3のCRI314)は、他のランタイム(例えば、runc、shimなど)を呼び出すことができる。したがって、ランタイムは、これらのネームスペースおよびcgroupの設定に役立ち、アプリケーションによって必要とされるコンテナの構築に役立つことができる。
図3は、本発明の1つまたは複数の実施形態による、Kubernetesにおけるリモートポッドを提供し使用するためのシステム200内のノード及びポッド階層のブロック図である。図3は、ワーカーノード仮想マシン310、ポッド仮想マシン301、ポッド仮想マシン302、及びポッド仮想マシン303を示している。ワーカーノード仮想マシン310は、ポッド仮想マシン301、302、303と同じ、もしくは異なるまたはその組み合わせのホストマシン上で、任意の組み合わせで実行することができ、ここで、ポッド仮想マシン301、302、303は同じ、もしくは異なるまたはその組み合わせのホストマシン上にあり得る。例えば、ワーカーノード仮想マシン310とポッド仮想マシン301は、例えばコンピュータシステム251のような同じホストマシン上で実行されることができる。また、ワーカーノード仮想マシン310とポッド仮想マシン301は、例えば、コンピュータシステム251及び252のような2つの異なるホストマシン上でそれぞれ実行することが可能である。同様に、ワーカーノード仮想マシン310とポッド仮想マシン302は、同じホストマシン上(例えば、両方ともコンピュータシステム251上)もしくは異なるホストマシン上(例えば、コンピュータシステム251と253上にそれぞれ1つ)またはその組み合わせで実行することができる。同じように、ワーカーノード仮想マシン310とポッド仮想マシン303は、同じホストマシン上(例えば、両方ともコンピュータシステム251上)もしくは異なるホストマシン上(例えば、コンピュータシステム251と254上にそれぞれ1つ)またはその組み合わせで実行することが可能である。各ポッド仮想マシン301、302、303がワーカーノード仮想マシン310にバインドされ得るとしても、ポッド仮想マシン301、302、303の各々は、ワーカーノード仮想マシン310を実行しているホストマシンとは異なる可能性のある、それ自身のホストマシン上で実行され得ることが理解されるべきである。説明のために3つのポッドを論じたが、実施形態が3つのポッドに限定されることを意図していないことを理解されたい。さらに、コンピュータシステム251~254などの各ホストマシンは、独自のハイパーバイザを実行する独自のホストオペレーティングシステムを有する。ポッド仮想マシン301、302、303がワーカーノード仮想マシン310とは異なるホストマシンもしくは異なるコンピュータシステムまたはその組み合わせで実行されている場合、それぞれ異なるホストマシンもしくはコンピュータシステムまたはその組み合わせのハイパーバイザは、同じ論理ネットワーク内にある必要がある。
コントロールプレーンは、kubelet312と通信するように構成された1つまたは複数のアプリケーションプログラミングインターフェース(API)サーバ204を有する。APIサーバ204(api‐serverまたはapiserverとも呼ばれる)は、Kubernetesがカスタム開発の必要なしで、データからデータAPIを作成し公開することを可能にする軽量なウェブアプリケーションである。kubeletは、各ワーカーのノード上で実行される主要な「ノードエージェント」である。kubeletは、ホスト名、ホスト名を上書きするフラグ、もしくはクラウドプロバイダー用の特定のロジックまたはその組み合わせのいずれか1つまたは複数を使用してapiserverにノードを登録することができる。kubeletは、PodSpecなどのポッドディスクリプタを使用し、動作する。PodSpecは、ポッドを記述するYAMLまたはJSONオブジェクトである。Kubernetesのリソースは宣言的な方法で作成されるため、例えばYAMLファイルなどを利用する。ポッド、サービス、およびデプロイメントなどのKubernetesのリソースは、当業者であれば理解できるように、YAMLファイルを使用して作成することができる。kubeletは、様々なメカニズムを通じて(主にAPIサーバを通じて)提供されるPodSpecsのセットを受け取り、それらのPodSpecsに記述されたコンテナが実行されており、健全であることを確かにする。
図3において、ワーカーノード仮想マシン310は、コンテナランタイムインターフェース(CRI)314を使用して1つまたは複数のシム320_1、320_2、320_3を作成するように構成されたkubelet312を有する。シム320_1、320_2、320_3は、一般にシム320と呼ぶことができる。各シム320_1、320_2、320_3は、それぞれ自身のポッド仮想マシン301、302、303と一対一の関係を有する。各個別のシム320_1、320_2、320_3は、ポッド仮想マシン301、302、303がワーカーノード仮想マシン310にネストされない、もしくはワーカーノード仮想マシン310のゲスト仮想マシンまたはその両方であるように、それぞれ独自のポッド仮想マシン301、302、303を作成するよう構成される。コンテナネットワークインターフェース(CNI)316は、ポッド仮想マシン301、302、303内のIPネットワークシステムをワーカーノード仮想マシン310内のIPネットワークシステムによって管理させるように構成される。CRI314、CNI316、及びシム320_1、320_2、320_3は、それぞれ、プロセッサ101などのプロセッサ上で実行可能なコンピュータ実行可能命令を有するソフトウェアの一部である。
CRI314は、CRIcontainerd、containerd、containerdCRIなどと呼ばれることもある。CRI314は、スタック内の他のランタイムのためのAPIフェースプレートと考えることができる高レベルのランタイムおよびデーモンである。runcなどの下位ランタイムが実際にコンテナを実行するプロセスを処理する一方で、containerdなどの上位ランタイムは、コンテナのライフサイクル、イメージ管理、下位ランタイムへの抽象化などを処理する。下位ランタイムがコンテナ構築のための仕組みを提供するのに対し、containerdはコンテナプラットフォーム構築のための仕組みを持ち、監視や委任を行うために、リモートアプリケーションによって使用されるAPIを備えている。CRIには、コンテナランタイムがノード上のkubeletと統合するためのAPI、仕様/要件およびライブラリが含まれる。CNI316は、クラスタ上のネットワークリソースを管理するためのランタイムもしくは仕様またはその組み合わせである。CNIはサポートされる多数のプラグインと共に、コンテナ内のネットワークインタフェースを設定するためのプラグインを記述するための仕様とライブラリから構成されている。CNIは、コンテナのネットワーク接続と、コンテナの削除時に割り当てられたリソースを取り除くことに重点を置いている。この点に着目しているため、CNIはサポート範囲が広く、実装が簡単な仕様になっている。Kubernetesのコンポーネントが他のコンポーネントと通信できない場合、そのコンポーネントと、関連するKubernetesのインタフェースとの間でトランスレートするように構成されたソフトウェアがシム320である。例えば、シム320は、CRIコマンドを受け取り、エージェント420(図4に示す)が理解するものにトランスレートし、その逆もまた然りである。さらに、コンテナランタイムシムは、コンテナマネージャ(containerd、cri-o、podman)とコンテナランタイム(runc、crun)との間に存在するソフトウェアの一部であり、これらの対応するものの統合問題を解決している。
さらなる詳細を提供するために、図4は、本発明の1つまたは複数の実施形態による、Kubernetesにおいて仮想マシンとしてリモートポッドを提供し使用するためのシステム200における例示的なアーキテクチャのブロック図である。簡潔さのために、コントロールプレーンのコンピュータシステム202は、図4では省略されているが、存在することが理解される。図4は、ワーカーノード仮想マシン310から遠隔のポッド仮想マシン301の提供、作成、もしくはセットアップまたはその組み合わせをするために、ワーカーノード仮想マシン310でシム320_1を使用する例を示す。ポッド仮想マシン301は、ワーカーノード仮想マシン310を実行するホストマシンから遠隔の別のホストマシン上でホストされ得る。ポッド仮想マシン301は、ワーカーノード仮想マシン310と同じホストマシン上でホストされ得るが、依然として別個の又は遠隔の仮想マシンにある。実施例は、ポッド仮想マシン301をセットアップするためにワーカーノード仮想マシン310内のシム320_1を使用することを論じるかもしれないが、説明は、ポッド仮想マシン302をセットアップするためのシム320_2及びポッド仮想マシン303をセットアップするためのシム320_3に類推して適用することを理解されたい。
図5は、本発明の1つまたは複数の実施形態による、Kubernetesのための仮想マシンとしてリモートポッドを提供し使用するための、コンピュータ実装プロセス500のフローチャートである。図5のコンピュータ実装プロセス500は、システム200を使用して実装することができる。したがって、コンピュータ実装プロセス500は、次に、システム200を参照して説明される。
ブロック502において、ワーカーノード仮想マシン310は、ホストマシン上のクラスタに新しいポッドを作成するためのポッドディスクリプションまたはポッドディスクリプタを受信するように構成されている。例えばkubelet312は、コンピュータシステム202からポッドディスクリプションを受信するように構成される。ポッドディスクリプションは、ポッド仕様(例えば、PodSpecs)を含み、YAMLファイルまたはJSONファイル内にあることができる。各Kubernetesのデプロイメントは、いわゆるポッドテンプレートを使用する。このポッドテンプレートは、当業者が理解するように、ポッドがどのように見えるべきか、どのアプリケーションがポッドのコンテナの内部で実行されるかなどを決定する仕様を提供する。スケジューラの支援により、コンピュータシステム202のコントローラマネージャは、ワーカーノード仮想マシン310にポッドを整合させるか、または割り当てることができる。
ブロック504において、ワーカーノード仮想マシン310は、kubelet312を使用して、ポッドをモニターし、ランタイムソフトウェア(コンピュータ実行可能な命令を有する)においてサンドボックス機能(環境として)を呼び出すように構成される。1つまたは複数の実施形態において、シム320_1は、以下でさらに議論されるように、シム320_1が開始された後、コンピューティング環境としてサンドボックス機能を呼び出すことができる。サンドボックス460またはポッドサンドボックスは、ワーカーノード仮想マシン上の分離されたコンピューティング環境である。例えば、kubelet312は、ポッドの実行を開始するために、CRI314のサンドボックス機能(例えば、run pod sandbox)を呼び出すように構成される。サンドボックスは、実行中のプログラムを分離するためのセキュリティ機構であり、通常、システム障害もしくはソフトウェアの脆弱性またはその両方が広がるのを緩和するために励んでいる。サンドボックスは、ホストマシンまたはオペレーティングシステムに危害を加えるリスクなしにプログラムまたはコードを実行するために、しばしば使用される。kubelet312もしくはCRI314またはその両方は、CNI316を呼び出すことができる。
ブロック506において、ワーカーノード仮想マシン310は、上記でまだ作成されていない場合、新しいポッドの準備のために新しいシム320_1を開始もしくは作成またはその両方をするよう構成される。例えば、CRI314は、新しいポッドのためのリモート仮想マシンの作成のために、シム320_1を呼び出すことができる。シム320_1は、シム320_1もしくはシェルポッドまたはその両方がワーカーノード仮想マシン310に対する実際のポッド仮想マシンであるように見えるように、ポッドサンドボックス(環境)内にシェルポッド464を作成/開始するよう構成される。シェルポッド464は、作成されるポッド仮想マシンのプレースホルダとして使用される不完全なポッドとしてよい。より詳細には、シム320_1がポッドの代表となるように、ワーカーノード仮想マシン310は、シェルポッド464を有するポッドサンドボックス460を管理/実行するシム320_1と相互作用する。ワーカーノード仮想マシン310は、シェルポッド464を有するポッドサンドボックス460を管理/実行するシム320_1を、シェルポッド464であることから、実際のポッド仮想マシンとして見なす、もしくは認識またはその両方をする。シェルポッド464は、他のポッドと同様に起動されるが、セットアップを完了する前に一時停止される。
ブロック508において、ワーカーノード仮想マシン310は、シム320_1を使用して、(ポッド)仮想マシンサービス432を呼び出し、仮想マシンサービス432にポッド仮想マシン301を作成/インスタンス化させるように構成される。シム320_1は、仮想マシンサービス432と通信し、ホストマシン上にポッド仮想マシン301を作成することを要求するためのコンピュータ実行可能命令を含む。仮想マシンサービス432は、クラスタに対するサービスであり、エンドポイントへのアクセスを提供する。ワーカーノード仮想マシン310のシム320_1は、サービスエンドポイントを必要とするので、仮想マシンサービス432を呼び出し、仮想マシンサービス432は、ホストのリソース使用状況などのポリシーに従って、ホストマシン(例えば、コンピュータシステム)を選択する。例えば、ワーカーノード仮想マシン310は、コンピュータシステム251上でホストされ、ポッド仮想マシン301は、同じコンピュータシステム251上で別々にホストされる(すなわち、ワーカーノード仮想マシン310にネストされていない)、もしくは異なるコンピュータシステム252でホストされる、またはその組み合わせであり得る。ポッドを作成する最先端のシステムがワーカーノード仮想マシン自体にあるのとは異なり、本発明の1つまたは複数の実施形態に従って、シム320_1は、仮想マシンサービス432に、ポッド仮想マシン301を作成するための仮想リソース(CPU、メモリ、I/Oなどを含む)をワーカーノード仮想マシン310の外部で取得させるコンピュータ実行可能命令を有している。
ブロック510において、ワーカーノード仮想マシン310は、シム320_1を使用して、ポッド仮想マシンの初期化を実行し、エージェント420を作成/呼び出し/セットアップし、ポッド仮想マシン301内のインナーCRI414(例えば、インナーcontainerd CRI)を作成/呼び出し/セットアップし、ワーカーノード仮想マシン310とポッド仮想マシン301との間にネットワークおよびトンネルをセットアップするよう構成されている。ネットワークをセットアップするために、シム320_1は、仮想マシンサービス432と通信し、もしくは仮想マシンサービス432に指示し、またはその両方をし、ネットワークハンドラ434にワーカーノード仮想マシン310とポッド仮想マシン301との間に論理ネットワーク接続を作成させるように構成されている。この論理的ネットワーク接続は、アンダーレイネットワークの上に位置するオーバーレイネットワークである。オーバーレイネットワークを使用して、ワーカーノード仮想マシン310は、ポッド仮想マシン301にインターネットプロトコル(IP)アドレスを提供するように構成される。論理ネットワーク接続は、本明細書で論じるように通信するために、ワーカーノード仮想マシン310とポッド仮想マシン301との間にトンネルを作成する。ワーカーノード仮想マシン310はワーカーノードアイデンティティを有し、ポッド仮想マシン301はポッドアイデンティティを有し、これらの両方は論理ネットワーク接続を作成するために利用され、図6のマッピングテーブル650に格納される。ワーカーノード仮想マシン310の仮想イーサネット(例えば、eth0)からポッド仮想マシン301の仮想イーサネット(例えば、eth0)への論理接続を介して、ワーカーノード仮想マシン310とポッド仮想マシン301は同じネットワーク上にある。ネットワークハンドラ434は、ハイパーバイザと連携して、論理的なネットワーク接続を提供することができる。ネットワークハンドラ434は、ホスト(例えば、コンピュータシステム251)上で実行され、リモートポッド仮想マシンとワーカーノード仮想マシンを接続するためのアンダーレイネットワークの作成を担当する。ポッド仮想マシンとワーカーノード仮想マシンが2つの別々のホスト上で実行されている場合、ネットワークで一緒に動作する2つの別々のホストオペレーティングシステムと2つのネットワークハンドラが存在し得る。
論理接続をセットアップした後、シム320_1はエージェント420を作成し、ポッド仮想マシン301内のエージェント420は、ワーカーノード仮想マシン310内のシム320_1と通信するよう構成される。1つまたは複数の実施形態において、シム320_1は、ポッド仮想マシン301で作成されるエージェント420を呼び出すことができる。1つまたは複数の実施形態では、シム320_1は、サンドボックス460でエージェント420を作成し、エージェント420をポッド仮想マシン301に転送することができる。エージェント420は、本明細書で議論されるように動作する、コンピュータ実行可能命令を含む。論理接続をセットアップした後、シム320_1は、インナーCRI414を作成し、インナーCRI414は、ポッド仮想マシン301にコンテナを作成するように構成されている。エージェント420は、シム320とインナーCRI414との間の要求の転送を支援するように構成される。1つまたは複数の実施形態では、シム320_1は、エージェント420を使用して、ポッド仮想マシン301内に作成されるようにインナーCRI414を呼び出すことができる。1つまたは複数の実施形態では、シム320_1は、サンドボックス460でCRI414を作成し、エージェント420を介してCRI414をポッド仮想マシン301に転送することができる。
ブロック512において、シム320_1は、インナーCRI414に例示的なコンテナ440および441を作成するように、呼び出す/させるよう構成される。例えば、シム320_1は、インナーCRI414がコンテナ440および441を作成するために、エージェント420を介して、特に、インナーCRI414に、シェルポッド464に意図されたコンテナのためのAPIもしくはAPIオブジェクトまたはその両方をポッド仮想マシン301へ転送するように構成される。シム320_1は、エージェント420に要求を送るように構成され、このエージェント420は、次に、要求をポッド仮想マシン301内のインナーCRI414にリダイレクトする。CRI414は、コンテナ440および441を作成するためにcontainerdを呼び出すように指示される。コンテナ440および441はそれぞれ、ソフトウェアアプリケーションがポッド仮想マシン301を実行するホストマシン上で実行されるように、ポッド仮想マシン301上で別のソフトウェアアプリケーションを開始/インスタンス化するためにオープン/ランされる。コンテナ440および441はサンドボックス460のシェルポッド464に形成されるのではなく、コンテナ440および441はポッド仮想マシン301に形成される。さらに、サンドボックス460において、一時停止されたコンテナ462が起動されてもよい。一時停止されたコンテナ462は、不完全もしくは、コンテナのシェルまたはその両方である。
ブロック514において、カスタマイズされたcAdvisor410もしくはkubelet312(カスタマイズされたcAdvisor410はkubelet312内にあってもよい)またはその組み合わせは、リソースモニタリングのためにポッド仮想マシン301を報告するため、リソース認識サービス430を呼び出すよう構成される。ポッド仮想マシン301を報告することは、ポッド仮想マシン301のポッドアイデンティティをリソース認識サービス430及びAPIサーバ204に報告することを含む。リソース認識サービス430は、ポッド仮想マシン301のリソースを維持するように構成される。
図6は、本発明の1つまたは複数の実施形態による、Kubernetesにおける仮想マシンとしてリモートポッドを提供し使用するためのシステム200におけるネットワークアーキテクチャの一例を示すブロック図である。図6のシステム200は、図を不明瞭にしないようにいくつかの要素を省略しているが、システム200は、本明細書で論じるような要素およびその機能を含むことが理解されるべきである。ポッド仮想マシン301、302は、簡潔にするために示されているが、説明は、ポッド仮想マシン303および任意の追加のポッド仮想マシンに適用される。
ホストネットワークハンドラ434は、ワーカーノード仮想マシン310およびポッド仮想マシン301、302のためのオーバーレイネットワークをセットアップするためのアンダーレイネットワークへのアクセスを提供する役割を担う。アンダーレイネットワークは、オーバーレイネットワークが構築される物理的なインフラストラクチャである。アンダーレイネットワークは、ネットワークを介したパケットの配信を担当する基礎となるネットワークである。オーバーレイネットワークは、仮想ローカルエリアネットワーク(VLAN)もしくはCNI316によってセットアップされる任意の適用可能なネットワークまたはその組み合わせとすることができる。ポッド仮想マシンの作成中にシム320_1によって初期化されるように、ポッド仮想マシン301、302の各々は、一意のポッドネームスペースを有する。例えば、ポッド仮想マシン301はポッドネームスペース601を有し、ポッド仮想マシン302はポッドネームスペース602を有する。同様に、シム320_1は、ワーカーノード仮想マシン310にプロキシネットワークネームスペース611及びプロキシネットワークネームスペース612を作成するように構成される。各ポッドネームスペース601、602は、それぞれポッド仮想マシン301、302内のオブジェクトであり、各プロキシネットワークネームスペース611、612は、ワーカーノード仮想マシン310内のオブジェクトである。マッピングテーブル650に格納されたポッド仮想マシン301のポッドアイデンティティを用いて、シム320_1は、プロキシネットワークネームスペース611を、ポッド仮想マシン301のプロキシまたはプロキシネットワークに割り当てる。マッピングテーブル650に格納されたポッド仮想マシン302のポッドアイデンティティを使用して、シム320_1は、ポッド仮想マシン302のプロキシまたはプロキシネットワークとなるようにプロキシネットワークネームスペース612を割り当てる。このマッピングは、マッピングテーブル650に格納される。
各ポッド仮想マシン301、302は、コンテナを有するポッドネームスペースへの仮想イーサネット接続と、ポッドネームスペースの外への仮想イーサネット接続を有する。例えば、ポッド仮想マシン301は、ポッドネームスペース601内の仮想イーサネット接続(VETH1)をポッド仮想マシン301内のポッドネームスペース601の外にある別の仮想イーサネット接続(VETH0)に接続しており、仮想イーサネット接続(VETH1およびVETH0)は一組である。ポッド仮想マシン302は、ポッドネームスペース602内の仮想イーサネット接続(VETH1)が、ポッド仮想マシン302内のポッドネームスペース602の外にある別の仮想イーサネット接続(VETH0)に接続されており、ポッド仮想マシン302上で仮想イーサネット接続(VETH1およびVETH0)は一組となる。ワーカーノード仮想マシン310では、プロキシネットワークネームスペース611内の仮想イーサネット接続(VETH1)が、プロキシネットワークネームスペース611の外にある別の仮想イーサネット接続(VETH0)に接続されており、仮想イーサネット接続(VETH1およびVETH0)は一組となる。ワーカーノード仮想マシン310では、プロキシネットワークネームスペース612は、プロキシネットワークネームスペース612内の仮想イーサネット接続(VETH3)が、プロキシネットワークネームスペース612の外にある別の仮想イーサネット接続(VETH2)に接続されており、仮想イーサネット接続(VETH3およびVETH2)は別の一組である。プロキシネットワークネームスペース611、612はそれぞれ、各々の仮想イーサネット接続を介してブリッジに接続されている(独自のIPアドレスを有している)。
CNI316もしくはシム320_1またはその両方は、ワーカーノード仮想マシン310内のプロキシネットワークネームスペース611とポッド仮想マシン301内のポッドネームスペース601との間に、トラフィック(例えば、データ)がミラーリング/コピーされてワーカーノード仮想マシン310とポッドネームスペース601との間を行き来して通信するような仮想プライベートネットワークなどのトンネル(例えば、トンネル0)を作成するように構成されている。同様に、CNI316もしくはシム320_2またはその両方は、ワーカーノード仮想マシン310内のプロキシネットワークネームスペース612とポッド仮想マシン301内のポッドネームスペース602との間に、トラフィック(例えば、データ)がミラーリング/コピーされてワーカーノード仮想マシン310とポッドネームスペース602との間を行き来して通信するような仮想プライベートネットワークなどの別のトンネル(例えば、トンネル1)を作成するように構成される。すなわち、トンネルおよび仮想イーサネット接続は、トラフィックをミラーリングして行き来する。CNI316もしくは320_1またはその両方は、ポッド仮想マシン301、302のポッドネームスペース601、602のそれぞれに固有のIPアドレスを割り当てるように構成され、そのすべてがマッピングテーブル650に格納される。
本明細書で論じるように、ポッド仮想マシン301、302、303は、ワーカーノード仮想マシン310を実行しているホストマシンとはそれぞれ異なることができる任意のホストマシン上で実行するようにデプロイすることができ、もしくは1つまたは複数のポッド仮想マシン301、302、303がワーカーノード仮想マシン310と同じホストマシン上にあり、他のポッド仮想マシンが異なるホストマシン上にあってもよく、またはその組み合わせでもよい。ワーカーノードの立場からは、実際のコンテナフットプリントがワーカーノード仮想マシン310とは異なる他の仮想マシン上にあることは意識されない。つまり、ポッド仮想マシン上にはCNIコードは存在しない。さらに、ワーカーノード仮想マシン310は、プロキシネットワークネームスペースを作成したシム320_1、320_2、320_3とインタフェースしているため、プロキシネットワークネームスペースを用いて、あたかもポッド仮想マシン301、302、303が同じホストマシンに存在するかのように、ポッドネームスペースとデータの送受信を行うことができる。
図7は、本発明の1つまたは複数の実施形態による、ワーカーノード仮想マシンから遠隔であるリモートポッド仮想マシンをインスタンス化/起動し、使用するためのコンピュータ実装方法700を示すフローチャートである。図7のコンピュータ実装方法700は、システム200を使用して実装することができる。適宜、図1~図6を参照することができる。
コンピュータ実装方法700のブロック702において、ワーカーノード仮想マシン310は、ワーカーノード仮想マシン310において中間ソフトウェア(例えば、シム320)をインスタンス化/開始/呼び出しするように構成される。例えば、CRI316(例えば、containerdなど)は、ワーカーノード仮想マシン310においてシム320をインスタンス化/起動/呼び出しすることができる。
ブロック704において、ワーカーノード仮想マシン310は、中間ソフトウェア(例えば、シム320_1)を使用して、ポッド仮想マシン(例えば、ポッド仮想マシン301)を作成させるように構成され、ポッド仮想マシン(例えば、ポッド仮想マシン301)はワーカーノード仮想マシン310から遠隔である。例えば、ポッド仮想マシン301は、ワーカーノード仮想マシン310内にネストされず、もしくは含まれないまたはその両方である。ポッド仮想マシン301は、ワーカーノード仮想マシン310と同じホストマシン上でホストされてもよく、例えば、両者はコンピュータシステム251上でホストされることが可能である。ポッド仮想マシン301及びワーカーノード仮想マシン310は、異なるホストマシン上でホストされてもよく、例えば、一方はコンピュータシステム251上でホストされ、他方はコンピュータシステム252上でホストされることが可能である。
ブロック706において、ワーカーノード仮想マシン310は、ワーカーノード仮想マシン310内の中間ソフトウェア(例えば、シム320_1)とポッド仮想マシン(例えば、ポッド仮想マシン301)内のポッド空間(例えば、ポッドネームスペース601)との間にオーバーレイネットワークを確立させるよう構成される。
ブロック708において、ワーカーノード仮想マシン310は、オーバーレイネットワークを使用して、コンテナ(例えば、コンテナ440、441)をポッド仮想マシン(例えば、ポッド仮想マシン301)内に作成させるように構成され、ワーカーノード仮想マシン310は、オーバーレイネットワークを使用してポッド仮想マシン(例えば、ポッド仮想マシン301)との通信を管理するように構成される。
中間ソフトウェア(例えば、シム320_1)は、ワーカーノード仮想マシン310上に孤立したコンピューティング環境を生成するように構成される。例えば、シム320_1は、ワーカーノード仮想マシン310上の孤立したコンピューティング環境としてサンドボックス460を起動/生成するように構成される。
中間ソフトウェア(例えば、シム320_1)は、ワーカーノード仮想マシン上の孤立したコンピューティング環境において、プロキシネットワーク空間を作成するように構成される。例えば、シム320_1は、ワーカーノード仮想マシン310上の孤立したコンピューティング環境としてサンドボックス460内にプロキシネットワークネームスペース611を開始/作成するように構成されている。
中間ソフトウェア(例えば、シム320_1)は、ワーカーノード仮想マシン310上のプロキシネットワーク空間(例えば、プロキシネットワークネームスペース611)とポッド仮想マシン(例えば、ポッド仮想マシン310)上のポッド空間(例えば、ポッドネームスペース601)との間に論理ネットワークを接続させるよう構成される。論理ネットワーク(オーバーレイネットワーク経由)は、ワーカーノード仮想マシン310上のプロキシネットワークネームスペース611とポッドネームスペース601(コンテナ440を用いて形成された実行ソフトウェアアプリケーションを有する)間の通信に仮想ローカルエリアネットワーク、仮想イーサネットなどを用いる仮想プライベートネットワークなどのトンネルであってもよい。
インターネットプロトコル(IP)アドレスは、ワーカーノード仮想マシン310のプロキシネットワーク空間(例えば、プロキシネットワークネームスペース611)に割り当てられ、中間ソフトウェアは、IPアドレスをポッド空間(例えば、ポッドネームスペース601)に再割り当て/移動するように構成される。例えば、シム320_1は、作成しようとするコンテナのイメージを引き出すように構成され、シム320_1は、サンドボックス460においてコンテナ462を作成/開始するように構成され、コンテナ462はその後、一時停止される。コンテナ462は、停止され、シェルコンテナである。シム320_1が、ワーカーノード仮想マシン310上でコンテナ462が作成/開始されたことをCNI316に通知すると、CNI316は(例えば、クラスレスドメイン間ルーティング(CIDR)を使用して)、一時停止したコンテナ462にTCP/IPアドレスを割り当て、シム320_1は、TCP/IPアドレスをワーカーノード仮想マシン310内のプロキシネットワークネームスペース611(これはサンドボックス460内にあってもよい)からポッド仮想マシン301へ移動/割り当てをし、それによってネットワークをセットアップするよう構成されている。従って、ポッドネームスペース601には、TCP/IPアドレスが割り当てられる。
ワーカーノード仮想マシン上で孤立したコンピューティング環境を意図したコンテナを受信することに応答して、ワーカーノード仮想マシン310は、コンテナをポッド仮想マシンにトランスファーして、ポッド空間と関連付けるように構成される。例えば、シム320_1は、コンテナ440、441をポッドネームスペース601にトランスファーするように構成される。中間ソフトウェア(例えば、シム320_1)は、コンテナ440、441内のソフトウェアアプリケーションをポッド仮想マシン(例えば、ポッド仮想マシン301)上でインスタンス化させるように構成されている。したがって、ソフトウェアアプリケーションは、ワーカーノード仮想マシン310から遠隔のポッド仮想マシン301上で実行されるように構成される。
図8は、本発明の1つまたは複数の実施形態による、Kubernetesのリモートポッドにおける新しいコンテナストレージシステムのための、システム200における例示的なコンテナストレージインターフェースアーキテクチャのブロック図である。図8のシステム200は、図を不明瞭にしないようにいくつかの要素を省略しているが、システム200が、本明細書で論じるような要素およびその機能を含むことは理解されるべきである。ポッド仮想マシン301は、簡潔にするために示されているが、説明は、ポッド仮想マシン302、303および任意の追加のポッド仮想マシンに適用される。
図8は、リモートポッド仮想マシン301がワーカーノード仮想マシン310とは別の仮想マシンで実行されている間に、記憶装置810内の永続ボリューム820を、例えば、リモートポッド仮想マシン301などのリモートポッドにアタッチしマウントする方法の一例を示す図である。エフェメラルストレージおよびクラウドオブジェクトストレージとは異なり、永続ボリューム820は、1つまたは複数の実施形態に従って、ファイルストレージ、ブロックストレージなどであることが可能である。コンテナ内のオンディスクファイルはエフェメラルであり、これは、コンテナで実行する場合のアプリケーションにいくつかの問題をもたらす。問題の1つは、コンテナがクラッシュしたときにファイルが失われることであり、kubeletは、コンテナを再起動するが、クリーンな状態で再起動する。一般的に、ワーカーノード仮想マシンにアタッチされた任意のボリュームは、それらが別々の仮想マシンで実行されているため、リモートポッド仮想マシンにマウントできないことに留意されたい。しかしながら、1つまたは複数の実施形態は、コンテナストレージインターフェース(CSI)コントローラプラグイン802、CSIノードプラグイン804、シム320、及びCSIポッドプラグイン806を使用して、永続ボリューム820をポッド仮想マシン301にアタッチしマウントするように構成される。
コンテナストレージインターフェース(CSI)は、コンテナオーケストレーションシステム(CO)が任意のストレージシステムをコンテナ化したワークロードに公開するために使用できる業界標準のインタフェースを確立するための仕様である。インツリーとは、Kubernetesのコアリポジトリに存在するコードを指す。アウトオブツリーとは、Kubernetesのコアリポジトリの外側に存在するコードを指す。CSIボリュームプラグインは、コアKubernetesリポジトリの外のどこかに存在するコードを指す。CSIボリュームドライバは、Kubernetes CSIボリュームプラグイン(Volume Plugin)を通じてKubernetesで使用できるボリュームプラグインのアウトオブツリーCSI互換性実装である。
永続ボリュームまたはPersistentVolume(PV)は、管理者によってプロビジョニングされた、またはストレージクラスを使用して動的にプロビジョニングされた、クラスタのストレージの一部分である。永続ボリュームは、ノードがクラスタリソースであるのと同様に、クラスタ内のリソースである。永続ボリュームはボリュームプラグインであるが、永続ボリュームを使用する個々のポッドとは独立したライフサイクルを持つ。このAPIオブジェクトは、NFS、iSCSI、またはクラウドプロバイダー固有のストレージシステムなど、ストレージの実装の詳細を取得する。ファイルストレージ、ブロックストレージ、オブジェクトストレージは、それぞれ異なる方法でデータを保持、整理、表示するストレージ形式で、それぞれが独自の機能と制限を備えている。ファイルストレージは、データをフォルダー内のファイルの階層構造として整理して表し、ブロックストレージは、データを任意に整理して均等なサイズのボリュームに分割し、オブジェクトストレージは、データを管理して関連するメタデータにリンクさせる。
例えばコンピュータシステム202のコントロールプレーンのCSIコントローラプラグイン802は、(ハードウェア)記憶装置810に永続ボリューム820を作成し、永続ボリューム820をワーカーノード仮想マシン310にアタッチする準備を行うように構成されている。CSIコントローラプラグイン802は、ワーカーノード仮想マシン310内のCSIノードプラグイン804を呼び出すように構成され、永続ボリューム820をワーカーノード仮想マシン310にアタッチする代わりに、CSIノードプラグイン804は、シム320_1がCSIポッドプラグイン806に永続ボリューム820をポッド仮想マシン301にアタッチさせ、もしくはアタッチするように指示し、またはその両方をするように、シム320_1を呼び出すように構成される。1つまたは複数の実施形態では、CSIコントローラプラグイン802もしくはCSIノードプラグイン804またはその両方は、ワーカーノード仮想マシン310のポッドサンドボックス460内のシェルポッド464に永続ボリューム820をアタッチすることを試みる/要求することができ、これはシム320_1をトリガーし、CSIポッドプラグイン806を呼び出させる。したがって、シム320_1は、CSIポッドプラグイン806に、永続ボリューム820をポッド仮想マシン301にアタッチさせ、もしくはアタッチするように指示し、またはその両方をする。永続ボリュームをポッド仮想マシン301にアタッチした後、シム320_1は、CSIポッドプラグイン806に、永続ボリューム820をポッド仮想マシン301に、特に永続ストレージとして使用するためにコンテナ440、441にマウントさせ、もしくはマウントするように指示し、またはその両方をするよう構成される。
ボリュームアタッチメントは、指定されたボリュームを指定されたノードに、または指定されたノードからアタッチもしくはデタッチまたはその両方をするインテントを取得する。ボリュームアタッチメントオブジェクトは、非ネームスペース(non-namespaced)である。インツリーCSIボリュームプラグインは、次の内部Kubernetesボリュームインターフェースを実装する。(1)特定のパスへのボリュームのマウント/アンマウント、および指定されたノードへのボリュームのアタッチ/デタッチである。マウントとアンマウントについては、インツリーボリュームプラグインのSetUpとTearDownメソッドが、Unixドメインソケット(UDS)経由でNodePublishVolumeとNodeUnpublishVolumeCSIコールをトリガーする。したがって、Kubernetesは、CSIプラグインがボリュームをマウントするために、NodePublishVolumeを介して渡す一意のtarget_path(ボリュームごとにポッドごとに一意)を生成する。その後、NodeUnpublishVolumeコールが正常に完了すると(ボリュームのアンマウントが検証されると)、Kubernetesはそのディレクトリを削除する。
図9は、本発明の1つまたは複数の実施形態による、コンテナストレージインターフェースドライバにおける1つまたは複数の新しいコンポーネントを使用してKubernetesにおけるリモートポッドに新しいコンテナストレージシステムをインストールするためのシステム200におけるアーキテクチャのさらなる詳細を例示するブロック図である。図10は、本発明の1つまたは複数の実施形態による、システム200における新しいコンテナストレージインターフェースを使用してKubernetesにおけるリモートポッドに新しいコンテナストレージシステムをインストールするためのプロセスのブロック図である。簡潔さのために図10には示されていないが、当業者によって理解されるように、コンテナにボリュームをアタッチしてマウントするために、コンピュータシステム202内のコントロールプレーンによって実行される様々な機能がある。1つまたは複数の実施形態は、例えば、ファイルストレージもしくはブロックストレージまたはその両方などの永続ボリューム820をリモートポッド仮想マシン301にアタッチし、永続ボリューム820を1つまたは複数のコンテナ440、441にマウントするプロセスをさらに提供する。
図9では、コンテナ化された(サードパーティの)CSIボリュームドライバをデプロイするために、図9を利用して、ボリュームプラグイン動作を実装し、コントローラ、ノード、およびアイデンティティサービスを含むUnixドメインソケット経由でgRPCインタフェースを公開するCSIボリュームドライバコンテナを作成することができる。図9は、CSIボリュームドライバコンテナを、Kubernetesシステムとの対話において、CSIボリュームドライバコンテナを支援するオプションのヘルパーコンテナ(例えば、エクスターナルアタッチャー、エクスターナルプロビジョナー、ノード-ドライバー-レジストラー、クラスタ-ドライバー-レジストラー、エクスターナルリサイザー、エクスターナルスナップショッター、リブネスプローブなど)とバンドルするために利用することが可能である。より具体的には、図9は、CSIボリュームドライバコンテナを有するKubernetesコントローラ、StatefulSet又はDeploymentとの通信を容易にするために、以下のKubernetesオブジェクトを作成する:Kubernetesが提供するコンテナ、クラスタ-ドライバー-レジストラー、エクスターナルプロビジョナー(プロビジョン削除/オペレーションに必要)、エクスターナルアタッチャー(アタッチ/デタッチオペレーションに必要)、エクスターナルリサイザー(リサイズ操作に必要)、エクスターナルスナップショッター(ボリュームレベルのスナップショット操作に必要)及びリブネスプローブを作成しうる。図9は、CSIボリュームドライバを含むすべてのコンテナによってマウントされているemptyDirボリュームを含む。CSIボリュームドライバコンテナは、Kubernetesヘルパーコンテナ(複数可)との通信を可能にするために、このディレクトリにそのUnixドメインソケットを作成する。図9は、CSIボリュームドライバコンテナを有するkubeletのすべてのインスタンス、kubeletとのUnixドメインソケットの登録を担当するノード-ドライバー-レジストラー、及びリブネスプローブとの通信を容易にするDaemonSetを含んでもよい。
図9を参照すると、コンピュータシステム202内のコントロールプレーンを使用して、インスタンス(アプリケーションなど)もしくはオブジェクトまたはその両方であり得るユーザは、APIサーバ204上に永続ボリュームクレーム(PVC)オブジェクトを作成し、もしくはAPIサーバ204が永続ボリュームクレームを作成するように要求するまたはその両方をするように構成される。永続ボリュームクレーム(PVC)は、ユーザによるストレージに対する要求である。永続ボリュームクレームは、ポッドに類似している。ポッドはノードリソースを消費し、永続ボリュームクレームは永続ボリュームリソースを消費する。ポッドが特定のレベルのリソース(例えば、CPU及びメモリ)を要求できるように、永続ボリュームクレームは、特定のサイズ及びアクセスモード(例えば、アクセスモードは、ReadWriteOnce、ReadOnlyMany、ReadWriteManyなどをマウントできる)を要求することができる。
APIサーバ204がPVCオブジェクトを作成している間、エクスターナルプロビジョナーはPVCオブジェクトを監視/モニターするように設定される。監視とは、記述されたリソースに対する変更をモニターし、追加、更新、および除去の通知の流れとして返すことである。エクスターナルプロビジョナーがAPIサーバ204上でPVCオブジェクトを見つけると、エクスターナルプロビジョナーは、例えば、Unixドメインソケット(UDS)経由でグーグル(登録商標)リモートプロシージャコール(gRPC)を使用して、CSIコントローラプラグイン802に作成ボリューム要求を送信するように構成される。CSIコントローラプラグイン802は、ボリュームを作成して、ボリュームが作成されたことをエクスターナルプロビジョナーに通知するよう構成される。エクスターナルプロビジョナーは、APIサーバ204に永続ボリューム(PV)オブジェクトを作成するよう指示するよう構成される。コントローラマネージャ(例えば、CSIコントローラプラグイン802)は、ボリュームアタッチメントオブジェクトを作成し、作成されたボリュームアタッチメントオブジェクトをAPIサーバ204に送るように構成され、エクスターナルプロビジョナーは、PVCオブジェクトを更新し、PVCオブジェクトが使用可能となるようにPVCオブジェクトをボリュームアタッチメントオブジェクトにバインドするように構成される。エクスターナルアタッチャーは、ボリュームアタッチメントオブジェクトを監視/モニターするように構成され、見つかったら、エクスターナルアタッチャーは、CSIコントローラプラグイン802に(例えば、UDS経由でgRPCを使用して)コントローラパブリッシュボリュームを送信するように構成される。したがって、CSIコントローラプラグイン802は、ボリュームをアタッチし、その後、ボリュームがワーカーノードの仮想マシン310にアタッチされたことをエクスターナルアタッチャーに通知するよう構成される。エクスターナルアタッチャーは、APIサーバ204にボリュームアタッチメントオブジェクトを更新するように指示するように構成される。アタッチ/デタッチ操作は、外部コンポーネント(「アタッチャー(attacher)」)によっても処理される。アタッチャーは、新しいボリュームアタッチメントオブジェクトの外部CSIボリュームドライバに代わってKubernetes APIを監視し、CSIボリュームドライバに対して適切な呼び出しをトリガーして、ボリュームをアタッチする。アタッチャーはボリュームアタッチメントオブジェクトを監視し、基盤となるCSIドライバがControllerPublishVolumeコールをサポートしていなくても、Kubernetesがそれに関する知識を持たないため、それをアタッチされたとマークすることになる。例示の図は、コンピュータシステム202のコントロールプレーンで行われるアクションについて議論されてきたが、当業者によって知られているように、より多くのアクション、より少ないアクション、およびいくつかのケースでは異なるアクションが生じ得ることを理解されたい。
ワーカーノード仮想マシン310およびリモートポッド仮想マシン301に関するさらなる詳細を説明する図10を参照すると、ワーカーノード仮想マシン310内のkubelet312は、CSIコントローラプラグイン802によって実行されるアタッチされたボリュームによってトリガーされ、kubelet312は、アクション1002において、コントロールプレーンのAPIサーバ204内のボリュームアタッチメントオブジェクトを監視/モニターするように構成される。アクション1004において、kubelet312は、CSIノードプラグイン804にノードステージボリュームを実行するよう通知するよう構成され(例えば、UDS経由でgRPCを使用して)、CSIノードプラグイン804は、アクション1006で、コントロールプレーンにクリエイトボリュームポッドアタッチメントを送信するよう構成される。CSIノードプラグイン804がワーカーノード仮想マシン310にボリュームをマウントする代わりに、CSIノードプラグイン804は、アクション1008において、ポッドステージボリュームをシム320_1に送信し、アクション1010でリモートポッド仮想マシン301内のCSIポッドプラグイン806にポッドステージボリュームに対する要求を渡すよう構成されている。したがって、CSIポッドプラグイン806は、ポッドステージボリューム要求を受信すると、永続ボリューム820をポッド仮想マシン301にアタッチするように構成されており、これがボリュームポッドアタッチメントである。アクション1012において、CSIポッドプラグイン806は、ワーカーノード仮想マシン310のシム320_1を介してコントロールプレーンのAPIサーバ204にゲットボリュームポッドアタッチメントを送信するように構成されている。このように、アクション1012では、CSIポッドプラグイン806は、アクション1006で作成されたVolumePodAttachmentオブジェクトをコントロールプレーンから取得することになる。「ゲット」は、指定されたボリュームアタッチメントのステータスを読み出すためのメソッドである。
図10のアクション1014において、kubelet312は、CSIノードプラグイン804にノードパブリッシュボリュームを実行するよう通知し(例えば、UDS経由でgRPCを使用して)、CSIノードプラグイン804がワーカーノード仮想マシン310にボリュームをマウントする代わりに、アクション1016において、コンピュータシステム202上のコントロールプレーンでAPIサーバ204にクリエイトCSIポッドボリュームを送信するよう構成される。特に、アクション1016で、ボリューム情報を記述し、アクション1022で使用されるCSIPodVolumeオブジェクトがコントロールプレーン内に作成される。アクション1018において、ワーカーノード仮想マシン310上のkubelet312は、シム320_1にポッドサンドボックス(例えば、サンドボックス460)を実行するように指示するように構成され、シム320_1は、ポッドサンドボックス(例えば、サンドボックス460)をテンプレートもしくはコンピュータ環境またはその両方として使用し、プロキシもしくは(一時的な)ワーカーノード仮想マシン310上にボリュームをマウントするための場所(例えば、ファイルパス)またはその両方であるように見えることができる。ポッドサンドボックス460、シェルポッド464もしくは一時停止したコンテナ462またはその組み合わせにマウントする代わりに、ワーカーノード仮想マシン310上のシム320_1は、アクション1018でポッド仮想マシン301上のCSIポッドプラグイン806にポッドパブリッシュボリュームを発行し、これにより、アクション1020でCSIポッドプラグイン806に永続ボリューム820をコンテナ440、441にマウントさせるよう構成される。CSIポッドプラグイン806は、永続ボリューム820をCSIポッドボリュームとしてマウントすることができる。CSIポッドプラグインは、アクション1022において、シム320_1を介して、ゲットCSIポッドボリュームをkubelet312に送信する。アクション1022で、CSIポッドプラグイン806は、アクション1016で作成されたCSIPodVolumeオブジェクトを取得する。
図11は、本発明の1つまたは複数の実施形態による、コンテナストレージインターフェースドライバにおける1つまたは複数の新しいコンポーネントを使用して、Kubernetesにおけるリモートポッドに新しいコンテナストレージシステムをインストールするために呼び出す、もしくは利用またはその両方をすることができる種々の機能のブロック図である。CSIコントローラプラグイン802、CSIノードプラグイン804、およびCSIポッドプラグイン806は、ワーカーノード仮想マシン310にではなく、ポッド仮想マシン301、302、303内のコンテナ440、441に永続ボリューム820をアタッチしマウントする機能を実行もしくは呼び出し、またはその両方をすることが可能である。CSIコントローラプラグイン802、CSIノードのプラグイン804、およびCSIポッドプラグイン806は、CSIドライバと見なすことができる。
図12は、本発明の1つまたは複数の実施形態による、Kubernetesのリモートポッドに新しいコンテナストレージシステムをインストールするための拡張コンテナストレージインターフェースオブジェクトのブロック図である。“attacher”は、この要求を処理することになるボリュームドライバの名称を示す。これは、“GetPluginName()”によって返される名前である。“nodeName”は、ボリュームがアタッチされるべきノードである。“source”は、アタッチすべきボリュームを表す“VolumeAttachmentSource”である。“PersistentVolume”は、エクスターナルアタッチャーを介してアタッチできる。拡張コンテナストレージインターフェースオブジェクトは、1つまたは複数の実施形態に従って、CSIコントローラプラグイン802、CSIノードプラグイン804、及びCSIポッドプラグイン806によって使用される、もしくは実装される、またはその両方ができる。
図13は、本発明の1つまたは複数の実施形態による、永続ボリューム820をワーカーノード仮想マシンの代わりにリモートポッド仮想マシンにアタッチしてマウントするためのコンピュータ実装方法1300を示すフローチャートである。図13のコンピュータ実装方法1300は、システム200を使用して実装することができる。
ブロック1302において、ワーカーノード仮想マシン310は、ボリューム(例えば、永続的ボリューム820)がワーカーノード仮想マシン310にアタッチするために利用可能であることを決定するように構成される。例えば、ワーカーノード仮想マシン310のkubelet312は、永続ボリューム820をワーカーノード仮想マシン310にアタッチする要求として機能するボリュームアタッチメントオブジェクト(たとえば、図10のアクション1002)を監視/モニターするよう構成される。
ブロック1304において、ワーカーノード仮想マシン310は、ワーカーノード仮想マシン310の中間ソフトウェア(例えば、シム320)を使用して、ポッドコンテナストレージインターフェース(例えば、CSIポッドプラグイン806)に、ボリュームをポッド仮想マシン301にアタッチさせるように構成される。例えば、ワーカーノード仮想マシン310のシム320は、例えば、ポッドステージボリュームに対する要求(例えば、アクション1010)などのボリュームをアタッチする要求をCSIポッドプラグイン806に送信するように構成され、これによりCSIポッドプラグイン806は永続ボリューム820をポッド仮想マシン301にアタッチするようにされる。
ブロック1306において、ワーカーノード仮想マシン310は、ボリュームをポッド仮想マシン301にアタッチすることに応じて、ワーカーノード仮想マシンの中間ソフトウェア(例えば、シム320)を使用して、ポッドコンテナストレージインターフェース(例えば、CSIポッドプラグイン806)に、ポッド仮想マシン301によってボリュームが使用可能になるように、ボリューム(例えば、永続ボリューム820)をポッド仮想マシン301にマウントさせるよう構成されている。例えば、シム320は、例えば、ポッドパブリッシュボリューム(例えば、アクション1020)を使用して、CSIポッドプラグイン806に、ポッド仮想マシン301に永続ボリューム820をマウントするよう要求/指示するよう構成される。さらに、CSIポッドプラグイン806は、コンテナ440、441に永続的ボリューム820をマウントすることができる。シム320は、kubelet312からのマウント要求のプロキシとしてポッドサンドボックス460を使用した後、永続ボリューム820をマウントする要求/指示を送信することができる。
ボリュームは、永続ボリューム820である。永続ボリューム820は、ファイルストレージを構成する。永続ボリューム820は、ブロックストレージを構成する。ワーカーノード仮想マシン310は、ボリュームをマウントする要求を受信もしくは生成またはその両方をするように構成され(例えば、アクション1004で)、ボリュームをワーカーノード仮想マシン310に取り付ける代わりに、要求は中間ソフトウェア(例えば、シム320)をトリガーして、ボリュームをポッド仮想マシン301にアタッチさせる(例えば、アクション1008、1010)。
1つまたは複数の実施形態によれば、ワーカーノード仮想マシン310は、ボリュームをマウントする要求を受信もしくは生成またはその両方をするように構成され(例えば、アクション1014で)、ワーカーノード仮想マシン310にボリュームをマウントする代わりに、要求は中間ソフトウェア(例えば、シム320)をトリガーして、ボリュームをポッド仮想マシン301にマウントさせる(例えば、アクション1018、1020)。中間ソフトウェア(例えば、シム320)は、ワーカーノード仮想マシン310上の孤立したコンピューティング環境(例えば、ポッドサンドボックス460)を、ポッド仮想マシン301上にボリュームをマウントするためのプロキシとして使用するように構成される。
本開示は、クラウドコンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実装は、クラウドコンピューティング環境に限定されないことが理解されるであろう。むしろ、本発明の実施形態は、現在知られている又は後に開発される任意の他のタイプのコンピューティング環境と組み合わせて実施することが可能である。
クラウドコンピューティングは、設定可能なコンピューティングリソースの共有プール(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)へ、簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のモデルであり、最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるものである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、および少なくとも4つの実装モデルを含むことがある。
特性は以下の通りである。
オンデマンド・セルフサービス:クラウドの消費者は、サービスプロバイダとの人的な対話を必要することなく、必要に応じて自動的に、サーバ時間やネットワークストレージなどのコンピューティング能力を一方的に準備することができる。
ブロード・ネットワークアクセス:コンピューティング能力はネットワーク経由で利用可能であり、また、標準的なメカニズムを介してアクセスできる。それにより、異種のシンまたはシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、PDA)による利用が促進される。
リソースプーリング:プロバイダのコンピューティングリソースはプールされ、マルチテナントモデルを利用して複数の消費者に提供される。様々な物理リソースおよび仮想リソースが、需要に応じて動的に割り当ておよび再割り当てされる。一般に消費者は、提供されたリソースの正確な位置を管理または把握していないため、位置非依存(location independence)の感覚がある。ただし消費者は、より高い抽象レベル(例えば、国、州、データセンタ)では場所を特定可能な場合がある。
迅速な柔軟性(elasticity):コンピューティング能力は、迅速かつ柔軟に準備することができるため、場合によっては自動的に、直ちにスケールアウトし、また、速やかにリリースされて直ちにスケールインすることができる。消費者にとって、準備に利用可能なコンピューティング能力は無制限に見える場合が多く、任意の時間に任意の数量で購入することができる。
測定されるサービス:クラウドシステムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブユーザアカウント)に適したある程度の抽象化レベルでの測定機能を活用して、リソースの使用を自動的に制御し最適化する。リソース使用量を監視、制御、および報告して、利用されるサービスのプロバイダおよび消費者の両方に透明性を提供することができる。
サービスモデルは以下の通りである。
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションを利用できることである。当該そのアプリケーションは、ウェブブラウザ(例えばウェブメール)などのシンクライアントインタフェースを介して、各種のクライアント装置からアクセスできる。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージや、個別のアプリケーション機能さえも含めて、基礎となるクラウドインフラストラクチャの管理や制御は行わない。ただし、ユーザ固有の限られたアプリケーション構成の設定はその限りではない。
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラム言語およびツールを用いて、消費者が作成または取得したアプリケーションを、クラウドインフラストラクチャに展開(deploy)することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージを含む、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、展開されたアプリケーションを制御でき、かつ場合によってはそのホスティング環境の構成も制御できる。
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、オペレーティングシステムやアプリケーションを含む任意のソフトウェアを消費者が展開および実行可能な、プロセッサ、ストレージ、ネットワーク、および他の基本的なコンピューティングリソースを準備することである。消費者は、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、オペレーティングシステム、ストレージ、および展開されたアプリケーションを制御でき、かつ場合によっては一部のネットワークコンポーネント(例えばホストファイアウォール)を部分的に制御できる。
展開モデルは以下の通りである。
プライベートクラウド:このクラウドインフラストラクチャは、特定の組織専用で運用される。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
コミュニティクラウド:このクラウドインフラストラクチャは、複数の組織によって共有され、共通の関心事(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンス)を持つ特定のコミュニティをサポートする。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
パブリッククラウド:このクラウドインフラストラクチャは、不特定多数の人々や大規模な業界団体に提供され、クラウドサービスを販売する組織によって所有される。
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ以上のクラウドモデル(プライベート、コミュニティまたはパブリック)を組み合わせたものとなる。それぞれのモデル固有の実体は保持するが、標準または個別の技術によってバインドされ、データとアプリケーションの可搬性(例えば、クラウド間の負荷分散のためのクラウドバースティング)を実現する。
クラウドコンピューティング環境は、ステートレス性(statelessness)、低結合性(low coupling)、モジュール性(modularity)および意味論的相互運用性(semantic interoperability)に重点を置いたサービス指向型環境である。クラウドコンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで、図14に例示的なクラウドコンピューティング環境50を示す。図示するように、クラウドコンピューティング環境50は1つ以上のクラウドコンピューティングノード10を含む。これらに対して、クラウド消費者が使用するローカルコンピュータ装置(例えば、PDAもしくは携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C、もしくは自動車コンピュータシステム54Nまたはこれらの組み合わせなど)は通信を行うことができる。ノード10は互いに通信することができる。ノード10は、例えば、上述のプライベート、コミュニティ、パブリックもしくはハイブリッドクラウドまたはこれらの組み合わせなど、1つ以上のネットワークにおいて、物理的または仮想的にグループ化(不図示)することができる。これにより、クラウドコンピューティング環境50は、サービスとしてのインフラストラクチャ、プラットフォームもしくはソフトウェアまたはこれらの組み合わせを提供することができ、クラウド消費者はこれらについて、ローカルコンピュータ装置上にリソースを維持する必要がない。なお、図14に示すコンピュータ装置54A~Nの種類は例示に過ぎず、コンピューティングノード10およびクラウドコンピューティング環境50は、任意の種類のネットワークもしくはネットワークアドレス指定可能接続(例えば、ウェブブラウザの使用)またはその両方を介して、任意の種類の電子装置と通信可能であることを理解されたい。
ここで、クラウドコンピューティング環境50(図14)によって提供される機能的抽象化レイヤのセットを図15に示す。なお、図15に示すコンポーネント、レイヤおよび機能は例示に過ぎず、本発明の実施形態はこれらに限定されないことをあらかじめ理解されたい。図示するように、以下のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェアレイヤ60は、ハードウェアコンポーネントおよびソフトウェアコンポーネントを含む。ハードウェアコンポーネントの例には、メインフレーム61、縮小命令セットコンピュータ(RISC)アーキテクチャベースのサーバ62、サーバ63、ブレードサーバ64、記憶装置65、ならびにネットワークおよびネットワークコンポーネント66が含まれる。いくつかの実施形態において、ソフトウェアコンポーネントは、ネットワークアプリケーションサーバソフトウェア67およびデータベースソフトウェア68を含む。
仮想化レイヤ70は、抽象化レイヤを提供する。当該レイヤから、例えば以下の仮想エンティティを提供することができる:仮想サーバ71、仮想ストレージ72、仮想プライベートネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティングシステム74、ならびに仮想クライアント75。
一例として、管理レイヤ80は以下の機能を提供することができる。リソース準備81は、クラウドコンピューティング環境内でタスクを実行するために利用されるコンピューティングリソースおよび他のリソースの動的な調達を可能にする。計量および価格設定82は、クラウドコンピューティング環境内でリソースが利用される際のコスト追跡、およびこれらのリソースの消費に対する請求またはインボイス送付を可能にする。一例として、これらのリソースはアプリケーションソフトウェアのライセンスを含んでよい。セキュリティは、データおよび他のリソースに対する保護のみならず、クラウド消費者およびタスクの識別確認を可能にする。ユーザポータル83は、消費者およびシステム管理者にクラウドコンピューティング環境へのアクセスを提供する。サービスレベル管理84は、要求されたサービスレベルが満たされるように、クラウドコンピューティングリソースの割り当ておよび管理を可能にする。サービス品質保証(SLA)の計画および履行85は、SLAに従って将来必要になると予想されるクラウドコンピューティングリソースの事前手配および調達を可能にする。
ワークロードレイヤ90は、クラウドコンピューティング環境が利用可能な機能の例を提供する。このレイヤから提供可能なワークロードおよび機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育の配信93、データ分析処理94、取引処理95、ワークロードおよび機能に実装されたソフトウェアアプリケーション96(例えば、ワーカーノード仮想マシン310におけるソフトウェアアプリケーション、ポッド仮想マシン301、302、303におけるソフトウェアアプリケーション等)が含まれる。
本発明の様々な実施形態は、関連する図面を参照して本明細書に記載されている。本発明の代替の実施形態は、本発明の範囲から逸脱することなく考案することができる。以下の説明および図面では、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示されている。これらの接続もしくは位置関係またはその両方は、特に明記しない限り、直接的または間接的であり、本発明は、この点に関して限定することを意図するものではない。したがって、エンティティの結合は、直接または間接の結合のいずれかを指すことができ、エンティティ間の位置関係は、直接または間接の位置関係である可能性がある。さらに、本明細書に記載の様々なタスクおよびプロセスステップは、本明細書に詳細に記載されていない追加のステップまたは機能を有することでより包括的な手順またはプロセスに組み込むことができる。
本明細書に記載の方法の1つまたは複数は、当技術分野で周知の以下の技術のいずれかまたは組み合わせで実装することができる。データ信号に論理機能を実装するための論理ゲートを有する目立たない論理回路、適切な組み合わせの論理ゲートを有する特定用途向け集積回路(ASIC)、プログラマブルゲートアレイ(PGA)、フィールドプログラマブルゲートアレイ(FPGA)などが挙げられる。
簡潔にするために、本発明の態様を作成および使用することに関連する従来の技術は、本明細書で詳細に説明されてもされなくてもよい。特に、本明細書に記載の様々な技術的特徴を実装するためのコンピューティングシステムおよび特定のコンピュータプログラムの様々な側面は周知である。したがって、簡潔にするために、多くの従来の実装の詳細は、本明細書で簡単に言及されるだけであるか、または周知のシステムもしくはプロセスまたはその両方の詳細を提供せずに完全に省略される。
いくつかの実施形態では、様々な機能または行為は、所与の場所で、もしくは、1つまたは複数の装置またはシステムの動作との関連で、またはその両方で、行うことができる。いくつかの実施形態では、所与の機能または行為の一部は、第1のデバイスまたは場所で実行することができ、機能または行為の残りは、1つ以上の追加のデバイスまたは場所で実行することができる。
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定することを意図するものではない。本明細書で使用される場合、単数形「a」、「an」および「the」は、文脈が明確に他のことを示さない限り、複数形も含むことを意図している。本明細書で使用される場合、「含む(comprises)」という用語もしくは「含む(comprising)」という用語またはその両方は、記載された特徴、整数、ステップ、操作、要素、もしくは構成要素またはその組み合わせの存在を指定するが、1つ以上の他の特徴、整数、ステップ、操作、要素コンポーネント、もしくはそれらのグループまたはその組み合わせの存在または追加を排除するものではない。
以下の請求項におけるすべての手段またはステッププラス機能要素の対応する構造、材料、行為、および等価物は、具体的に請求された他の請求項の要素と組み合わせて機能を実行するための任意の構造、材料、または行為を含むことを意図している。本開示は、例示および説明のために提示されたが、網羅的であることを意図するものではなく、または開示された形態に限定されることは意図されていない。多くの修正および変形は、本開示の範囲および精神から逸脱することなく、当業者には明らかであろう。実施形態は、本開示の原理及び実際の適用を最もよく説明するために、また、当業者が、企図される特定の用途に適するように様々な修正を加えた様々な実施形態について本開示を理解できるように、選択および説明されたものである。
本明細書に示されている図は、例示的なものである。本開示の精神から逸脱することなく、図またはそこに記載されたステップ(または操作)に対して多くの変形があり得る。例えば、動作は異なる順序で実行することができ、又は動作を追加、削除又は修正することができる。また、「結合された」という用語は、2つの要素間に信号経路を有することを説明するものであり、要素間に介在する要素/接続がない直接的な接続を意味するものではない。これらの変形例は、すべて本開示の一部とみなされる。
以下の定義および略語は、特許請求の範囲および明細書の解釈に使用される。本明細書で使用される場合、「含む(comprises)」、「含む(comprising)」、「含む(includes)」、「含む(including)」、「含む(has)」、「含む(having)」、「含む(contains)」、「含む(containing)」またはそれらの任意の他の変形の用語は、排他的な包含であることを意図している。例えば、要素のリストからなる組成物、混合物、プロセス、方法、物品、または装置は、必ずしもそれらの要素のみに限定されるわけではなく、そのような組成物、混合物、プロセス、方法、物品、または装置に明示的にリストされていない他の要素を含むことができる。
さらに、「例示的」という用語は、本明細書では「例、実例、または例示として機能すること」を意味するために使用される。本明細書で「例示的」として説明される任意の実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいまたは有利であると解釈されるべきではない。「少なくとも1つ」および「1つ以上」という用語は、1以上、すなわち1、2、3、4などの任意の整数を含むと理解される。「複数」という用語は、2以上、つまり2、3、4、5などの任意の整数を含むと理解される。「接続」という用語には、間接的な「接続」と直接的な「接続」の両方を含めることができる。
「約」、「実質的に」、「概算」という用語、およびそれらの変形は、出願時に利用可能な機器に基づく特定の量の測定に関連する誤差の程度を含むことを意図している。例えば、「約」には、特定の値の±8%、5%、または2%の範囲を含めることができる。
本発明は、任意の可能な技術詳細レベルで統合されたシステム、方法もしくはコンピュータプログラム製品またはそれらの組み合せとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでよい。
コンピュータ可読記憶媒体は、命令実行装置によって使用される命令を保持し、記憶することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、一例として、電子記憶装置、磁気記憶装置、光学記憶装置、電磁記憶装置、半導体記憶装置またはこれらの適切な組み合わせであってよい。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、EPROM(またはフラッシュメモリ)、SRAM、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化された装置、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶装置は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピュータ装置/処理装置へダウンロード可能である。あるいは、ネットワーク(例えばインターネット、LAN、WANもしくはワイヤレスネットワークまたはこれらの組み合わせ)を介して、外部コンピュータまたは外部記憶装置へダウンロード可能である。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータもしくはエッジサーバまたはこれらの組み合わせを備えることができる。各コンピュータ装置/処理装置内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、各々のコンピュータ装置/処理装置におけるコンピュータ可読記憶媒体に記憶するために転送する。
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用構成データ、または、スモールトークやC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードもしくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、スタンドアロン型ソフトウェアパッケージとして完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または、完全にリモートコンピュータもしくはサーバ上で実行可能である。後者の場合、リモートコンピュータは、LANやWANを含む任意の種類のネットワークを介してユーザのコンピュータに接続してもよいし、外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)接続してもよい。いくつかの実施形態において、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行する目的で当該電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
本発明の各態様は、本明細書において、本発明の実施形態に係る方法、装置(システム)、およびコンピュータプログラム製品のフローチャートもしくはブロック図またはその両方を参照して説明されている。フローチャートもしくはブロック図またはその両方における各ブロック、および、フローチャートもしくはブロック図またはその両方における複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実行可能である。
上記のコンピュータ可読プログラム命令は、機械を生産するために、汎用コンピュータ、専用コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供してよい。これにより、かかるコンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行するための手段を創出する。上記のコンピュータ可読プログラム命令はさらに、コンピュータ、プログラマブルデータ処理装置もしくは他の装置またはこれらの組み合わせに対して特定の態様で機能するよう命令可能なコンピュータ可読記憶媒体に記憶してよい。これにより、命令が記憶された当該コンピュータ可読記憶媒体は、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作の態様を実行するための命令を含む製品を構成する。
また、コンピュータ可読プログラム命令を、コンピュータ、他のプログラマブル装置、または他の装置にロードし、一連の動作ステップを当該コンピュータ、他のプログラマブル装置、または他の装置上で実行させることにより、コンピュータ実行プロセスを生成してもよい。これにより、当該コンピュータ、他のプログラマブル装置、または他の装置上で実行される命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行する。
本開示の図面におけるフローチャートおよびブロック図は、本発明の種々の実施形態に係るシステム、方法およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実行するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表すことができる。他の一部の実装形態において、ブロック内に示した機能は、各図に示す順序とは異なる順序で実行してもよい。例えば、連続して示される2つのブロックは、実際には、関係する機能に応じて、同時もしくは略同時に実行してもよいし、場合により逆順で実行してもよい。なお、ブロック図もしくはフローチャートまたはその両方における各ブロック、および、ブロック図もしくはフローチャートまたはその両方における複数のブロックの組み合わせは、特定の機能または動作を行う、または専用ハードウェアとコンピュータ命令との組み合わせを実行する専用ハードウェアベースのシステムによって、実行可能である。
本発明の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であることを意図するものではなく、開示される実施形態に限定されることを意図するものでもない。説明された実施形態の範囲および精神から逸脱することなく、多くの修正および変更が可能であることは当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、市場で見られる技術に対する実際の適用または技術的改善を最もよく説明するため、または当業者が本明細書に記載の実施形態を理解できるようにするために選択された。