Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

VM向けのKubervirt DPDKデータプレーンサポートの導入

概要 クラウドネイティブのContrail® Networking は、Kubernetesの高性能VMおよびコンテナネットワーク向けに、vRouter DPDKデータプレーン(Kubevirt)の導入をサポートします。

Kubevirt の概要

Kubevirt は、仮想マシン ワークロード(VM)と Kubernetes クラスター内のコンテナ ワークロードの管理(スケジューリング)を可能にするオープン ソースの Kubernetes プロジェクトです。Kubevirtは、開発者が共通の共有環境内のアプリケーションコンテナとVMの両方に存在するアプリケーションを構築、変更、導入する統合開発プラットフォームを提供します。Kubevirt は、Kubernetes クラスターに次の追加機能を提供します。

  • Kubevirt は、追加のタイプのポッド、カスタム リソース定義(CRD)を Kubernetes API サーバーに追加します。
  • 新しいタイプのポッドをサポートするクラスター全体ロジック用の追加コントローラ
  • 新しいタイプのポッドをサポートするノード固有ロジック用の追加デーモン

この新しい機能の結果、Kubevirt は VMI(VMI)オブジェクトを作成および管理 VirtualMachineInstance します。VMIには、(VM)と呼ばれるワークロードコントローラーが VirtualMachine 含まれています。VM は VMI の永続的な状態を維持します。これにより、ユーザーはデータや状態を変更せずに、VMを次回に終了および開始できます。さらに、Kubevirt を Kubernetes クラスタ上に導入して、従来のコンテナ ワークロードと Kubevirt が管理する VM を管理できます。VM は、追加の権限を必要としない Kubernetes クラスタ機能にアクセスできます。

Kubevirt DPDK の実装

Kubevirt は、通常、高速パケット処理のためのユーザー スペース ネットワークをサポートしていません。ただし、クラウドネイティブのContrail Networkingでは、KubevirtがVMのインターフェイスタイプをサポート vhostuser するための拡張機能を有効にします。これらのインターフェイスは、DPDK vRouter を使用してユーザー スペース ネットワーキングを実行し、DPDK vRouter が提供するパフォーマンスの向上とパケット処理へのアクセスをポッドに提供します。

DPDK vRouter アプリケーションのメリットを以下に示します。

  • パケット処理はユーザー 空間で行われ、カーネル スペースをバイパスします。これにより、パケット処理効率が向上します。
  • カーネル割り込みおよびコンテキスト スイッチは、パケットがカーネル スペースをバイパスするため発生しません。その結果、CPU のオーバーヘッドが少なくなり、データ スループットが向上します。
  • DPDKは、ユーザー空間におけるvRouterの転送プレーンを強化し、パフォーマンスを向上させます。
  • DPDK Lcoresは、ポーリングモードで実行されます。これにより、Lcores はパケットを受信した直後にパケットを受信して処理できます。

Kubevirtの導入

前提 条件

Kubevirt を導入するには、アクティブな Kubernetes クラスターとクライアントを kubectl 使用する機能が必要です。

クラウドネイティブのContrail Networking Kubevirt Forkの導入

現在の Kubevirt リリース(v0.48.0)は、インターフェイスを有効にする拡張機能を vhostuser サポートしていません。ジュニパーは、この DPDK インターフェイスをサポートする Kubevirt フォークを維持しています。このKubervirt forkは、クラウドネイティブのContrail Networkingを実行する環境で使用するためのものです。フォークの変更は、Kubevirt リリース バージョン(v0.40.0)上でコミットされ、fork からバージョン(v.0.40.0-jnpr)としてタグ付け/リリースされます。

Kubevirt オペレーターと Kubevirt CR も fork リポジトリからリリースされます。Kubevirt のオペレータは、Kubevirt のコア コンポーネントのライフサイクルを管理します。Kubevirt オペレーターと CR がクラスター内の仮想化を可能にします。

以下のコマンドを使用して、Kubevirt fork、Kubevirt CR、Kubevirt の各オペレータを導入します。リリース バージョン(v0.40.0)とインストール ファイル パスに注意してください。

クラウドネイティブのContrail Networking Kubevirt fork

コンテナとともに VM を起動する

Kubevirt を使用すると、Kubernetes で VM を起動および管理することは、ポッドの導入と同様です。を使用して VM オブジェクトを kubectl作成できます。VM オブジェクトを作成すると、その VM はアクティブで、クラスターで実行されます。

コンテナとともに VM を起動するには、次の大まかな手順を使用します。

  1. を作成します。 VirtualNetwork
  2. VM を起動する

VM を起動する

以下 VirtualMachine の仕様は、インターフェイスの量が異なるインスタンスの例 VirtualMachine です。

  • 単一 vhostuser インターフェイスVM:
  • マルチ vhostuser インターフェイス:
  • ブリッジ/vhostuser インターフェイスVM:

仮想ネットワークの作成

以下 net-attach-def のオブジェクトは、仮想ネットワークの例です。

VM を起動する

以下 VirtualMachine の仕様は、インターフェイスの量が異なるインスタンスの例 VirtualMachine です。

  • 単一 vhostuser インターフェイスVM:
  • マルチ vhostuser インターフェイス:
  • ブリッジ/vhostuser インターフェイスVM: