Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

ポッドスケジューリング

概要 ジュニパークラウドネイティブのContrail Networking(CN2)リリース23.1は、 を使用した contrail-schedulerネットワーク対応ポッドスケジューリングをサポートしています。この機能は、ポッドをスケジューリングする前にノードのネットワークメトリックを分析するプラグインで、Kubernetesポッドスケジューラを強化します。この記事では、ネットワーク対応ポッドスケジューリングの概要、実装、導入情報を提供します。

Kubernetesでのポッドスケジューリング

Kubernetesでは、スケジューリングとは、ポッドをノードに一致させるプロセスを指し、kubeletがポッドを実行できるようにします。スケジューラーは、ポッド作成のリクエストを監視し、スケジューリングとバインディングサイクル中に一連の拡張ポイントを使用して、これらのポッドを適切なノードに割り当てようとします。潜在的なノードは、ポッドのリソース要件などの属性に基づいてフィルタリングされます。ノードにポッドに使用可能なリソースがない場合、そのノードは除外されます。複数のノードがフィルタリングフェーズに合格した場合、Kubernetesは特定のポッドに対する適合性に基づいて残りのノードをスコアし、ランク付けします。スケジューラーは、ランキングが最も高いノードにポッドを割り当てます。2 つのノードのスコアが同じ場合、スケジューラーはランダムにノードを選択します。

CN2でのポッドスケジューリング

CN2リリース22.4は、デフォルトのKubernetesポッドスケジューラを拡張し、DPDKノードの仮想マシンインターフェイス(VMI)の考慮事項に基づいてポッドをスケジュールします。と呼ばれる contrail-schedulerこの拡張スケジューラは、DPDKノードの現在のアクティブなVPIに基づいてポッドのスケジューリングを有効にするカスタムプラグインをサポートしています。

CN2リリース23.1は、2つの追加プラグインをサポートすることで、この機能を改善します。これらのプラグインの結果、 contrail-scheduler 以下のネットワークメトリックに基づいてポッドをスケジュールします。

  • アクティブなイングレス/エグレス トラフィック フローの数

  • 帯域幅の利用

  • 仮想マシン インターフェイス(VMI)の数

ネットワーク認識型ポッドスケジューリングの概要

多くのハイパフォーマンスアプリケーションには、帯域幅やネットワークインターフェイスの要件のほか、一般的なCPUやVSIの要件があります。帯域幅の可用性が低いノードにポッドを割り当てると contrail-scheduler 、そのアプリケーションは最適に動作できません。CN2リリース23.1は、メトリックコレクター、中央コレクター、カスタムスケジューラプラグインの導入により、この問題に対処します。これらのコンポーネントは、ネットワークメトリックを収集、保存、処理し、これらのメトリックに contrail-scheduler 基づいてポッドをスケジュールします。

ネットワーク認識型ポッド スケジューリング コンポーネント

CN2のネットワーク対応ポッドスケジューリングソリューションは、以下の主要コンポーネントで構成されています。

  • メトリックコレクター:これは、コンテナ内で、クラスター内の各ノードで実行されるvRouterポッドとともに実行されます。.vRouter エージェントは、vRouter CR の フィールドで指定された方法localhost: 6700collectors agent: default:メトリック データをメトリック コレクターに送信します。Deploymentメトリック コレクターは、構成で指定された構成済みのシンクに要求されたデータを転送します。中央コレクターは、構成済みのシンクの 1 つであり、メトリック コレクターからこのデータを再入力します。

  • 中央コレクター: このコンポーネントはアグリゲータとして機能し、メトリック コレクターを介してクラスター内のすべてのノードから受信したデータを保存します。中央コレクターは、コンシューマがクラスター内のノードに対してこのデータを要求するために使用する gRPC エンドポイントを公開します。例えば、 は、 contrail-scheduler これらのgRPCエンドポイントを使用して、ネットワークメトリックを取得して処理し、それに応じてポッドをスケジュールします。

  • Contrail スケジューラ:このカスタム スケジューラには、次の 3 つのカスタム プラグインが導入されています。

    • VMICapacity プラグイン(リリース 22.4 以降から利用可能):スケジューラ フレームワークにフィルター、スコア、拡張 NormalizeScore ポイントを実装します。これらの contrail-scheduler 拡張ポイントを使用して、アクティブなVPIに基づいてポッドを割り当てる最適なノードを決定します。

    • FlowsCapacity プラグイン:ノード内のアクティブフローの数に基づいてポッドをスケジュールするのに最適なノードを決定します。ノード上のトラフィックフローが多すぎると、新しいポッドトラフィックの競争が激しくなります。フロー数が低いポッドとノードは、スケジューラによって上位にランク付けされます。
    • BandwidthUsage プラグイン:ノードの帯域幅使用量に基づいてポッドを割り当てるための最適なノードを決定します。1 秒あたりの帯域幅使用量(進行中および送信トラフィック)が最も少なくなったノードは、最も高いランクです。

      メモ:

      設定したプラグインに応じて、各プラグインはスコアをスケジューラーに送信します。スケジューラーは、すべてのプラグインから加重スコアを取得し、ポッドをスケジュールするのに最適なノードを見つけます。

