JP2023546907A - クラスタリング可能なサービスの自動クラスタリングのためのシステムおよび方法 - Google Patents

クラスタリング可能なサービスの自動クラスタリングのためのシステムおよび方法 Download PDF

Info

Publication number
JP2023546907A
JP2023546907A JP2023523663A JP2023523663A JP2023546907A JP 2023546907 A JP2023546907 A JP 2023546907A JP 2023523663 A JP2023523663 A JP 2023523663A JP 2023523663 A JP2023523663 A JP 2023523663A JP 2023546907 A JP2023546907 A JP 2023546907A
Authority
JP
Japan
Prior art keywords
cluster
rules
services
service
controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023523663A
Other languages
English (en)
Other versions
JPWO2022086996A5 (ja
Inventor
ジョン シュミット パーカー
マイケル リチャードソン ショーン
ベンジャミン セメル ニール
タイラー スプライ キャメロン
オウサー アリアナ
キャマック ケビン
アリ アレック
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Net-Thunder LLC
Original Assignee
Net-Thunder LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Net-Thunder LLC filed Critical Net-Thunder LLC
Publication of JP2023546907A publication Critical patent/JP2023546907A/ja
Publication of JPWO2022086996A5 publication Critical patent/JPWO2022086996A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

システムは、クラスタリング可能なサービスのクラスタを自動的にデプロイするように構成することができる。例えば、コントローラは、アプリケーションの複数のコピーをデプロイすることができ、これらのアプリケーションは、互いに依存し合うことができる。また、コントローラは、これらのアプリケーションを管理する(ロードバランシングを含む)スケジューラを構成することができる。コントローラで使用されるサービステンプレートには、クラスタリングルールを含めることができ、これらのクラスタリングルールは、コントローラに対して、これらのサービスの接続方法を指示することができます。クラスタリングルールは、複数のリソースへのサービスのデプロイを提供するロジック命令および/または一連のテンプレートであり得る。クラスタリングルールの結合命令は、別々に予約された物理および/または仮想リソースの調整および相互作用を定義し、依存関係を設定する。クラスタリングルールは、サービスによって使用されるリソースをスケールアップまたはスケールダウンするための情報の使用を定義する。

Description

関連特許出願への相互参照と優先権の請求:
本特許出願は、2020年10月19日に出願され、「クラスタリング可能なサービスの自動クラスタリングのためのシステムおよび方法」と題された米国仮特許出願63/093,691の優先権を請求しており、その開示全体は参照として本書に組み込まれる。
はじめに:
コンピュータユーザー、特に企業によって生成され、消費されるデータの量が増加し続ける中、ハイパフォーマンス・コンピューティング(HPC)システムの幅広い展開に技術的なニーズがある。HPCの魅力は、並列化による計算収束の低減だけでなく、巨大なデータ記憶帯域幅へのアクセス、CPUやグラフィックプロセッサユニット(GPU)などのコンピュートハードウェアを異なるタスク用にスケジュールする能力、人工知能(AI)/機械学習(ML)コンポーネントとの統合、計算ハードウェアリソースの効率的管理にもある。さらに、HPCを利用したコンピュータ工学支援システム/電子設計自動化(EDA)とAIの融合も進んでおり、シミュレーションによって生成された膨大なデータをAIモデルに再帰的に送り込み、光ネット、ロジックの配備、プロセスの調節を解析して特定する。このEDAとAI/MLの統合により、製品開発が加速して品質を向上させるが、安定でシンプルかつ複雑なハードウェア環境でも光学性能を発揮するランタイム環境が必要となる。
HPCは従来、低レイテンシー、高スループット、大規模並列処理、大規模分散システムを特徴としてきた。数百万ドルの計算機予算を持つ従来の科学的ユーザーにとって、情報技術(IT)や専門家によるソフトウェア開発のコストは、計算時間のコストのほんの数パーセントに過ぎないこともあり、セットアップの容易さと使いやすさがシステムに十分に備わっていないことを意味する。その結果、従来のHPCは使いにくく、運用のための人材費用が高額になる。
しかし、HPCの広い普及は多くの企業にとって課題となっている。なぜなら、モノリシックなワークステーションベースや特注のコンピューティングベースのプラットフォームからHPCプラットフォームへの移行は、非自明なタスクだからである。つまり、限られたIT予算と平均的なIT管理能力を持つ専門家ではないユーザーがHPCアプリケーションにアクセスできるようにすることは技術的に難しい。
これらの技術的課題の解決策として、本発明者らはクラスタリング可能なサービスのクラスタのデプロイを自動化する技術を開示する。システムがサービスを「クラスタ化」すると言えるのは、そのサービスの複数のインスタンスを実行し、複数のインスタンスが連携して動作し、互いに命令を受け渡しできる場合である。例えば、データマイニングのアプリケーションを実行する20台のサーバを含むシステムを考えてみる。これらのサーバはそれぞれ相互に作用する必要があり、これらの相互作用をスケジュールするためのリソースが必要である。クラスタ化されたサービスのこの調整は、特に(仮想化ではなく)ベアメタル上でサービスを実行しているシステムにとって困難な技術的課題となる可能性がある。クラスタ化されたサービスのベアメタルデプロイは、顧客のコプロセッサまたはGPU上で実行されるサービスにとって有利である。ここで使用する「インスタンス」という用語は、リソース上にデプロイされたサービスを指し、リソースには物理、仮想、またはコンテナリソースが含まれるが、これらに限定されていない。クラスタは、そのクラスタに属する複数のインスタンスを持つことができる。
これらの技術は、HPCアプリケーションをデスクトップから超並列環境を持つコンピュータシステムにシームレスにスケーリングするためのツールとして使用でき、これにはGPUクラスタやGPUをサポートする混合ハードウェアにわたるデプロイが含まれる場合がある。例示的な実施形態において、U.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088の中で本発明者らにより記載されたコンピュータシステムは、これらの開示全体が参照により本明細書に組み込まれており、クラスタ管理サービスを含めて拡張させ、HPCにおけるクラスタリング可能なアプリケーションの商業的に実行可能な自動構成のための経路を提供することができる。
このような例示的な実施形態を通じて、クラスタを採用するコンピュータシステムは、サービスとしての高性能コンピューティング(HPCaaS)を提供するために使用することができる。HPCaasは、クラウドコンピューティングとHPCのハイブリッドであり、手頃なコストと、比較的少ないコンピュータ時間で、多くのユーザーがHPCにアクセスできるようにする。従来のHPCシステムでは、一度に1つのアプリケーションを利用することが多かったが、HPCaaSでは、リソースプールとしてクラスタ化されたサービスやストレージを利用する機能、ユーザーがジョブ要求を提出するためのWebインターフェース、全体としての最大の生産性を得るために異なるアプリケーション特性を考慮して特定のクラスタで複数の異なるアプリケーションを同時にスケジュールできるスマートスケジューリングを利用することができる。
本発明の例示的な実施形態のこれらおよび他の特徴や利点は、以下において詳細に説明される。
図1は、実施形態例によるシステムの略図である。 図2は、図1のシステムのコントローラの一例を示す略図である。 図3は、クラスタ化されたネットワークにサービスインスタンスをデプロイした例である。 図4は、クラスタ化されたネットワークにサービスインスタンスをデプロイした例である。 図5は、クラスタにコンピュートリソースを追加するためのプロセスフローの例を示す。 図6は、クラスタツールがクラスタの要求を管理する場合の例である。 図7は、クラスタの依存関係を満たすために、コントローラが依存関係を管理/計算する例を示す。 図8は、スマートクラスタリング可能なネットワークとストレージエリアネットワーク(SAN)を備えた、クラスタにおけるサービスインスタンスの別のデプロイ例を示す。 図9は、クラスタリングルールの例を示す。 図10は、相互に依存する2つのクラスタ化されたサービスが、共有ストレージで結合されている例である。 図11は、クラスタをサービスとしてデプロイする例である。 図12は、システム起動時の処理フロー例である。 図13は、エンドポイントを呼び出すためのさまざまな方法の例である。 図14は、エンドポイントを呼び出すためのさまざまな方法の例である。 図15は、コントローラによってデプロイされるクラスタを示す図である。 図16Aは、コンピュータリソースを追加してクラスタを成長させる例を示している。 図16Bは、コンピュータリソースを追加してクラスタを成長させる例を示している。 図17Aは、新しいクラスタを作成するためのプロセスフローの例を示す図である。 図17Bは、クラスタを成長させるか、ノード/リソースを追加するためのプロセスフローの例を示す図である。 図18Aは、様々なクラスタ操作のための例示的なプロセスフローを示す。 図18Bは、様々なクラスタ操作のための例示的なプロセスフローを示す。
実施形態の例の詳細な説明:
図1は、本明細書に記載のクラスタリング技術の実施に関連して使用することができる例示的なコンピュータシステム100を示す。
システムコンポーネント例:
ユーザーインターフェース(UI)110が、アプリケーションプログラムインターフェース(API)アプリケーション120を介してコントローラ200に結合されているのが示されている。API120は、スタンドアローンの物理サーバまたは仮想サーバに存在することができるが、その必要はない。API120は、1つまたは複数のAPIアプリケーションで構成されることがあり、これらは冗長であること、および/または並行して動作することがある。API120は、システムリソースを構成する要求を受け取り、要求を解析して、コントローラ200に渡す。API120は、コントローラ200から1つまたは複数の応答を受け取り応答を解析し、UI(またはアプリケーション)110にそれらを渡す。代替的または追加的に、アプリケーションまたはサービスはAPI 120と通信することができる。
コントローラ200は、本明細書で議論される制御操作のいずれかを実施するために、1つまたは複数のプロセッサおよび1つまたは複数のメモリにデプロイすることができる。そのような制御操作を実行するためのプロセッサ(複数可)による実行のための命令は、プロセッサメモリなどの非一過性のコンピュータプログラムを記録した記録媒体に常駐させることができる。コントローラ200は、1つまたは複数の計算リソース300、ストレージリソース400およびネットワークリソース500に結合される。したがって、システムは、コントローラ200がシステム100内で設定および制御することができる複数の計算リソース300、複数のストレージリソース400、および/または複数のネットワークリソース500のプールを含むことができる。リソース300、400、500は、単一のノード上に存在してもよいが、システム100内の複数のノードに存在し得るので、そうである必要はない(または複数のノードに様々な組み合わせで存在してもよい)。また、リソース300、400、500のうちの1つ以上は仮想であってもよい。物理デバイスは、計算リソース300、ストレージリソース400、およびネットワークリソース500を含むが、これらに限定されないリソースタイプの1つまたは複数のうちのそれぞれを構成し得る。上述のように、リソース300、400、500は、異なる物理的な場所にあるかどうか、仮想であるかどうかにかかわらず、そのようなリソースのプールを構成することができる。ベアメタルのコンピュートリソースは、仮想またはコンテナのコンピュートリソースの使用を有効にするために使用されることもある。
ノードの既知の定義に加えて、本明細書で使用するノードは、ネットワーク(複数可)に接続された任意のシステム、デバイスまたはリソース、またはスタンドアローンまたはネットワーク接続デバイスで機能を実行する他の機能ユニットであり得る。また、ノードは、例えば、サーバ、物理または仮想ホスト上のサービス/アプリケーション/複数のサービス、仮想サーバ、および/またはマルチテナントサーバ上の複数または単一のサービス、またはコンテナ内で実行されるサービスを含むことができるが、これらに限定されない。
コントローラ200がデプロイされる1つまたは複数のプロセッサは、1つまたは複数の物理または仮想コントローラサーバの形態をとることができ、これらはまた、冗長化および/または並列に動作することができる。コントローラ200は、コンピュートホストとして機能している物理的または仮想的なホスト上で動作してもよい。一例として、コントローラ200は、例えば、機密リソースへのアクセスを有するために他の目的を果たすホスト上で実行されるコントローラを構成することができる。コントローラ200は、API120からリクエストを受け取り、リクエストを解析し、他のリソースに対して適切なタスキングを行い、指示し、リソースを監視し、リソースから情報を受け取り、システムの状態および変更の履歴を維持し、システム100に存在し得る他のコントローラと通信してもよい。コントローラ200は、API120を含むこともできる。
本明細書で定義されるコンピュートリソース300は、単一のコンピュートノード、または現実もしくは仮想の1つもしくは複数のコンピュートノードを有するリソースプールを構成することができる。計算リソース300は、1つまたは複数のサービスをホストし、または1つまたは複数のアプリケーションを実行し得る、1つまたは複数の物理的または仮想的なマシンまたはコンテナホストを含んでいてもよい。計算リソース300はまた、コンピューティング、ストレージ、キャッシング、ネットワーク、および/または特殊コンピューティングを含むが、これらに限定されない複数の目的のために設計されたハードウェア上にあってもよく、このようなハードウェアには、GPU、ASIC、コプロセッサ、CPU、FPGA、および他の特殊コンピューティングハードウェアがあるがこれらに限定されるわけではない。そのようなデバイスは、PCIエクスプレススイッチまたは同様のデバイスで追加されてもよく、そのような方法で動的に追加されてもよい。コンピュートリソース300は、サービスまたはアプリケーションを実行する複数の異なる仮想マシンを含む1つまたは複数のハイパーバイザーまたはコンテナホストから構成されてもよいし、仮想コンピュートリソースになり得るコンテナホストを実行してもよい。コンピュートリソースの重点はコンピュート機能を提供することにあるかもしれないが、データストレージおよび/またはネットワーク機能を含んでいてもよい。
本明細書で定義されるストレージリソース400は、ストレージノードまたはプールもしくはストレージノードを構成することができる。ストレージリソース400は、任意のデータ記憶媒体、例えば、高速、低速、ハイブリッド、キャッシュおよび/またはRAMから構成されてもよい。ストレージリソース400は、1つまたは複数のタイプのネットワーク、マシン、デバイス、ノード、またはそれらの任意の組み合わせから構成されてもよく、それらは他のストレージリソースに直接接続されてもされなくてもよい。例示的な実施形態の側面によれば、ストレージリソース(複数可)400は、ベアメタルまたは仮想またはそれらの組合せであってもよい。ストレージリソースは、ストレージ機能を提供することに重点を置いているかもしれないが、計算機能および/またはネットワーク機能を含んでいることもある。
ネットワークリソース(複数可)500は、単一のネットワークリソース、複数のネットワークリソース、またはネットワークリソースのプールを構成することができる。ネットワークリソース(複数可)500は、物理的または仮想的なデバイス(複数可)、ツール(複数可)、スイッチ、ルータ、またはシステムリソース間の他の相互接続、またはネットワークを管理するためのアプリケーションから構成されてもよい。そのようなシステムリソースは、物理的または仮想的であってよく、コンピューティング、ストレージ、または他のネットワークリソースを含むことができる。ネットワークリソース500は、外部ネットワークとアプリケーションネットワークとの間の接続を提供し、ドメインネームシステム(DNSまたはdns)、ダイナミックホスト構成プロトコル(DHCP)、サブネット管理、レイヤ3ルーティング、ネットワークアドレス変換(NAT)、および他のサービスを含むが、これに限定されないコアネットワークサービスをホストしてもよい。これらのサービスの一部は、物理または仮想マシン上の計算リソース300、ストレージリソース400、またはネットワークリソース500にデプロイされることがある。ネットワークリソース500は、InfiniBand、イーサネット、RoCE(コンバージド・イーサーネット上のリモートDMA)、ファイバーチャネルおよび/またはOmnipathを含むが、これらに限定されない1つまたは複数のファブリックまたはプロトコルを利用し、複数のファブリック間の相互接続を含むことができる。ネットワークリソース500は、ソフトウェア定義ネットワーク(SDN)が可能であり得るが、そうである必要はない。コントローラ200は、SDN、仮想ローカルエリアネットワーク(VLAN)などを使用して、ネットワークリソース500を直接変更したり、ITシステムなどのコンピュータシステムのトポロジーを構成できる可能性がある。ネットワークリソースの重点は、ネットワーク機能を提供することにあるかもしれないが、それはまた、コンピュートおよび/またはストレージ機能を構成することができる。
本明細書で使用するアプリケーションネットワークとは、アプリケーション、リソース、サービス、および/または他のネットワークを接続または結合する、あるいはユーザーおよび/またはクライアントをアプリケーション、リソース、および/またはサービスに結合するためのネットワークリソース500、またはネットワークリソース500の任意の組合せのことである。アプリケーションネットワークは、サーバが他のアプリケーションサーバ(物理または仮想)と通信するため、およびクライアントと通信するために使用されるネットワークを構成することができる。アプリケーションネットワークは、システム100の外部のマシンまたはネットワークと通信することができる。例えば、アプリケーションネットワークは、Webフロントエンドをデータベースに接続することができる。ユーザーは、インターネットまたはコントローラ200によって管理されていてもいなくてもよい別のネットワークを通じて、Webアプリケーションに接続することができる。
例示的な実施形態によれば、コンピュート、ストレージ、およびネットワークリソース300、400、500はそれぞれ、コントローラ200によって自動的に追加、削除、設定、割り当て、再割り当て、構成、再構成、および/またはデプロイすることができる。例示的な実施形態によれば、追加のリソースがリソースプールに追加されることがある。そのようなリソースを追加、削除、セットアップ、割り当て、再割り当て、構成、再設定、およびデプロイするための技術の例は、上記参照され組み込まれたU.S. Pat. App.Pub. 2019/0334909およびWIPO Pub. WO2020/252088により詳細に記載されている。
図1は、ユーザー105が、ユーザーインターフェース110を介してシステム100にアクセスし、相互作用することができることを示している。図1はまた、アプリケーション(app)がシステム100にアクセスし、または代替的にアクセスし、相互作用し得ることを示している。例えば、ユーザー105またはアプリケーションは、API120を介してコントローラ200に要求を送信することができ、このような要求には、ITシステムを構築する要求、ITシステム内の個々のスタックを構築する要求、サービスまたはアプリケーションを作成する要求、サービスまたはアプリケーションを移行する要求、サービスまたはアプリケーションを変更する要求、サービスまたはアプリケーションを削除する要求、異なるネットワーク上の別のスタックにスタックを複製する要求、リソースまたはシステムコンポーネントを作成、追加、削除、セットアップ、構成、および/または再構成する要求があるが、それのみに限らない。これらのような要求を実行するための技術の例は、上記参照され組み込まれたU.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088に記載されている。
図1のシステム100は、物理的または仮想的またはそれらの任意の組み合わせのいずれかであり得る様々な要素、コンポーネントまたはリソースへの接続または他の通信インターフェースを有するサーバから構成されてもよい。変形例によれば、図1に示されるシステム100は、接続を有するベアメタルサーバから構成されてもよい。
上記で参照され、組み込まれたU.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088に詳細が記載されているように、コントローラ200は、リソースまたはコンポーネントの電源をオンにすること、リソースの起動を自動的に設定、構成、および/または制御すること、リソースを追加すること、リソースを割り当てること、リソースを管理すること、および/または利用可能なリソースを更新することに構成される場合がある。パワーアッププロセスは、起動されるデバイスの順序が一貫しており、ユーザーがデバイスに電源を入れることに依存しないようにコントローラ200に電源を入れることから始まる場合がある。このプロセスは、起動されたリソースの検出を含むこともある。
図2は、システム100内のコントローラ200の追加の態様を示し、コントローラ200は、コントローラロジック205、グローバルシステムルール210、システム状態220、およびテンプレート230を含む。
グローバルシステムルール210は、とりわけ、計算リソース300、ストレージリソース400、およびネットワークリソース500を含み得るリソースを設定、構成、起動、割り当て、および管理するルールを宣言し得る。グローバルシステムルール210は、システム100が正しい状態または所望の状態にあるための最小要件を構成する。それらの要件は、完了することが期待されるタスクと、所望のシステムを予測可能に構築するために必要な期待されるハードウェアの更新可能なリストからなる場合がある。予想されるハードウェアの更新可能なリストは、コントローラ200が、必要なリソース(例えば、ルールを開始する前またはテンプレートを使用する前)が利用可能であることを検証することを可能にする場合がある。グローバルシステムルール210は、様々なタスクに必要な操作のリストと、操作およびタスクの順序付けに関連する対応する命令とから構成されてもよい。例えば、ルール210はコンポーネントの電源をオンにする順序、リソース、アプリケーションおよびサービスを起動する順序、依存関係、異なるタスクをいつ開始するか、例えば、アプリケーションを構成、開始、再ロード、またはハードウェアを更新するロードを指定することができる。ルール210はまた、以下のうちの1つまたは複数を含むことができる:リソース割り当てのリスト、例えば、アプリケーションおよびサービスに必要なリソース割り当てのリスト、使用可能なテンプレートのリスト、ロードされるべきアプリケーションのリストおよび構成方法、ロードされるべきサービスのリストおよび構成方法、アプリケーションネットワークのリストおよびどのアプリケーションがどのネットワークと連携するか、異なるアプリケーションに固有の構成変数のリストおよびユーザー固有のアプリケーション変数、コントローラ200がシステム状態220をチェックして状態が期待通りであり各命令の結果が期待通りであるかを検証できると期待される状態、および/またはルールに対する変更のリストを含むバージョンリスト、(例:スナップショットなど)であり、ルールへの変更の追跡、および異なる状況において異なるルールをテストまたは元に戻す能力を可能にすることができる場合がある。コントローラ200は、物理リソース、仮想リソース、または物理リソースと仮想リソースの組み合わせで、グローバルシステムルール210をシステム100に適用するように設定することが可能である。システム100によって使用可能なグローバルシステムルール210に関する追加情報および例は、上記参照され組み込まれたU.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088に記載されている。
テンプレート230は、テンプレート230のライブラリを構成することが可能で、かかるテンプレート230は、ベアメタルテンプレートおよび/またはサービステンプレートを含んでもよい。テンプレート230は、リソース、アプリケーション、またはサービスとの関連付けを有することができ、そのようなリソース、アプリケーション、またはサービスがシステム100に統合される方法を定義するレシピとして機能することができる。
このように、テンプレート230は、リソース、またはリソースにロードされたアプリケーションもしくはサービスを作成、構成、および/またはデプロイするために使用される確立された一連の情報を含むことができる。このような情報には以下のものが含まれるが、これらに限定されない:カーネル、initrdファイル、ファイルシステムまたはファイルシステムイメージ、ファイル、構成ファイル、構成ファイルテンプレート、異なるハードウェアおよび/または計算バックエンドの適切なセットアップを決定するために使用される情報、および/またはアプリケーションの作成、ブートまたは実行を可能にし、かつ/または容易にするアプリケーションおよびOSイメージを動かすためのリソースを構成するための他の利用できるオプションがある。
テンプレート230は、複数の物理サーバタイプまたはコンポーネント、複数のハードウェアタイプ上で動作する複数のハイパーバイザー、複数のハードウェアタイプ上でホストされ得るコンテナホストを含むがこれに限定されない、サポートされる複数のハードウェアタイプ/および/または計算バックエンド上でアプリケーションをデプロイするために使用され得る情報を含み得る。
テンプレート230は、コンピューティングリソース300上で実行されるアプリケーションまたはサービスのためのブートイメージを導出してもよい。テンプレート230およびテンプレート230から導出されたイメージは、アプリケーションの作成を可能にし、および/または容易にするアプリケーションまたはサービスのデプロイ、および/または様々なシステム機能のためのリソースのデプロイに使用されてもよい。テンプレート230は、デフォルト設定またはコントローラ200から与えられる設定のいずれかからの構成オプションで上書きされ得る、ファイル、ファイルシステム、および/またはオペレーティングシステムイメージの可変パラメータを有する場合がある。テンプレート230は、アプリケーションまたは他のリソースを構成するために使用される構成スクリプトを有することができ、構成変数、構成ルール、および/またはデフォルトルールまたは変数を利用することができる。これらのスクリプト、変数、および/またはルールは、特定のハードウェアまたは他のリソース固有のパラメータ、例えばハイパーバイザー(仮想時)、利用可能なメモリに対する特定のルール、スクリプト、または変数を含む場合がある。テンプレート230は、バイナリリソース、バイナリリソースまたはハードウェアまたは他のリソース固有のパラメータをもたらすコンパイル可能なソースコード、特定のハードウェアまたは他のリソース固有のパラメータ、例えばハイパーバイザー(仮想時)、利用可能なメモリに対するコンパイル命令を有するバイナリリソースまたはソースコードの特定のセットの形態のファイルを有することができる。テンプレート230は、リソース上で実行されるものとは独立した一連の情報を構成することができる。
テンプレート230は、ベースイメージから構成されてもよい。ベースイメージは、ベースオペレーティングシステムのファイルシステムから構成されてもよい。ベースオペレーティングシステムは、読み取り専用であってもよい。ベースイメージはまた、実行されているものに依存しないオペレーティングシステムの基本的なツールから構成されてもよい。ベースイメージは、ベースディレクトリとオペレーティングシステムツールとを含むことができる。
テンプレート230は、カーネルを含んでいてもよい。カーネルまたは複数のカーネルは、異なるハードウェアタイプおよびリソースタイプのために構成されたinitrdまたは複数のカーネルを含んでもよい。イメージは、テンプレート230から導出され、1つまたは複数のリソースにロードされるか、またはデプロイされる場合がある。取り込まれたイメージは、対応するテンプレート230のカーネルまたはinitrdのようなブートファイルも含んでよい。
イメージは、テンプレート230に基づいてリソースに取り込まれ得るテンプレートファイルシステム情報を含んでいてもよい。テンプレートファイルシステムは、アプリケーションまたはサービスを構成することができる。テンプレートファイルシステムは、例えば、ファイルシステムが格納されるストレージスペースを節約するため、または読み取り専用ファイルの使用を容易にするために、すべてのリソースまたは同様のリソースに共通する共有ファイルシステムを構成することができる。テンプレートファイルシステムまたはイメージは、デプロイされるサービスに共通する一連のファイルから構成される場合がある。テンプレートファイルシステムは、コントローラにあらかじめ取り込まれるか、またはダウンロードされることがある。テンプレートファイルシステムは、更新される場合がある。テンプレートファイルシステムは、再構築を必要としないため、比較的迅速なデプロイを可能にする可能性がある。ファイルシステムを他のリソースやアプリケーションと共有することで、ファイルが不必要に複製されないため、ストレージを削減できる場合がある。また、テンプレートファイルシステムと異なるファイルのみを復元する必要があるため、障害からの復旧が容易になる可能性がある。
テンプレートブートファイルは、ブートプロセスを支援するために使用されるカーネルおよび/またはinitrdまたは同様のファイルシステムから構成されることがある。ブートファイルは、オペレーティングシステムを起動し、テンプレートファイルシステムをセットアップすることができる。initrdは、テンプレート230がブートできるようにセットアップする方法に関する指示を含む小さな一時ファイルシステムからなる場合がある。
テンプレート230は、テンプレートBIOS設定をさらに含んでいてもよい。テンプレートBIOS設定は、物理ホスト上でアプリケーションを実行するためのオプション設定を設定するために使用される場合がある。使用される場合、アウトオブバンド管理ネットワーク260は、リソースまたはアプリケーションを起動するために使用され得る。物理ホストは、アウトオブバンド管理ネットワーク260またはCDROMを使用してリソースまたはアプリケーションを起動してもよい。コントローラ200は、そのようなテンプレート230で定義されたアプリケーション固有のBIOS設定を設定してもよい。コントローラ200は、アウトオブバンド管理ネットワーク260を使用して、特定のリソースに固有のAPIを介して、直接バイオの変更を行うことができる。設定は、コンソールおよび画像認識を通じて検証されてもよい。したがって、コントローラ200はコンソール機能を使用し、仮想キーボードおよびマウスでバイオス変更を行うことができる。また、コントローラ200はUEFIシェルを使用し、コンソールに直接入力してもよく、画像認識を使用して成功した結果を検証し、コマンドを正しく入力し、成功した設定変更を確認してもよい。BIOSの変更または特定のBIOSバージョンへの更新のために利用可能なブート可能なオペレーティングシステムがある場合、コントローラ200は、ディスクイメージまたはISOブートのオペレーティングシステムをリモートでロードし、BIOSを更新し、信頼できる方法で設定の変更を可能にするアプリケーションを実行してもよい。
テンプレート230は、テンプレート固有のサポートされるリソースのリスト、または特定のアプリケーションまたはサービスの実行に必要なリソースのリストをさらに含むことができる。
テンプレートイメージまたはイメージの一部もしくはテンプレート230は、コントローラ200に格納されてもよいし、コントローラ200がストレージリソース400に移動またはコピーしてもよい。
システム100によって使用され得るテンプレート230に関する追加情報および例は、上記に参照され組み込まれたU.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088に記載されている。
システム状態220は、コンピュートリソース300、ストレージリソース400、およびネットワークリソース500などのリソースを含むが、これらに限定されないシステム100の状態を追跡、維持、変更および更新する。システム状態220は、データベースの形態を用いて利用可能なリソースを追跡することができ、これは、ルール210およびテンプレート230の実装のために利用可能なリソースがあるかどうか、およびどのようなリソースがあるかをコントローラロジック205に伝える。システム状態220は使用済みのリソースの追跡を行い、コントローラロジック205が効率を調べる、効率を利用する、アップグレードまたは他の理由のために切り替える必要があるかどうか、効率を改善するためまたは優先順位のために切り替えが可能になる。システム状態220は、どのようなアプリケーションが実行されているかを追跡してもよい。コントローラロジック205は、システム状態220に従って、実行中の予想されるアプリケーションと実行中の実際のアプリケーションとを比較し、修正する必要性があるかどうかを判断してもよい。システム状態220は、アプリケーションが実行されている場所を追跡することもできる。コントローラロジック205は、効率性の評価、変更管理、更新、トラブルシューティング、または監査証跡を目的として、この情報を使用することができる。システム状態220は、ネットワーク情報、例えば、どのネットワークがオンであるか、または現在実行されているか、または構成値および履歴を追跡してもよい。システム状態220は、変更の履歴を追跡してもよい。また、システム状態220は、どのテンプレート230が使用されるかを規定するグローバルシステムルール210に基づいて、どのテンプレート230がどのデプロイで使用されるかを追跡することができる。履歴は、監査、警告、管理変更、レポートの構築、ハードウェアおよびアプリケーションと構成に相関するバージョンの追跡、または構成変数に使用されてもよい。システム状態220は、監査、コンプライアンステスト、またはトラブルシューティングを目的として、構成の履歴を維持することができる。
システム100によって使用され得るシステム状態220に関する追加情報および例は、上記に参照され組み込まれたU.S. Pat. App. Pub. 2019/0334909およびWIPO Pub. WO 2020/252088に記載されている。
コントローラ200は、システム状態220、テンプレート230、およびグローバルシステムルール210に含まれるすべての情報を管理するためのコントローラロジック205を含む。コントローラロジック205(アプリケーションの形態をとることができる)、グローバルシステムルール210、システム状態220、およびテンプレート230はコントローラ200によって管理され、コントローラ200に常駐することも、常駐しないことも可能である。コントローラロジック205、グローバルシステムルール210、システム状態220、およびテンプレート230は、物理的または仮想的であってもよい。そしてそれらは、分散サービス、分散データベース、および/またはファイルであってもよいが、そうである必要はない。API120は、コントローラロジック205に含まれていてもよい。
コントローラ200は、スタンドアローンマシンを実行してもよく、および/または1つ以上のコントローラから構成されてもよい。コントローラ200は、コントローラサービスまたはアプリケーションを構成してもよく、別のマシン内で実行してもよい。コントローラマシンは、スタック全体またはスタック群の秩序あるおよび/または一貫した起動を保証するために、コントローラサービスを最初に起動してもよい。
コントローラ200は、計算、ストレージ、およびネットワークリソース300、400、500を有する1つまたは複数のスタックを制御することができる。各スタックは、グローバルシステムルール210内のルールの異なるサブセットによって制御されてもよいし、制御されなくてもよい。例えば、システム内に異なる機能を有する試作品、製品、開発、テストスタック、パラレル、バックアップ、および/または他のスタックが存在する場合がある。
コントローラロジック205は、所望のシステム状態を実現するために、グローバルシステムルール210を読み取り、解釈するように構成される場合がある。コントローラロジック205は、グローバルルール210に従ってテンプレート230を使用して、アプリケーションまたはサービスなどのシステムコンポーネントを構築し、リソースを割り当て、追加、または削除して、システム100の所望の状態を達成するように構成される場合がある。コントローラロジック205は、グローバルシステムルール210を読み取って、正しい状態にするためのタスクのリストを作成し、利用可能なオペレーションに基づいてルールを満たすための命令を発行してもよい。コントローラロジック205は、操作(例えば、システムの起動、リソースの追加、削除、再構成)を実行するためのロジックを含むことができ、何が実行可能であるかを特定する。コントローラロジック205は、起動時および定期的にシステム状態220をチェックして、ハードウェアが利用可能かどうかを確認し、利用可能であればタスクを実行することができる。必要なハードウェアが利用できない場合、コントローラロジック205はグローバルシステムルール210、テンプレート230、およびシステム状態220から利用可能なハードウェアを使用して代替オプションを提示し、それに応じてグローバルルール210および/またはシステム状態220を修正する。
コントローラロジック205は、どの変数が必要であるか、ユーザーが続行するために何を入力する必要があるか、またはユーザーがシステム100を機能させるために何を必要とするかを知ることができる。コントローラロジック205は、グローバルシステムルール210からのテンプレート230のリストを使用し、システム状態220で必要なテンプレートと比較して、必要なテンプレートが利用可能であることを確認することができる。コントローラロジック205は、システム状態220から、テンプレート固有のサポートされるリソースのリスト上のリソースが利用可能であるかどうかを特定してもよい。コントローラロジック205は、リソースを割り当て、状態220を更新し、グローバルルール210を実装するための次の一連のタスクに進むことができる。コントローラロジック205は、グローバルルール210で指定されたように、割り当てられたリソース上でアプリケーションを開始/実行することができる。ルール210は、テンプレート230からアプリケーションを構築する方法を指定することができる。コントローラロジック205は、テンプレート(複数可)230を取得し、変数からアプリケーションを構成することができる。テンプレート230はコントローラロジック205に、どのカーネル、ブートファイル、ファイルシステム、およびサポートされるハードウェアリソースが必要かを伝えることができる。次に、コントローラロジック205は、アプリケーションのデプロイに関する情報をシステム状態220に追加することができる。各命令の後、コントローラロジック205はシステム状態220とグローバルルール210の予想状態を比較して、予想される操作が正しく完了したかどうかを検証することができる。
コントローラロジック205は、バージョンルールにしたがってバージョンを使用することができる。システム状態220は、どのルールバージョンが異なるデプロイで使用されたかに関連するデータベースを有することができる。
コントローラロジック205は、最適化および効率的な順序を規定する効率的なロジックを含んでもよい。コントローラロジック205は、リソースを最適化するように構成される場合がある。実行中または実行が予想されるアプリケーションに関連するシステム状態220、ルール210、およびテンプレート230の情報を、コントローラロジック205が使用して、リソースに関する効率または優先順位を実施することができる。コントローラロジック205は、システム状態220の「使用済みリソース」の情報を使用して、効率性、またはアップグレード、再利用、または他の理由のためにリソースを切り替える必要性を判断することができる。
コントローラ200は、システム状態220に従って実行中のアプリケーションを確認し、グローバルルール210の予想される実行中のアプリケーションと比較してもよい。アプリケーションが実行されていない場合、それを開始することができる。アプリケーションが実行されてはならない場合、それを停止し、適切であればリソースを再割り当てすることができる。コントローラロジック205は、リソース(コンピュート、ストレージネットワーク)仕様のデータベースを含むことができる。コントローラロジック205は、使用可能なシステムで利用可能なリソースタイプを認識するためのロジックを含むことができる。これは、アウトオブバンド管理ネットワーク260を使用して実行されてもよい。コントローラロジック205は、アウトオブバンド管理ネットワーク260を使用して新しいハードウェアを認識するように構成される場合がある。また、コントローラロジック205は、監査、レポートの構築、および変更管理を目的として、変更の履歴、使用されたルール、およびバージョンに関する情報をシステム状態220から取り込むことができる。
コントローラ200は、複数のネットワーク、相互接続、またはコントローラ200が計算、ストレージ、およびネットワークリソースに動作を指示できる他の接続のうちの1つまたは複数によってスタックまたはリソースと通信を行う。このような接続には、アウトオブバンド管理接続260、インバンド管理接続270、ストレージエリアネットワーク(SAN)接続280、およびオプションのインバンドネットワーク管理接続290が含まれ得る。
アウトオブバンド管理は、コントローラ200によって、コントローラ200を介してシステム100のコンポーネントを検出、構成、および管理するために使用され得る。アウトオブバンド管理接続260は、コントローラ200が、プラグインされ利用可能であるが電源が入っていないリソースを検出することを可能にする場合がある。プラグインされたリソースは、システム状態220に追加されることがある。アウトオブバンド管理は、システム100に属するブートイメージを取り込み、構成し、リソースを監視するように構成される場合がある。アウトオブバンド管理は、オペレーティングシステムの診断のための一時的なイメージのブートも行うことができる。アウトオブバンド管理は、BIOS設定を変更するために使用されてもよく、また、実行中のオペレーティングシステム上でコマンドを実行するためにコンソールツールを使用することができる。また、TAコンソール、キーボード、およびVGA、DVIまたはHDMIポートなどのハードウェアリソース上の物理または仮想モニタポートからのビデオ信号の画像認識を使用して、および/またはRedfishなどのアウトオブバンド管理によって提供されるAPIを使用して、コントローラ200によって設定を変更することができる。
本明細書で使用されるアウトオブバンド管理は、オペレーティングシステムおよびメインのマザーボードから独立したリソースまたはノードに接続できる管理システムを含むことができるが、これに限定されない。アウトオブバンド管理接続260は、ネットワークまたは複数のタイプの直接的または間接的な接続または相互接続から構成され得る。アウトオブバンド管理接続タイプの例としては、IPMI、Redfish、SSH、Telnet、他の管理ツール、キーボード・ビデオ・マウス(KVM)またはKVM over IP、シリアルコンソール、またはUSBが挙げられるが、これらに限定されない。アウトオブバンド管理とは、ネットワーク上で使用されるツールで、ノードやリソースの電源のオン・オフ、温度やその他のシステムデータの監視、BIOSやオペレーティングシステムの制御外にあるその他の低レベルの変更、コンソールへの接続とコマンドの送信、キーボード、マウス、モニターなどの入力制御を行うことができるが、これらに限定されない。アウトオブバンド管理は、物理リソース内のアウトオブバンド管理回路に結合される場合がある。アウトオブバンド管理は、インストール媒体を起動するために使用され得るディスクとしてディスクイメージを接続してもよい。
管理ネットワークまたはインバンド管理接続270は、コントローラ200が、コンピュート、ストレージ、ネットワークまたは他のリソースに関する情報を収集し、リソースが実行されているオペレーティングシステムに直接通信することを可能にする場合がある。ストレージリソース、コンピュートリソースまたはネットワークリソースは、接続260および/または270と相互作用する管理インターフェースを構成してもよく、それにより、コントローラ200と通信し、何が実行中で何がリソースとして利用可能であるかをコントローラ200に伝え、コントローラ200からコマンドを受信してもよい。本明細書で使用されるインバンド管理ネットワークは、リソースと、リソースのオペレーティングシステムと直接通信することができる管理ネットワークからなる。インバンド管理接続270の例は、SSH、Telnet、他の管理ツール、シリアルコンソール、またはUSBを含み得るが、これらに限定されない。
アウトオブバンド管理は、本明細書ではインバンド管理ネットワークから物理的または仮想的に分離されたネットワークとして説明されているが、本明細書でより詳細に説明するように、効率化を目的としてこれらを組み合わせることができ、または互いに連携して動作することができる。したがって、アウトオブバンド管理およびインバンド管理またはその側面は、コントローラの同じポートを介して通信するか、または結合された相互接続で結合されることがある。オプションとして、1つあるいは複数の接続260、270、280、290は、そのようなネットワークの他のものと別々でも結合されてもよく、同じファブリックから構成されてもされなくてもよい。
さらにコンピュートリソース、ストレージリソース、およびコントローラは、コントローラ200がストレージネットワークを使用して各リソースを起動できるように、SAN接続280を介してストレージネットワークに結合されてもよいし、結合されなくてもよい。コントローラ200は、他のリソースがストレージまたは他のリソースから起動できるように、ブートイメージまたは他のテンプレートを別のストレージまたは他のリソースに送信してもよい。コントローラ200は、そのような状況においてどこから起動するのかを指示してもよい。コントローラ200は、リソースの電源をオンにし、どこから起動し、どのようにそれを構成するかをリソースに指示してもよい。コントローラ200は、リソースに、どのように起動するか、どのようなイメージを使用するか、およびそのイメージが他のリソース上にある場合、そのイメージがどこにあるかを指示する。BIOSのリソースは、予め設定されていてもよい。コントローラ200はまた、または代替的に、BIOSがストレージエリアネットワークから起動するように、アウトオブバンド管理を通じてBIOSを構成してもよい。コントローラ200はまた、ISOからオペレーティングシステムを起動し、リソースがデータをローカルディスクにコピーすることを可能にするように構成されることもある。その後、ローカルディスクは起動のために使用され得る。コントローラ200は、他のコントローラを含む他のリソースを、リソースが起動できるように構成することができる。一部のリソースは、コンピュート、ストレージ、またはネットワーク機能を提供するアプリケーションを構成することができる。さらに、コントローラ200がストレージリソースを起動し、その後、ストレージリソースが後続のリソースまたはサービスのブートイメージを供給する責任を負うようにすることが可能である。また、ストレージは、別の目的のために使用されている別のネットワーク上で管理されることもある。
任意選択で、リソースの1つまたは複数は、ネットワーク上のインバンド管理接続290に結合され得る。この接続290は、インバンド管理接続270に関して説明したような1つまたは複数のタイプのインバンド管理で構成されてもよい。接続290は、ネットワークを利用するため、またはインバンド管理ネットワークを通じて管理するために、コントローラ200をアプリケーションネットワークに接続してもよい。
サービスの自動クラスタリング:
本発明者らは、クラスタリング可能なサービス250の1つまたは複数のクラスタ252のデプロイを自動化するために、システム100によって実装可能な多数の異なる技術を開示する(例:図2参照)。
例えば、コントローラ200は、アプリケーションの複数のコピー(例えば、アプリケーションのn個のコピー、ここでnは1より大きい整数であり得る)をデプロイすることができ、これらのアプリケーションは互いに依存し合うことができる。これらのアプリケーションは、サービス250の形態をとることができる。コントローラ200は、これらのアプリケーション(図3のサービスインスタンス250を参照)を管理する(図3で示される負荷分散310を含み得る)スケジューラも構成することができる。一例として、スケジューラは、図3によって示されるように、クラスタマネージャ302とすることができ、クラスタマネージャ302はクラスタ252を管理し、ロードバランシングを管理し、および/または他のタスクを管理してそれらのタスクをスケジュールして処理負荷を分割するサービスであることができる。したがって、クラスタマネージャ302は、タスクを送り出すスケジューラ(SLURMのようなもの)として機能することができ、他のクラスタマネージャ302は、様々なホストをジャストインタイムで構成するかもしれない。そして、環境内の他のサービスは、単一のサービスだけに依存するのではなく、サービス250のクラスタ252に依存することができる。
図4によって示されるように、サービステンプレート430はコントローラ200によって使用される。サービステンプレート430は、テンプレート230の中に含めることができる。サービステンプレート430は、クラスタリングルールを含むことができ、これらのクラスタリングルールは、コントローラ200にそれらのサービスを接続する方法を指示することができる。クラスタリングルールは、複数のリソースへのサービスのデプロイを提供するロジック命令および/または一連のテンプレートであり得る。クラスタリングルールの結合命令は、別々に予約された物理リソースおよび/または仮想リソースの調整および相互作用を定義し、依存関係を設定する。別個のリソースは、マシン、物理、メタル、仮想、および/またはコンテナを含むことができるが、これらに限定されない。クラスタリングルールは、サービスによって使用されているリソースをスケールアップまたはスケールダウンするための情報の利用を定義する。例示的なクラスタリングルールに関する追加の詳細については、図9を参照して後述する。
図4の点線は、クラスタ内の各コンピュートリソース/サービスインスタンスに接続される接続を示す。これらの接続は、物理的または仮想的であり得る。また、コントローラ200がネットワークリソース500でソフトウェア定義ネットワーク(SDN)を使用しなければならない場合、コントローラ200は、SDNスイッチのアウトオブバンド管理を使用してそれらのサービスをクラスタリングすることができる(図4の260を参照)。例えば、スイッチのOOBは、シリアルコンソールを介してコントローラ200に接続することができ、それらのポートにVLANを設定することができる。別の例として、コントローラ200は、スイッチ上またはどこか他の場所でOpenSM(InfiniBandのサブネットマネージャー)を設定することができる。SDNは、クラスタ化されたサービス250が相互に通信するためだけに使用されるネットワークとすることができ、このようなネットワーク構成により、パフォーマンスを向上させながらシステムをより安全にすることができる。
クラスタリングルールは、負荷分散サポートを提供することができ、どのクラスタ化されたサービスが「マスター」であるかを決定することができるクラスタリングツール402(例えば、SLURM(Simple Linux Utility for Resource Management))を指定することができ、クラスタリングツール(複数可)は、従属サービスになる。例えば、クラスタリングツール302は、依存関係としてサービステンプレート430で定義することができる。すなわち、サービス250のクラスタ252は、スケジューラ/クラスタリングツール302に依存し得る。また、例えば、サービス250がデータベースサービスに依存する場合、それはそのサービス250のクラスタ252に依存することができる。他の例示的な実施形態では、サービス250自体がそれ自身の「選出」プロセスを有することができる。
図9は、クラスタリングルール900のセットの一例を示す。これらのクラスタリングルール900は、コントローラロジックまたはリソース/サービスインスタンスにクラスタを管理させる命令を含む。これらのルールは、電源オン/オフのルールおよびクラスタ初期化ルールを含み得るが、これらに限定されない。クラスタ初期化ルールは、コントローラロジック、クラスタマネージャ、およびスケジューラが、クラスタリソースを初期化し、新しいクラスタに必要なリソースを構成することを可能にする。
これらの命令は、サポートされるハードウェアに基づいてルールを変更することができるハードウェア固有の命令を含む可能性がある。これらは、ルール900の内部で条件付きロジックとして行うことができ、またはルール900は一連の「ハードウェアルール」を呼び出すことができる(これらのハードウェアルールは、サポートされるハードウェアと、サポートされるハードウェアの各タイプに対して何を行うべきかを特定する)。ハードウェアタイプは、ベースハードウェアに関する情報を含むことができ、および/または、ネットワークカード、InfiniBandカード、HBA、ディスク、GPU、ASIC、FPGA、および/または任意のタイプのドータカードを含むが、これらに限定されない拡張カードに関する要件を含むことができる。任意選択として、ハードウェアの種類を変更できるハードウェア変更ルールがある。多くの場合、ハードウェア変更ルールは複雑で、GPUの削除/追加などの簡単な変更以外では実装されないが、あらゆる変更に使用でき、コントローラまたはハードウェアを変更したコンピュートリソースにリモートパワーでアクセスできるデーモンに、リソースの再起動を指示することができる。
サービステンプレート430は、テンプレートからデプロイされるすべてのサービスがクラスタでなければならないことを示す可能性があり、また、依存サービスがクラスタとしてデプロイされること、およびそのクラスタ化されたインスタンスのハードウェアタイプを義務付けることも示す可能性がある。クラスタリングルールにおける成長/縮小ルール(例えば、図9によって示されるように、ノードを追加するルールおよびノードを破棄するルール)は、依存サービスのクラスタリングルール内部のロジックを呼び出すことによって、依存クラスタ上の成長/縮小ルールを呼び出し得る。これは、より多くのディスクが必要なストレージ依存関係で、そのストレージプロバイダが依存クラスタへのストレージリソースプロバイダとして使用されるサービステンプレートにパッケージ化されている可能性がある。クラスタリングのルールでは、依存サービスが特定のクラスタの依存サービスとしてのみ機能するように指示することもできる(例えば、ストレージ、ネットワークは、通常であれば共有しても問題ないサービスを共有することに何らかのソフトウェアの問題がある場合、そのサービス専用のプールとし得る)。
クラスタ初期化ルールは、クラスタを初期化するためのプログラム、ロジック、および/または命令を含む。必要な各ハードウェアのためのハードウェア命令が存在することが可能で、コントローラ200は任意のリソース要件をチェックし得る。クラスタ初期化ルールは、依存サービス上のエンドポイントへの呼び出しを含むことができる。それらは、ネットワークスイッチに構成ルールを送信し、ストレージアレイへのアクセスを設定し、データプールを予約し、クラスタに必要な依存関係を解決することができる(例えば、サービスの単一のインスタンスはそれ自身の内部ストレージのみを必要とするかもしれないが、クラスタの場合は共有ストレージが必要かもしれない)。図11は、システムによるクラスタの開始とデプロイに関連して実行可能な操作の一例を示す。
成長ルールは、リソースをクラスタに追加することを許可する。これらのルールは、クラスタリング可能なサービスの新しいコピーのデプロイとなる新しいリソースを生成、プロビジョニングする。その後、ルールはサービスの他のすべてのリソース/インスタンス、クラスタマネージャ、および/またはマスターインスタンスに対する特定の命令を更新することができる。
縮小ルールは、クリーンアップルールを呼び出して、クラスタ内のリソースのインスタンスを他のリソースから削除し、もはや存在しないリソースへの依存を防ぐことができる。クリーンアップルールは、成長ルールに結合させることができる。
スケーリングエンドポイントやスケールルールは、特定のサイズでクラスタの構成を自動的に変更するかユーザープロンプトを提案できる。例として、ネットワーク帯域幅がノード間通信でクラスタを飽和させることがあり、共有ストレージがあるノード数の後にスケーリングを改善できることを示すことがでる。したがって、このルールは、共有ファイルシステムのストレージ依存などの依存関係を義務付けることができる。
クラスタリングルールは、クラスタのために変更が必要な場合、サービス内のエンドポイントを置き換えることができる。新しいエンドポイントは、ハードウェア固有のものになる可能性がある。このようなエンドポイントの変更は、クラスタに変更を加えることが個々のサービスとは異なるため、しばしば存在する。多くの場合、このケースに限定されないが、マスターノード、クラスタマネージャ、またはその他のケースでは、置換エンドポイントは、「クラスタマネージャ」になり得る依存サービスに呼び出すことができ、その後クラスタのすべてのインスタンスに同じコマンドを作成するエンドポイントとして置換することができる。
クラスタリングルール900は、エンドポイントがクラスタに割り当てられたすべてのリソース上で実行されることを指示することもできる。例えば、複数のノードがある場合、コントローラ200は、各ノードにリモートインして必要なコマンドを実行することができ、またはレイアウトに応じて各インスタンス/リソース上で動作するエンドポイントを呼び出すことができる(例えば、エンドポイントはコントローラ200上にあり、コントローラはリモートインしてコマンドをタイプするか?あるいは、サービスを実行しているマシン上でAPIエンドポイントを呼び出すのか?)。
図13は、エンドポイントを呼び出す異なる方法の例を示す。例えば、コントローラ200は、バンド内管理270を使用して、APIを介してサービスを呼び出すことができる。別の例として、コントローラ200はエンドポイント/APIを使用して、OOB 270(例えば、OOBコンソール)を介してサービス(例えば、サービスの一部であるスクリプト/実行可能なもの)を呼び出すことができる。別の例として、コントローラ200は、エンドポイント/APIを使用して、インバンド管理270を介してサービス上のSSH、Telnet、または他のリモートを呼び出す一方で、それ以外の場合はOOB 260を使用することができる。図14は、クラスタのためのエンドポイントを呼び出す異なる方法の例を示す。
図5は、新しいサービスインスタンスをクラスタに初期化するための例示的なプロセスフローを表す。ステップ502で、コントローラ200はサービス250をコンピュートリソース300にプロビジョニングする。ステップ504において、コントローラ200は、クラスタ252におけるサービス250の作成をトリガーする。ステップ504で、サービス250は起動される。次に、ステップ506において、サービス250をクラスタ252に結合するためにクラスタリングルールが起動される。
また、システムは、自身の環境においてクラスタ化されたサービスを提供することができ、依存/従属サービスの代わりに依存/従属クラスタ(自身の環境にあることもある)とすることができる。
クラスタリング可能なサービスには、クラスタリングサポートが組み込まれたサービス内部で実行されるコードを含めることができる。そして、そのようなサービスがサービステンプレート430としてパッケージ化されるとき、コントローラが自動的にそのサービスを構成し、そのサービスのすべてのインスタンスが適切に互いに会話できるように、クラスタ化されたデプロイのためのネットワークや他のインフラの設定を含めて、サービスをクラスタで設定する方法についての指示がサービステンプレート430にあることができる。異なるシナリオは、ユーザーが選択するか、クラスタリングルール900の内部のルールによって選択することができる。例えば、あるノード数、リソース使用量、利用可能なハードウェアの種類(ストレージ、コンピュート、およびネットワーク-InfiniBandやイーサネットなど)があると、自動的に、またはユーザーに提案されるいくつかのルールが存在することができる。クラスタリング可能なサービスをクラスタにデプロイするために使用されるサービステンプレート430は、ユーザーが指定することもできるし、サービス仕様ファイルがそれを義務付けることもできる。例えば、サービステンプレート430(例えば、JSON形式であり得るサービステンプレート430の一部)は、クラスタリングオプションと共にハードウェアオプションを含むことができ、サービスの構成ルールが処理されるとき、使用されているハードウェアに基づいて異なることができる。例えば、異なるハードウェアタイプに対して異なるベースイメージが存在する場合がある。別の例として、異なるネットワークが使用される場合があり、または他の変更などがある場合がある。
図15は、コントローラ200によってデプロイされるクラスタを示す図である。この図は(図15の1を参照)、デプロイされたサービスでクラスタ化されたサービス、またはクラスタとしてデプロイされたサービスのいずれかを示す(クラスタルールも必要に応じて処理することができるが、最初のインスタンスでは、それを必要としないことも可能である。エンドポイントはリソース/インスタンス上、またはコントローラ上に存在することができ、コントローラはリモートコマンドを使用することができる(図14で示される)。最初のサービスは、サービステンプレート(図15の2参照)からデプロイされ、サービスイメージ(図15の3参照)はリソース上で実行される(通常はコンピュートリソース)。コンピュートリソース300(図15の5を参照)は、物理、仮想、またはコンテナであることができ、コントローラ200は、ISOを使用してリソース上にイメージをデプロイし、アウトオブバンド管理260を介してコピーし、インバンド管理、APIを介して構成されたファイル、FlexBoot、PXEブート、および/またはそれらの組合せをコピーできる。
クラスタルール(図15の7を参照)は、コンピュートリソースをストレージリソースまたはストレージリソースの複数および/またはクラスタに結合することができる共有ストレージルール(図15の8を参照)を有することができる。ストレージリソース400は、現在のクラスタへの依存として、または異なる「リソースタイプ」として、クラスタ化されたサービスとしてもデプロイされ得る。図15の15は、ストレージリソース400への結合を示し、これにはストレージリソースへの認証クレデンシャル/公開鍵認証、ストレージリソースのアドレス、接続命令、コンピュートリソースの1つ以上の接続にInifniBandパーティションおよび/またはVLANタグを追加することが含まれ得るが、これらに限定されない。より一般的には、ストレージリソースに接続するために必要なあらゆる情報、およびストレージリソースが適切に構成されている(および結合に必要なネットワークリソースの変更が完了している)。
クラスタは複数のリソースを使用するため、サービステンプレート(図15の6参照)とサービスイメージ(図15の10参照)からデプロイされる別のリソース(図15の11参照)を示し、サービステンプレートとクラスタルールの両方から得られる設定ルールをリソースにインストールする(図15の7と10参照)。
クラスタルールは、リソース(図15の11参照)が適切なハードウェアかどうかを確認し、特定のハードウェア関連の設定を行うことができる(図9の「ハードウェアの指示」参照)。
クラスタルールは、ネットワークルールも含むことができる(図15の9を参照)。これらのネットワークルールは、「追加リソースタイプ」としてパッケージ化することができ、また、クラスタが迅速な相互接続のために独自の高速ネットワークを持つことが多いため、特にクラスタのネットワークルールとしてパッケージ化することもできる。一般的なリソースタイプや、クラスタとしてデプロイされる依存サービスである場合もあるが、ほとんどの実装では専用のネットワークルールが用意されている。
ネットワークルールは、リソースをネットワークリソース500(図15の12参照)に結合することができ、また、ネットワークリソースをプロビジョニングすることもできる。ネットワークルール(図15の9参照)は、既存のネットワークを取り込み、専用ネットワークがない場合はそのネットワークへのポインタを単に含むことができる。ネットワークルールは、コンピュートリソースに接続するポートを有効にすることができる。ネットワークリソースはSANであることもあるが、専用のSANや複数の専用ネットワークが存在することもある。ネットワークルールには、DNSラウンドロビンのようなロードバランシングも含まれることがある。複数のネットワークリソースおよび/またはネットワークがクラスタリソースに結合されていることもある。クラスタのネットワークルールは、適切なネットワークをコンピュートまたは他のリソースに直接結合することがでる(図15の14を参照)。
ネットワークとストレージの両リソースは、ハードウェアの種類も異なり、異なるストレージプロトコル、ネットワークプロトコル、またはネットワークファブリックが異なるハードウェアタイプで望まれ、これらの構成の違いはハードウェアルール(図9の「ハードウェアの指示」参照)から導き出すことができる。
クラスタは、クラスタマネージャまたはクラスタマネージャに依存することができ(図15の18を参照)、サービステンプレートはクラスタルールの内部にパッケージ化することができる。クラスタマネージャは、マスターインスタンスであることも、別々のサービスであることもできる。別のインスタンスは、そのような指定が必要な場合、「マスター」と示すことができる。クラスタマネージャは、リソースをジャストインタイムで構成し、クラスタ内のリソースを管理する方法を指示し、クラスタで実行されている各サービスを監視することができる。さらに、クラスタマネージャはスケジューラとして機能し、クラスタ内の様々なインスタンスにタスクをスケジュールすることができる。クラスタマネージャの例としては、スケジューラ(SLURMなど)、mpirunまたは他のメッセージパッシングのプロセス起動ツールを実行するクラスタ上のサービスのインスタンスが挙げられるが、これらに限定されない。また、クラスタルールにコントローラが起動可能なロジックが含まれており、コントローラ上でそれらのタスクをスケジュールできる場合、コントローラロジックはクラスタマネージャとして機能することができる。
図16Aでは、クラスタを成長させるために、未使用の計算リソースが利用可能である(図16Aの20を参照)。これは、任意のタイプのリソースであることができ、この図は、ストレージまたはネットワークリソースを追加する場合に類似している。このリソースは、元々ストレージとネットワークにそれぞれ物理的に結合されていることができる(図16Aの21と22を参照)。接続はソフトウェア定義ネットワークで無効にすることができ、あるいは接続を有効にして使用せず、および/またはUIでユーザーに新しいケーブルを差し込むように指示することができる。クラスタリングのルールにより、未使用のリソースはクラスタに結合される。
クラスタはリソースを追加しており、図16Bは新しいリソースが追加された後の概略図である。コントローラロジックは、サービステンプレート(図16Bの6参照)を、対応するクラスタルール(図16Bの7参照)と共に使用してリソースを追加する。サービスイメージ(図16Bの24参照)は、新しいコンピュートリソース23がクラスタの一部となるように構成される。そして、他のすべてのクラスタ/依存関係/リソース(すなわち、コンピュートおよびストレージ)に結合される。他のすべてのリソースは、この新しいリソースを利用するように更新され得る(図16Bの参照番号4、12、3、11、18を含むがこれらに限定されない)。クラスタマネージャ(図16Bの16/18を参照)がある場合、それは、新しいリソース(図16Bの23を参照)をクラスタに結合する方法に関する情報で更新され得る。
図17Aは、新しいクラスタを作成するためのプロセスフローの例を示す図である。
図9に示すようなクラスタリングのルールは、初期化ルールを持つことができる。サービスは、初期化ステップですでにデプロイ1701またはデプロイされ得る。初期化ルールは、新しいクラスタの適切な動作を満たすために、他のリソースタイプまたはサービスへの依存関係および/またはポインタを有することができる。図16のラベル3に例を示す。
クラスタ初期化ルールは、コントローラから、または既存のリソース上で、あるいはクラスタマネージャのサービスから実行することができる。初期化ルールには、クラスタを構築し、コンピュート、ネットワーク、およびストレージ1702を含むが、これらに限定されない複数のリソースを結合する方法に関する指示が含まれる。
リソース割り当て1703に基づくことができる依存性計算が存在し得る。追加のサービスまたはクラスタ化されたサービスのインスタンスがデプロイされ得る1704。追加の依存関係がある可能性があり、その場合、他のサービスおよび/またはクラスタ化されたサービスがデプロイされ得る(例えば、クラスタコンピュートノード間の共有ストレージ機能のためのオブジェクトストレージのクラスタなど)。
クラスタルールを持つサービステンプレートは、複数のリソースタイプ1706にデプロイするためのハードウェアルールとともに、クラスタルール内のロジックとクラスタルール内で必要なデータを使用して、複数のイメージを生成する機能を持つことができる。実際には、クラスタごとに1つのリソースタイプを使用し、追加のリソースタイプ(例えば、オブジェクトストレージのクラスタサービスを依存関係とすることができる)1705の依存関係を含めることでより簡単に実現できる。
初期化命令には、各リソースタイプを結合し、すべての接続1707を有効にするロジックが含まれる。
クラスタ内のサービスの各インスタンスは、構成ルール1708を実行でき、システム状態1709は、クラスタ上の各インスタンスの状態を認識することができる。クラスタ内のサービスのインスタンスはシステム状態を使用して、インバンド管理270が他のインスタンスの情報を収集するために利用可能である場合、コントローラから情報を収集することができる。別の方法として、クラスタマネージャは、リソース上で実行されている各サービスインスタンスに新しい設定をプッシュすることができる。
図17Bは、クラスタを成長させるか、ノード/リソースを追加するプロセスフローの例を示す図である。
未使用のリソースは、1710(図16の20の例)に割り当てられ、リソースは、システムおよびクラスタリソース1711(図16の21と22の例)に物理的に結合されていなければならない。次に、コントローラは、クラスタルール1712(図16の7)内の追加/成長ルールを処理できる。次に、コントローラは、クラスタルール、システム状態、およびサービステンプレートおよび/またはルールからサービスイメージを導出し、新しいリソース1713にデプロイすることができる。リソースの他のリソースプール、サービス、またはサービスクラスタへの接続は、それらが最初に無効になっていた場合、1714で有効にすることができる。
他のリソースは、クラスタルールを使用して新しいリソースに結合され、クラスタマネージャ、マスターノードを更新し、および/または、すべてのリソースにコマンドを送信するためのループを処理するクラスタの各リソース上のロジックを呼び出すことができる。1715
ロードバランサーやクラスタマネージャを使用している場合、新しいリソースはリソースへの接続ロジックとともに利用可能なリソースのリストとして追加することができる。
クラスタリング可能なサービスの例として、Xyceがある。XyceはOpenMPIのサポートを内蔵しており、OpenMPIのCUDAのサポートの使用方法を理解している。Xyceをパッケージ化する際、サービステンプレートは、CUDAを意識したOpenMPIの設定と、InfiniBand、イーサネット、または別のネットワークファブリックを使用するかどうかを知る必要だけある。CUDAは、C++のNVIADIA GPUバージョンで、CUDA対応OpenMPIは、他のハードウェアと結合できるGPU(例えば、サーバ、サービスインスタンスと結合したCPU)上で実行するすべてのGPUに、GPU実行可能コードを送信する。InfiniBand の使用は、例えば NVIDIA NVlinkを使用して、サービスをホストするコンピュートノードのCPUをバイパスするように自動構成することができる。Xyce自体にはこのサポートが組み込まれており、サービステンプレートは、Xyceが適切なハードウェアにデプロイされている場合、そのクラスタリング機能が自動的にオンになるようなルールを含むように設計することができる。
コントローラ200は、PXEまたはIPMIを使用してアウトオブバンドおよびインバンド管理(260/270)を介してプロビジョニングすることができ、カスタムブートローダおよびスイッチへのOOB260を使用し、クラスタ化された環境において複数のアプリケーションを構成し、アプリケーション、複数のアプリケーション、インスタンスまたは複数のインスタンスまたはそれらの組み合わせを結合することができる。参考のために、コントローラ200は、ASSCMと表示され得る。
図6は、要求600がクラスタツール402に送信され得る例を示す。この要求は、クラスタ252内の1つまたは複数のサービスによって実行されるべきデータ処理ジョブに対する、ユーザーまたはアプリケーションからの要求であり得る。クラスタツール402は、任意にクラスタリング可能なサービスの依存関係として構成することができ、クラスタツール402はタスクをスケジュールすることができ、OpenMPIなどのメッセージパッシングのツールを使用することができる。関連するクラスタ252のサービステンプレート430によって指定されたクラスタリングルールは、コントローラによって実装され得るクラスタ化されたサービスを結合するために使用されるクラスタリングネットワークの構成を指示し得る(例えば、上述の図9参照)。クラスタリングルールは、任意でアウトオブバンド管理260を介して、ネットワークリソース500(例えば、スイッチ)を構成するために使用されてもよい。
コントローラ200は、任意に外部ネットワーク602を結合し、任意にクラスタツール上でリクエストの処理を構成することができる。これは、クラスタのネットワーク、クラスタリソース、クラスタのマスターインスタンス、および/またはクラスタマネージャのインターネットへの結合、および/またはシステム内またはシステム外の別のネットワークに結合される可能性がある。
コントローラ200のデプロイシステムおよび依存関係管理は、サービス間の依存関係またはクラスタ化されたサービスと依存または従属サービスとの間の依存関係を構成することができる。
図7は、別のサービス704に依存するサービス702を示し、ここでサービス704はクラスタ706としてデプロイされる。[関連するクラスタ706は、サービス704の2つのインスタンスからなる(それらのサービス704は、互いに「相互依存性」を持つことができる。相互依存は、あるサービスが、現在実行されているそのサービスの他のインスタンスに対する任意の依存関係を有するクラスタをより単純化した方法である。また、図10は、2つのクラスタ化されたサービスが相互依存し、共有ストレージと結合している例を示している。
図8は、コントローラ200が、OOB、IPMI、PXE、Redfish、FlexBoot、カスタムブートローダまたはそれらの組み合わせを含むが、これらに限定されないツールを介してアプリケーション、すなわちベアメタル(例えば、サーバ300)上に任意にデプロイされるクラスタリング可能アプリケーションをデプロイしていることを示す。NVlinkは、CPUをバイパスしてInfiniBand接続を使用してGPUメモリから別のGPUのメモリにコピーするために使用することができる。したがって、ノード間の通信をコプロセッサに最適化することができる。また、ベアメタル上に自動的に構成できるクラスタリング可能なアプリケーションのインスタンス間でストレージリソースを提供したり、共有ストレージリソースとして機能したりできるSAN280またはストレージリソース280が存在する可能性がある。また、ネットワークリソースは、コントローラ200によってアウトオブバンドで構成されることもある。図8のスイッチ800(複数のスイッチから構成され得る)は、コンピュート・インスタンスに接続し(通常はイーサネット)、バンド内および/またはバンド外の管理を行うスイッチとすることができる。(2つのスイッチであり得る)。SDNファブリック802は、コントローラ200が設定できる別のスイッチ(例えば、スマートスイッチ)で、スイッチ802がクラスタの高速スイッチとして機能し、ノード300が非常に速く一緒に会話できるようにすることができる。
実施形態の例として、自動クラスタリング機能を持つシステム100は、ベアメタルにクラスタリング可能なアプリケーションを自動的にデプロイし、システムの残りの部分を構成して、ターンキーデプロイのHPCシステム環境を作ることができるようになる。一例として、システムはISOをブートし、ストレージリソースが接続され、pivot_rootが呼び出されてルートファイルシステムを移動させる。図12は、このためのプロセスフローの例を示す。ステップ1202で、コントローラ200は、ネットワークインターフェースを介して、仮想CDハードウェアにISOイメージを与える。あるいは、仮想CDインターフェースは、CDイメージをインテリジェントに要求することができる。ステップ1204で、ISOから適切なカーネルがロードされ、システムはそれに応じてブートする(ステップ1206)。ステップ1208において、コントローラ200はSANログオン情報を提供し、そこでSANへの接続が達成される(ステップ1210)。ステップ1212で、新しいユーザーランドへのpivot_rootがあり得る。
例示的な実施形態として、システム100は、ほぼすべてのハードウェア上でネットワークインフラとオンデマンドの高性能アプリケーションおよびサービスを迅速に実装できるように設計された、アウトオブバンドのコントローラ環境を含む。コントローラ200は、デスクトップ/ワークステーション環境から数千ノードの超並列HPC環境までHPCアプリケーションを確実に拡張できる、VMおよびコンテナ管理および/またはベアメタル自動デプロイを提供できる、高度にスケーラブルで「クラスタリング認識」の自動デプロイシステムを提供できる。クラスタ化されたサービス、アプリケーション、およびリソースの認識を通じて、コントローラ200は、クラスタ252をリアルタイムで作成、破壊、縮小、および成長させることができる。クラスタリングルール900の一部として含めることができるコントローラ200のAPIは、GPUサポート、クラスタセキュリティ管理、およびMLインターフェースなどの追加機能を追加するための柔軟性を提供する抽象化レイヤーを含むことができる。
コントローラ200のクラスタ管理APIは、各APIエンドポイントの名前、説明、引数タイプ、および結果タイプを含むAPI定義ファイルを含むことができる。クラスタリングルール900は、「クラスタコマンド」を行うためのエンドポイントを有することができる。これらのエンドポイントのためのSDKが存在することができる。そして、これらのファイルは、実行時にAPIエンドポイントマッピングを生成するために使用され得る。このAPI生成方法により、新しいサービスや機能が追加されたときに、コアAPIの拡張を比較的容易に開発することができる。APIエンドポイントのサーバ側の実装は、APIエンドポイント名と、引数を処理し、作業を行い、API定義で指定された型のオブジェクトを返すルーチンとのマッピングで構成することができる。
API定義ファイルに含めることができるAPIエンドポイントの例としては、以下のものがある:
・新しいクラスタを作成する
・クラスタを破壊する
・クラスタを成長させる
・クラスタを縮小する
・クラスタの起動と停止
・クラスタヘルスを取得する
・クラスタをアップグレードする
図18Aおよび図18Bは、これらの操作のプロセスフロー例を示す。
コントローラ200のクラスタマネージャ拡張は、アプリケーションおよびサービスの複数のインスタンス間の並列化をオーケストレーションする機能、ならびにシングルユーザーのアプリケーションの複数のインスタンスをスピンアップする機能を組み込むことができる。クラスタマネージャは、(1)クラスタへの変更を検証、追跡、およびスケジューリングし、それらの変更を永続データベースに格納すること、(2)コントローラ200内の他のマネージャにコマンドを発行してクラスタに必要なリソース(仮想マシン(VM)、ストレージオブジェクト、ネットワークなど)をクリースすること、(3)それらの操作をサポートするクラスタに対してクラスタを自動的に成長させて縮小することなど、相互に作用するクラスタ間でも、クラスタ化されたサービスおよびアプリケーションの管理に関するタスクに責任を負うことができる。
この点で、クラスタマネージャの操作は、クラスタAPIに対するAPIコール(ユーザーが発行するAPIコールなど)および内部で生成される自動化イベントに応答してトリガーされることがある。コマンドはドメインマネージャに発行され、各クラスタに新しい隔離環境を作成する。これらの環境は、独自のサブドメインとサブネットを持つことができる。これらの環境は、クラスタ内外のトラフィックを管理するための専用のルータ/ファイアウォール(Linux VMとして実装されたルータ/ファイアウォールなど)を持つこともできる。一例として、このドメインはドメインAPIを通じて直接ユーザーが管理できるものではなく、代わりにクラスタマネージャが管理することができる。したがって、このような例では、ドメインに対するすべての管理操作は、クラスタマネージャによって発行される(または許可される)場合を除き、禁止することができる。
また、ドメインマネージャには、クラスタ内に存在するサービスを作成するためのコマンドも発行される。これは、特定のサービスのN個のコピーかもしれないし、クラスタ内のノードに仕事を渡す専用のスケジューラ(または制御)サービスを含むかもしれない。このアプローチにより、実行者はスケジューラを必要とするクラスタリングソフトウェアや、クラスタを指揮する独自の「リーダー」を自ら選出できるソフトウェアに対応することができる。
また、クラスタ内のルータ/ファイアウォールサービスにコマンドを発行して、クラスタが存在するドメインからクラスタへのアクセスを許可することもできる。
さらに、クラスタ内の各サービスをデプロイし管理するために、サービスマネージャにコマンドを発行することができる。例示的な実施形態では、クラスタの一部としてデプロイされるサービスは、サービスAPIを通じて直接管理することができない。これにより、ユーザーが誤って(または意図的に)サービスの一部を変更し、クラスタを一貫性のない状態にすることを防ぐ。代わりに、サービスはグループとして管理可能であり、変更はクラスタマネージャを通じてすべてのノードに適用されるため、すべてのクラスタメンバーで一貫性が確保される。
クラスタマネージャ拡張機能は、管理されたソフトウェアのデプロイメントを通じてサービス間の依存関係を定義し、サービスの依存関係を解決する目的でクラスタを1つのサービスとして扱うことを可能にすることができる。例えば、クラスタのジョブスケジューラは、ジョブ結果を保存するためにデータベースサービスにアクセスする必要がある。クラスタマネージャ拡張機能による依存関係のサポートにより、クラスタは他のクラスタに依存することができ、これは高信頼性環境にとって望ましい特性である。
システムのサービスパッケージ定義を更新して、HPCアプリケーションのクラスタリング要件に関する情報を含めることができる。新しいサービスパッケージ定義の拡張機能は、クラスタマネージャがクラスタを適切にデプロイする方法を決定するために使用することができる。
別の例示的な実施形態として、システム100は、HPC環境におけるInfiniBandファブリックの構成とセキュリティ確保のために、OpenSMの自動化と管理を組み込むことができる。InfiniBand(IB)は、システム間の高速(最大200Gbps)接続を可能にする最新のデータファブリックであり、高性能ブロックストレージへのアクセスを提供することができ、また、OpenMPIのトランスポートとして機能する。
これを実現するために、ローカルサービスOpenSMを、HPCシステム、個々のノード、ファブリック、コンポーネント、アプリケーション、および並列演算のクラスタの状態を認識するスマートコントローラに適合させることができる。また、スマートコントローラは、これらのコンポーネント間の相互作用を構成して、最大限のセキュリティを確保することができる。
OpenSMは、IBファブリックをスキャンし、初期化し、変化への対応に時々掃引することができる。OpenSMは、まず、アウトオブバンド接続260を介してコントローラ200と統合し、ネットワークデーモンと統合して、システム100のネットワーク管理デーモン(NMD)を作成することができる。NMDは、IB構成および内部システムイベントおよびサービスによって生成された自動化された要求を、作成、破壊、最適化、およびその他の方法で管理することができるようになる。NMDは、経路最適化アルゴリズム(最小ホップ、DORルーティング、およびTorus-2QoSを含み得る)を含む、ホスト上のIBハードウェアを管理および構成することができる。しかし、各VMやホストを直列に管理する代わりに、NMDは各ホストと交渉してIBファブリックを最適に構成することができる。
IBパーティションの定義と構成をサポートするためにネットワークAPIを拡張し、IBとサブネットマネージャの状態を追跡するためのデータベーステーブルを追加することにより、クラスタ化されたシステムでIBファブリックをサポートすることができる。したがって、ユーザーはシステム100を使用してIBパーティションを作成し、それをシステム100の内部データベースで永続させることができるようになる。これに関して、システム100のためのネットワークAPI仕様は、IBパーティションを表す新しいネットワークの作成をサポートすることができる。これは、新しい種類のネットワーク、例えば「ib-partition」のサポートを追加することによって達成することができる。この新しいib-partitionネットワークのタイプは、パーティション名のみを供給する必要がある。ネットワークAPIの仕様が更新され、ib-partitionが新しいタイプのネットワークとして受け入れられるようになれば、新しいネットワーク・プラグインを採用することもできる。このプラグインは、定義された各IBパーティションの状態と構成を追跡し、ファブリック構成を永続データベースに保存し、システム100内の他のコンポーネントによって消費されるIBパーティションデータ構造の形状を定義する責任を負うことができる。
Ib-partitionネットワークをVMに追加する場合、IBインターフェースにGUIDを生成することができ、VM起動時に永続的でデプロイ内で一意である。これらのGUIDは、VMに渡すためにQEMUに渡される前に、NMDがSR-IOV仮想機能のGUIDを設定するために使用される。
新しいデータベースのテーブルを追加して、ib-partitionネットワークとVMのマッピング、およびそのVMで使用されるGUIを追跡することができる。このデータベースのテーブルでは、固有の制約と組み込みのデータベース関数を使用して、すべてのマッピングにおいて固有でIBのGUIDとして使用可能なUUID(64ビット数値IDの形式をとることができる)を生成することができる。VMがどのコンピュートホスト上で実行されるかにかかわらず、デバイスがVMから削除されるまでは、常に同じIB GUIDを持つことになる。
関連する機能をまとめるために、NMDは、ホスト上に存在するConnectX VPIカードを構成してSR-IOVを有効にし、各IB SR-IOV仮想機能(VF)のGUIDをシステム100が制御する値に設定するためのサポートを得ることができる。これは、ib-partitionネットワークがVMに追加されるときにGUIDが作成されるため、ファブリックのトポロジーの一貫性を確保するのに役立つ。VMは、ネットワークがVMから削除されるまで、そのIB GUIDを保持することができる。これを実現するには、システムが保持する LinuxカーネルのイメージでSR-IOVを有効にし、ホスト上でIntel VT-xとVT-dまたは AMD Vi が有効であることを確認する。この取り組みでは、Mellanox OFEDで配布されているアウトオブツリーIBドライバではなく、インカーネルIBドライバを使用することができる。また、SR-IOV VFをVMに渡すためにQEMUが利用するLinux VFIOドライバも有効にすることができる。NMDは、Linux SysFSを利用してConnectXカードのSR-IOVを構成し、VFのGUIDを構成し、VMがVFにアクセスする必要があるときにMellanox DriverからVFを結合および結合解除できる。
この取り組みの一環として、システム100において、Compute Daemonとコントローラ200がIBファブリックにアクセスするためのSR-IOV VFの作成と設定を要求できるように、新しい内部API拡張を開発することができる。このために採用できる新しいAPI機能としては、以下の4つがある:
・InfiniBand仮想関数をリクエスト
・InfiniBand仮想関数をリリース
・仮想関数の最大数を取得
・使用中の仮想関数の数を取得
リクエストAPIとリリースAPIは、VFを構成または撤去するために必要なすべてのGUIDが供給されることを要求することができ、VF利用APIは、ホストが別のVFをサポートできるかどうかを判断するために使用される。新しいVFを構成できない場合、リクエストAPIコールはエラーを報告することができる。成功した場合、リクエストのエンドポイントは仮想機能にマッピングされたPCI Bus-Device-Function(BDF)タプルを返すことができ、要求者は新しいVFを使用することができる。
システム100がIB用のSR-IOV VFを管理できるようになると、コントローラ200を介してOpenSMを管理する必要がある。この機能が必要なのは、コントローラ200が、OpenSMの複数のインスタンスを独自のLinuxコンテナ内で実行し、OpenSMがクラッシュした場合に冗長性とフェイルオーバーサポートを提供することができるためである。これらの各コンテナは、OpenSMインスタンスがファブリックを構成するために使用できる独自のIB VFを有し、コントローラ200は、ファブリックの安定性を確保するために一貫している必要があるため、これらのインターフェースのGUIDの生成および保存の責任を負うことができる。コントローラ200は、必要なOpenSM設定ファイルを生成し、ホストからコンテナファイルシステムへの読み取り専用のバインドマウントを介してコンテナに渡すことも担当する。別の読み取り/書き込み可能なバインドマウントを使用して、インスタンスごとのログディレクトリを各コンテナで共有することができる。
この作業は、コントローラ200に組み込むことができる軽量プロセス管理レイヤで使用される「Worker Plugin」として実装することができる。Worker Pluginは、コントローラ200と同じホスト上で実行されることが期待されるプロセスまたは一連のプロセスを定義する。これは現在、インフラストラクチャのオーケストレーションの一部として使用されるローカルDHCPとHTTPサーバを管理するために利用されている。この新しいWorker Pluginは、既存のコンテナランタイム(runc、LXC、rkt など)を使用するか、Linuxの名前空間とコントロールグループ(cgroups)を管理してコンテナを手動で作成することによって、複数のOpenSM 管理コンテナを起動できる。このタスクの作業の大部分はコンテナの動作を定義することであるが、OpenSM設定ファイルの生成は、Mellanox のOFEDドキュメントで完全な仕様が公開されているため、非常に簡単である。OpenSM管理コンテナの起動は8つのステップに分けられ、デプロイされるレプリカごとにステップ2から8を繰り返す:
1.共通のOpenSM設定ファイルを生成する。これにはパーティションメンバーシップ、ルーティング設定、QoSに関する情報が含まれる。
2.NMDと通信し、IB SR-IOV VFを作成して設定する。
3.インスタンス単位のファイルを生成する:
a.ControllerがアクセスするOpenSMログを保存するログストレージディレクトリ。
b.フェイルオーバーサポートのためのOpenSM Priorityを指定するインスタンス固有の設定。
4.Containerのランタイムを使用して、OpenSMをはじめ、正常に機能するために必要なOFEDのコンポーネントやシステムパッケージが入った新しいコンテナを作成する。
5.OpenSM Configurationファイルを読み取り専用としてコンテナにバインドマウントする。
6.Containerにログディレクトリをread-writeでバインドマウントする。
7.Container内からIB VFにアクセスできるようにする。
8.Container内でOpenSMを起動する。
ベースとなるコンテナイメージは、Alpine Linux、Gentoo Stage 3のイメージ、またはその他の同様に小さく切り詰められたLinuxディストリビューションをベースとすることができる。OpenSMがクラッシュしてContainerが終了した場合、レプリカの1つがファブリックの管理を引き継ぐ間に、コンテナを再始動または破壊して再作成することができる。
OpenSM構成は、定義されたOpenSMレプリカの数、およびVMに接続されたNetwork Deviceとして実装されるVMの「ib-partition」ネットワークメンバーシップによって定義されるIBパーティションメンバーシップに基づいて生成することができる。コントローラ200は、生成されるインスタンスごとの構成における各OpenSMインスタンスの優先度を指示することができるが、要件は、少なくとも優先度1および2のインスタンスを実行するであろう。
QEMUは、Linux VFIOドライバとQEMU起動時の特定のコマンドライン引数によって、PCIe Passthroughをサポートする。この機能をサポートするために、Compute Daemonは、新しいVMを起動する際にそのVMが「ib-partition」ネットワークデバイスを持つ場合、同じホスト上のNMDに対してIB SR-IOV VF Requestを発行することができる。このリクエストに失敗した場合、VMは起動できないが、そうでなければVMの起動は通常通り行われる。次のステップは、VFをVMに渡すために必要な引数を生成することである。
Compute Daemonは、接続されたDeviceのリストを同等の一連の引数にマッピングすることによって、QEMUコマンドライン引数を生成する。新しいマッピングを追加するには、Deviceのタイプ(この場合、「ib-partition」Networkに接続されているNetwork Device)を検査し、そのDeviceに関連する設定を取得してコマンドライン引数を構築することからなる。PCI Passthroughの場合、これは「-device vfio-pci,host=$bdf」引数を使用して、どのVFをVMに通す必要があるかをQEMUに通知することを意味する。
本発明は、その例示的な実施形態に関連して上述されているが、本発明の範囲内にある様々な変更がなされる可能性がある。本発明に対するそのような修正は、本明細書の教示を検討すれば認識できるであろう。

Claims (38)

  1. コンピュータシステムのコントローラを備えるシステムであって、前記コントローラは、サービステンプレートによって定義された複数のクラスタリングルールを用いて、クラスタリング可能なサービスを自動クラスタリングする、システム。
  2. 前記コントローラは、(1)テンプレートのライブラリからサービステンプレートを選択し、(2)選択されたサービステンプレートによって定義されたクラスタリングルールを読み出し、(3)読み出したクラスタリングルールに従って複数のサービスインスタンスをクラスタリング可能なサービスとして展開する、請求項1に記載のシステム。
  3. 前記複数のサービスインスタンスは、互いに依存し合う、請求項2に記載のシステム。
  4. コントローラが、サービスインスタンスを管理または負荷分散するためのスケジューラをデプロイする、請求項2~3のいずれかに記載のシステム。
  5. 前記クラスタリングルールは、クラスタ開始ルールを含み、前記クラスタ開始ルールは、前記クラスタリング可能なサービスに対応するクラスタの依存関係を特定する、請求項1~4のいずれかに記載のシステム。
  6. 前記クラスタリングルールは、前記クラスタが展開される複数の異なるハードウェアタイプに基づいて、前記クラスタリング可能なサービスに対応するクラスタを展開するための異なるルールを含む、請求項1~5のいずれかに記載のシステム。
  7. 前記ハードウェアの種類は、GPUを含む、請求項6に記載のシステム。
  8. 前記クラスタリングルールは、前記クラスタリング可能なサービスに対応するクラスタを成長させるためのルールを含む、請求項1~7のいずれかに記載のシステム。
  9. 前記クラスタ成長ルールは、前記クラスタのサービスイメージへのポインタを含む、請求項8に記載のシステム。
  10. 前記クラスタ成長ルールは、前記クラスタのネットワーキング・ルールを含む、請求項8に記載のシステム。
  11. 前記クラスタリングルールは、前記クラスタリング可能なサービスに対応するクラスタを縮小するためのルールを含む、請求項1~10のいずれかに記載のシステム。
  12. 前記クラスタリングルールは、前記クラスタブルサービスに対応するクラスタのリソース要件を特定するルールを含む、請求項1~11のいずれか一項に記載のシステム。
  13. 前記クラスタリングルールは、前記クラスタブルサービスに対応するクラスタをパワーオンおよびパワーオフするためのルールを含む、請求項1~12のいずれかに記載のシステム。
  14. 前記サービステンプレートは、前記クラスタリング可能なサービスに対応するクラスタを管理するために前記コントローラによって展開されるクラスタマネージャを定義する、請求項1~13のいずれかに記載のシステム。
  15. 前記コントローラは、アウトオブバンド管理接続を介して、前記クラスタリング可能なサービスに対応するクラスタを構成する、請求項1~14のいずれかに記載のシステム。
  16. 前記クラスタリング可能なサービスに対応するクラスタは、ネットワークリソースを介して互いに接続された複数の計算リソース上にデプロイされる、請求項1~15のいずれかに記載のシステム。
  17. 前記コントローラは、前記サービステンプレートに基づくpivot_rootプロセスを採用し、前記pivot_rootプロセスは、前記クラスタリング可能なサービスに対応するクラスタを、Bios依存なしにストレージエリアネットワーク(SAN)からブートすることを可能にする、請求項1~16のいずれかに記載のシステム。
  18. サービステンプレートから複数のクラスタリングルールを読み取るステップと、
    前記クラスタリングルールに従って、前記複数のアプリケーションをクラスタとしてデプロイするステップと、
    を含む、方法。
  19. アプリケーションが相互に依存する、請求項18に記載の方法。
  20. アプリケーションを管理または負荷分散するためにスケジューラを構成することをさらに含む、請求項18に記載の方法。
  21. サービスのクラスタとしてのアプリケーションに依存する他のサービスをさらに含む、請求項18に記載の方法。
  22. 非一過性のコンピュータ読み取り可能な記憶媒体に常駐する複数のプロセッサ実行可能な命令を含むコンピュータプログラム製品であって、前記命令は、プロセッサによる実行のために構成され、サービステンプレートによって定義された複数のクラスタリングルールを使用して、プロセッサにクラスタリング可能なサービスを自動クラスタリングさせる、コンピュータプログラム製品。
  23. 前記命令は、前記プロセッサによる実行により、前記プロセッサに、(1)テンプレートのライブラリからサービステンプレートを選択させ、(2)選択されたサービステンプレートによって定義されたクラスタリングルールを読み取らせ、(3)読み取られたクラスタリングルールに従って、複数のサービスインスタンスを前記クラスタブルサービスとしてデプロイさせるようにさらに構成されている請求項22記載のコンピュータプログラム製品。
  24. 前記複数のサービスインスタンスは、互いに依存し合う、請求項23に記載のコンピュータプログラム製品。
  25. 前記命令は、前記プロセッサによる実行のために、前記プロセッサに、前記サービスインスタンスを管理または負荷分散するためのスケジューラをデプロイさせるようにさらに構成される、請求項23に記載のコンピュータプログラム製品。
  26. クラスタリングルールがクラスタ開始ルールを含み、クラスタ開始ルールがクラスタリング可能なサービスに対応するクラスタの依存関係を識別する、請求項18~25のいずれかに記載の方法またはコンピュータプログラム製品。
  27. クラスタリングのルールは、クラスタがデプロイされる複数の異なるハードウェアタイプに基づいて、クラスタリング可能なサービスに対応するクラスタをデプロイするための異なるルールを含む、請求項18~26のいずれかに記載の方法またはコンピュータプログラム製品。
  28. ハードウェアの種類は、GPUを含む、請求項27に記載の方法またはコンピュータプログラム製品。
  29. 前記クラスタリングのルールは、前記クラスタリング可能なサービスに対応するクラスタを成長させるためのルールを含む、請求項18~28のいずれかに記載の方法またはコンピュータプログラム製品。
  30. 前記クラスタ成長ルールは、前記クラスタのサービスイメージへのポインタを含む、請求項29に記載の方法またはコンピュータプログラム製品。
  31. 前記クラスタ成長ルールは、前記クラスタのネットワークのルールを含む、請求項29~30のいずれかに記載の方法またはコンピュータプログラム製品。
  32. 前記クラスタリングのルールは、前記クラスタリング可能なサービスに対応するクラスタを縮小するためのルールを含む、請求項18~31のいずれかに記載の方法またはコンピュータプログラム製品。
  33. 前記クラスタリングルールは、前記クラスタリングが可能なサービスに対応するクラスタのリソース要件を特定するルールを含む、請求項18~32のいずれかに記載の方法またはコンピュータプログラム製品。
  34. 前記クラスタリングルールは、前記クラスタリング可能サービスに対応するクラスタをパワーオンおよびパワーオフするためのルールを含む、請求項18~33のいずれかに記載の方法またはコンピュータプログラム製品。
  35. 前記サービステンプレートは、前記クラスタリング可能なサービスに対応するクラスタを管理するために前記コントローラによってデプロイされるクラスタマネージャを定義する、請求項18~34のいずれかに記載の方法またはコンピュータプログラム製品。
  36. 前記コントローラは、アウトオブバンド管理接続を介して、前記クラスタリング可能なサービスに対応するクラスタを構成する、請求項18~35のいずれかに記載の方法またはコンピュータプログラム製品。
  37. クラスタリング可能なサービスに対応するクラスタは、ネットワークリソースを介して互いに接続された複数の計算リソース上にデプロイされる、請求項18~36のいずれかに記載の方法またはコンピュータプログラム製品。
  38. コントローラが、サービステンプレートに基づくピボットルートプロセスを採用し、pivot_rootプロセスが、Bios依存関係なしに、ストレージエリアネットワーク(SAN)からクラスタリング可能なサービスに対応するクラスタをブート可能にする、請求項18~37のいずれかに記載の方法またはコンピュータプログラム製品。
JP2023523663A 2020-10-19 2021-10-19 クラスタリング可能なサービスの自動クラスタリングのためのシステムおよび方法 Pending JP2023546907A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063093691P 2020-10-19 2020-10-19
US63/093,691 2020-10-19
PCT/US2021/055654 WO2022086996A1 (en) 2020-10-19 2021-10-19 System and method for auto-clustering of clusterable services

Publications (2)

Publication Number Publication Date
JP2023546907A true JP2023546907A (ja) 2023-11-08
JPWO2022086996A5 JPWO2022086996A5 (ja) 2024-10-29

Family

ID=81186470

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023523663A Pending JP2023546907A (ja) 2020-10-19 2021-10-19 クラスタリング可能なサービスの自動クラスタリングのためのシステムおよび方法

Country Status (4)

Country Link
US (1) US20220121502A1 (ja)
EP (1) EP4229512A4 (ja)
JP (1) JP2023546907A (ja)
WO (1) WO2022086996A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11606420B1 (en) * 2021-10-22 2023-03-14 Dell Products L.P. Method and apparatus for service routing
US20230289193A1 (en) * 2022-03-08 2023-09-14 Verizon Patent And Licensing Inc. Systems and methods for deploying a distributed containers-as-a-service platform architecture for telecommunications applications
CN116016196B (zh) * 2022-12-14 2024-10-11 四川新网银行股份有限公司 一种实时构建系统架构拓扑的方法及系统
CN118519727A (zh) * 2024-07-25 2024-08-20 济南浪潮数据技术有限公司 应用集群管理方法、装置、电子设备、存储介质及产品

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6424991B1 (en) * 1996-07-01 2002-07-23 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server communication framework
US8676843B2 (en) * 2002-11-14 2014-03-18 LexiNexis Risk Data Management Inc. Failure recovery in a parallel-processing database system
US7574424B2 (en) * 2004-10-13 2009-08-11 Sybase, Inc. Database system with methodology for parallel schedule generation in a query optimizer
US8380880B2 (en) * 2007-02-02 2013-02-19 The Mathworks, Inc. Scalable architecture
WO2019113553A1 (en) * 2017-12-08 2019-06-13 Net-Thunder, Llc Automatically deployed information technology (it) system and method

Also Published As

Publication number Publication date
EP4229512A1 (en) 2023-08-23
EP4229512A4 (en) 2024-08-07
WO2022086996A1 (en) 2022-04-28
US20220121502A1 (en) 2022-04-21

Similar Documents

Publication Publication Date Title
JP7391862B2 (ja) 自動的に配備される情報技術(it)システム及び方法
US10855537B2 (en) Methods and apparatus for template driven infrastructure in virtualized server systems
US10198281B2 (en) Hybrid infrastructure provisioning framework tethering remote datacenters
US9661071B2 (en) Apparatus, systems and methods for deployment and management of distributed computing systems and applications
US9612815B1 (en) Method and tool for automating deployment of reference implementation architectures for pre-integrated multi-product solutions
US9712604B2 (en) Customized configuration of cloud-based applications prior to deployment
US9754303B1 (en) Service offering templates for user interface customization in CITS delivery containers
US20220121502A1 (en) System and Method for Auto-Clustering of Clusterable Services
EP3149603B1 (en) Customized configuration of cloud-based applications prior to deployment
CA3143247A1 (en) Automatically deployed information technology (it) system and method with enhanced security
US11528186B2 (en) Automated initialization of bare metal servers
US20240202019A1 (en) Techniques for migrating containerized workloads across different container orchestration platform offerings
KR102723681B1 (ko) 자동 배포되는 정보 기술(it) 시스템 및 방법
US20240028357A1 (en) Large-scale testing and simulation
EP4390683A1 (en) Techniques for migrating containerized workloads across different container orchestration platform offerings
BOJOVI Application of Network Function Virtualization in Modern Computer Environments
Capez Microsoft Azure InfiniBand Configuration (technical report)
WO2024118056A1 (en) Cloud initiated bare metal as a service for on-premises servers
INFRASTRUCTURE VMware View on NetApp Deployment Guide
Cloud Intel® Cloud Builders Guide: Cloud Design and Deployment on Intel Platforms