ネットワーク対応ポッドスケジューリングコンポーネントの導入

ネットワーク対応ポッドスケジューリング用のコンポーネントの展開については、以下のセクションを参照してください。

メトリックコレクターの導入

一元的なコレクターの導入

Contrail スケジューラの導入

メトリックコレクターの導入

CN2には、デフォルトでvRouterポッド導入にメトリックコレクターが含まれています。 agent: default: vRouter仕様のフィールドには、 collectors: メトリックコレクターの再シーバーアドレスで設定されたフィールドが含まれています。以下の例は、 の値 collectors: - localhost: 6700を示しています。メトリックコレクターはvRouterエージェントと同じポッドで実行されるため、ポートを介して localhost 通信できます。ポート 6700 はメトリック コレクターの再切り替えアドレスとして固定されており、変更できません。vRouter エージェントはメトリック データをこのアドレスに送信します。

以下に、コレクターを有効にしたデフォルトの vRouter 導入のセクションを示します。

一元的なコレクターの導入

中央コレクター の配置 オブジェクトは、常に レプリカ 数が 1 に設定されている必要があります。以下 Deployment のセクションでは、例を示します。

A configMap は、クラスター内のポッドにキー値設定データを提供します。一元的なコレクター構成用 の を configMap作成します。この設定はコンテナにマウントされます。

以下に、一元的なコレクター構成ファイルの例を示します。

この設定ファイルには、以下のフィールドが含まれています。

  • http_port: 中央コレクター gRPC サービスが実行するポートを指定します。

  • tls_config: 何 server_name に関連付けられた一元的な key_file コレクター サービスを指定します。このフィールドには、アップストリーム(ノースバウンド API)サーバー情報が含まれています。

  • service_name: 中央コレクターが公開するサービスの名前を指定します。この場合、 central-collector.contrail 中央コレクター Deploymentの上にサービスとして公開されます。クラスター内のコンシューマは、このサービス名を使用して中央コレクターと対話できます。

  • metric_configmap: このセクションのフィールドは、メトリック コレクター configMapの詳細を示します。中央コレクターは、この情報を使用して、シンクが受信する必要なメトリックをメトリック コレクター シンクを構成します。以下は、 を作成するためのサンプル コマンドです configMap

中央コレクター Deploymentの例を次に示します。

メモ:

導入する前に volume 、 と volumeMounts fied を検証します。

中央コレクター サービスは、オブジェクトの上に Deployment 公開されます。次の YAML ファイルは、中央コレクター サービス ファイルの例です。

メモ:

フィールドは、 name 一元的なコレクター構成で指定されたサービス名と一致する必要があります。名前空間は、中央コレクターの配置の名前空間と一致する必要があります。例えば、 namespace: contrail.

Contrail スケジューラの導入

次の手順を実行して、以下を展開します contrail-scheduler

  • の名前空間を作成します contrail-scheduler
  • オブジェクト(必須)を ServiceAccount 作成し、 のクラスターロールを設定しますServiceAccount。クラスターServiceAccount内のポッドまたはコンポーネントにロールを割り当てます。この場合、 フィールドkind: ClusterRoleに、デフォルトの contrail-scheduler ServiceAccount Kubernetes スケジューラ(kube-scheduler)とname: system:kube-scheduler同じ権限を付与します。

  • configMap VMI プラグイン構成用の を作成します。と同じ名前空間を作成configMapするcontrail-schedulerDeployment必要があります。

    以下に、VMIプラグインの構成例を示します。

  • ファイルの を Secret 作成しますkubeconfig。このファイルは、 にSecretsマウントされたボリューム内のcontrail-schedulerDeploymentファイルまたはコンテナー環境変数として機密データを格納します。

  • configMapコンフィグ用に contrail-scheduler を作成します。

    スケジューラ構成の例を以下に示します。

    以下のフィールドに注意してください。

    • schedulerName: デプロイするスケジューラーの名前。

    • pluginConfig:展開に含まれるプラグインに関する情報が contrail-scheduler 含まれています。この展開には、以下のプラグインが含まれています。

      • VMICapacity

      • FlowsCapacity

      • BandwidthUsage

    • config:このフィールドには、VMI プラグイン設定がマウントされているファイルパスが含まれています。

    • multiPoint:含まれている各プラグインの拡張ポイントを有効にできます。プラグインの特定の拡張ポイントを有効にする代わりに、 multiPoint フィールドを特定のプラグイン用に開発されたすべての拡張ポイントを有効または無効にしてみましょう。プラグインの重みは、プラグインから特定のスコアの優先度を決定します。これは、採点の最後に、すべてのプラグインが重み付きスコアを送信することを意味します。ポッドは、集約されたスコアが最も高いノードでスケジュールされます。

  • . を作成しますcontrail-schedulerDeployment。以下は、 の例ですDeployment

これを Deployment適用すると、新しい contrail-scheduler ファイルがアクティブになります。

Contrailスケジューラを使用してポッドを展開する

新しいポッドをスケジュールする(デプロイする)を使用contrail-schedulerするフィールドに、自分contrail-schedulerschedulerNameの名前を入力します。定義されたポッド マニフェストの例を次にschedulerName示します。