SR-IOVベースのワークロード向けCN2 Apstra統合
概要 このトピックでは、ジュニパー®クラウドネイティブContrail Networkingの仮想ネットワークを、SR-IOV対応ネットワークのApstra管理ファブリックに拡張する方法について説明します。ジュニパーネットワークスは、Kubernetes オーケストレーション環境で Contrail Networking リリース 22.4 以降を使用して、この統合機能をサポートしています。
概要
サーバー上の SR-IOV 対応 NIC を使用して、効率的な I/O 仮想化を実現します。SR-IOV 技術により、物理 NIC を複数の仮想機能に分割できます。これらの仮想NICまたは仮想機能は、vRouterを通過するのではなく、パケットを直接送受信できます。SR-IOV サーバー上にワークロードを作成し、仮想機能をポッドにアタッチすると、ワークロードはファブリック アンダーレイを直接使用します。
Juniper Apstraを使用してファブリックをプロビジョニングし、SR-IOVワークロードに必要なアンダーレイ接続を提供します。Apstraは、データセンターネットワークの設計、導入、運用を自動化および検証する、ジュニパーのインテントベースネットワーク構築ソフトウェアです。CN2とApstraソフトウェアを統合して、SR-IOVポッドのファブリックアンダーレイをプロビジョニングできます。
ドキュメント内の プライマリノード を参照してください。Kubernetes は マスター ノードを指します。Kubernetes の用語におけるマスター ノードと相互に関連付けるプライマリ ノードに関するこのガイドで参照されています。
例:CN2 Kubernetesの導入
図1 は、CN2 Kubernetesの導入例を示しています。この導入では、Apstraを使用して、SR-IOVポッドのファブリックアンダーレイをプロビジョニングします。 表 1 では、さまざまなコンポーネントについて説明します。
コンポーネント | の説明 |
---|---|
SR-IOV ワーカー ノード | SR-IOV ワーカー ノードは、ファブリック内のリーフ デバイスに接続します。これらのノードは、CN2クラスターの一部であり、仮想機能に分割してポッドに接続できるSR-IOV対応NICを備えています。SR-IOVワーカーノードでポッドを作成すると、ポッドのインターフェイスがSR-IOV対応NIC上の仮想機能に接続されます。 |
CN2 Apstraプラグイン | CN2 Apstraプラグインは、仮想ネットワークをファブリックに拡張します。このプラグインは、NADの作成、ポッドの仮想ネットワークへの接続、仮想ネットワークルーター(VNR)の作成などのCN2 Kubernetesイベントをリッスンします。プラグインは次に、Apstraを介してアンダーレイのファブリックを設定します。 |
Apstra | Apstraは、SR-IOVポッドに必要なアンダーレイ接続を提供するためにファブリックをプロビジョニングします。Apstraは、どのリーフポートがどのワーカーノードに接続されているかに関するトポロジー情報も提供します。CN2 Apstraプラグインは、この情報を使用して仮想ネットワークメンバーシップを設定します。このプラグインは、SR-IOV ポッドが生成されるワーカー ノードに基づいて、関連するファブリック ポートのメンバーシップを設定します。 |
前提 条件
CN2 Apstra設定でSR-IOVデバイスを設定する前に、以下をインストールする必要があります。
-
Apstraソフトウェア4.0以上
-
SR-IOV対応NICを備えたワーカーノードを持つCN2クラスター
-
次のCN2コンテナネットワークインターフェイス(CNI)プラグイン:
-
Multusプラグイン
-
SR-IOV ネットワーク デバイス プラグイン
-
CN2 Apstraプラグイン
-
CN2 IPAMプラグイン
-
-
トポロジーで使用しているスイッチのライセンス
ジュニパーのQFXスイッチには、高度な機能に対するソフトウェアライセンスが必要です。ファブリックに必要なライセンスがあることを確認するには、 ジュニパーネットワークスライセンスガイドを参照してください。
メモ:インストールワークフローのステップ4で説明されているように、ファブリックをApstraのブループリントにオンボードしてください。
考慮 事項
インストールを開始する前に、以下の考慮事項の一覧を参照してください。
-
この機能は以下を想定しています。
-
CN2単一クラスターの導入
-
SR-IOVポッド間の通信
-
SR-IOVポッド間のVNI内およびVNI間通信の基本的な使用事例。ハブアンドスポーク型ルーティングなど、その他の形式のルーティングはサポートされていません。
-
-
この機能は、SR-IOV ワーカー ノードを 1 つのリーフ デバイスにのみ接続する、シンプルなスパイン リーフ トポロジーを想定しています。SR-IOVワーカーノードが複数のリーフポートに接続されている場合、このSR-IOVワーカーノードが接続されているすべてのリーフデバイス上のすべてのリーフポートを設定します。
-
CN2では、VNI間ルーティング用にポッド上のルートを手動で設定する必要があります。例えば、 コマンド
ip route add 10.30.30.0/8 via 10.20.20.1
を使用して他の仮想ネットワークに到達することができます。 -
重複するIPと接合されたインターフェイスは使用されていません。
-
IPv4アドレスのみが使用されています。
インストールワークフロー
CN2 Apstraプラグインとその前提条件をインストールして設定するには、この手順の手順に従います。
-
Apstraソフトウェアをインストールします。
Apstraソフトウェア4.0以上をインストールして設定します。 Juniper Apstraのインストールおよびアップグレードガイドを参照してください。
既存のデータセンターネットワークを使用している場合、Apstraはすでにファブリックを管理しています。ブループリントには、ASNやループバックIPアドレスなど、必要なリソースプールを割り当てるようにしてください。
-
CN2クラスタをインストールします。
Kubernetesワーカーノードを含むCN2クラスターをインストールして設定します。手順については、 アップストリームKubernetes向けCN2インストールガイド または OpenShiftコンテナプラットフォーム用CN2インストールガイドの「インストール」 セクションを参照してください。
-
プラグインをインストールします。
-
Multusプラグイン:
このプラグインを使用すると、複数のネットワークインターフェイスをポッドにアタッチできます。インストール手順については、 Kubernetesの場合は Multus CNI 、 OpenShiftについては Multus CNI を参照してください。
-
SR-IOV ネットワーク デバイス プラグイン:
このプラグインは、Kubernetes ホスト上の SR-IOV 仮想機能のネットワーク リソースを検出およびアドバタイズします。手順については、 Kubernetes用SR-IOVネットワークデバイスプラグイン または SR-IOVネットワークデバイスプラグインを参照 してください。
-
CN2 Apstraプラグイン:
このプラグインは、CN2導入者の一部としてインストールされています。プラグイン をインストールするには、 CN2 Apstraプラグインのインストールと設定 を参照してください。
-
CN2 IPAMプラグイン:
このプラグインは、ポッドに IP アドレスを割り当てます。このプラグインは、SR-IOV ノードにインストールします。プラグイン をインストールするには、 CN2 IPAMプラグイン のインストールを参照してください。
-
-
Apstraのファブリックをオンボードします。
Apstra Web GUIからApstraのファブリックをオンボードしましたオンボーディング手順については、 Juniper Apstraユーザーガイド.を参照してください。
-
必ず、ASN やループバック IP アドレスなどの必要なリソース プールをブループリントに割り当てます。
-
Apstraブループリントの汎用システム(つまりサーバー)のホスト名が、対応するCN2ノードのホスト名と一致するようにしてください。また、ワーカー ノード上の SRIOV 対応 NIC をファブリック ポートに接続する SR-IOV リンクにタグを付ける必要があります。プラグインをインストールするときに、CN2 ApstraプラグインCRDにこの同じ値
sriov_link_tag
を入力します。次の図は、一般的なシステムのホスト名がCN2ワーカーノードの対応するホスト名と一致するように編集されたApstraブループリントのトポロジーの例を示しています。図は、前述の SR-IOV リンク用に設定された SRIOV タグも示しています。
-
-
インストールを確認します。
インストラクションについては、 インストールの確認 を参照してください。
CN2 Apstraプラグインのインストールと設定
このセクションでは、CN2 Apstraプラグインをインストールおよび設定する方法について説明します。
CN2 Apstraプラグインは、導入者の一部としてインストールされます。CN2 Apstraプラグインは、仮想ネットワークをファブリックに拡張し、CN2 Kubernetesイベント(NADの作成など)をリッスンし、Apstra SDKを介してアンダーレイ用のファブリックを設定します。
インストールに応じて、以下のファイルを使用してプラグインをインストールおよび設定します。
-
Kubernetes の場合は、ファイルを使用します
single_cluster_deployer_example.yaml
。 -
OpenShift では、ディレクトリ構造でディレクトリ内
ocp/plugins
のすべてのファイルを 1 つのレベルアップにコピーします。
CN2 Apstraプラグインをインストールして設定するには、次の手順にしたがっています。
-
ファイル内と
contrail-apstra-plugin
のapstra-plugin-secret
コメントを解除しますsingle_cluster_deployer_example.yaml
。 -
対応する deployer ファイルのセクションに
apstra-plugin-secret
資格情報(ユーザー名とパスワード)を入力します。資格情報が base64 エンコードされていることを確認します。例えば:
apiVersion: v1 data: password: YWRtaW4K username: YWRtaW4K kind: Secret metadata: name: apstra-plugin-secret namespace: contrail type: Opaque
-
次の例に示すように、
contrail-apstra-plugin
の パラメータblueprint name, server_ip, sriov_link tag
を 入力します。のパラメータsriov_link tag
が、Apstraソフトウェアで指定したパラメータと同じであることを確認します。この例では、画像を取得する
contrail-apstra-plugin
場所からの画像 URL も表示します。必要に応じて、画像の URL を編集できます。例えば、画像内の 値をrelease_number
にR22.4-5
変更することができます。apiVersion: plugins.juniper.net/v1alpha kind: ApstraPlugin metadata: name: contrail-apstra-plugin namespace: contrail spec: blueprint: "" common: containers: - image: enterprise-hub.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-apstra-plugin:release number name: contrail-apstra-plugin server_ip: "" sriov_link_tag: ""
各フィールドの意味を理解するために、 コマンドを実行してください
kubectl explain apstraplugin.spec
。メモ:以下の例は情報提供のみを目的としています。このコマンドは、CN2 Apstraプラグインを導入した後にのみ実行できます。
kubectl explain apstraplugin.spec KIND: ApstraPlugin VERSION: plugins.juniper.net/v1alpha1 RESOURCE: spec <Object> DESCRIPTION: ApstraPluginSpec defines the desired state of ApstraPlugin FIELDS: blueprint <string> The BluePrint in Apstra managing the Fabric which acts as underlay for this CN2 instance common <Object> Common configuration for k8s pods and containers log_level <string> The log level of Apstra plugin server_ip <string> The Apstra server IP address sriov_link_tag <string> Contains the tag value(eg: SRIOV) for the SRIOV links in Apstra BluePrint vni_offset <integer> Specifies the offset to be added to the CN2 VNI for configuring the VNI in Apstra's VN or RZ. Default is 4096. Note that CN2 VNI starts from 1 where as Apstra expects VNI above 4096
上記の手順では、CN2 Apstraプラグインをインストールするために導入者に必要な変更を行いました。 アップストリームKubernetes向けCN2インストールガイドまたはOpenShiftコンテナプラットフォーム向けCN2インストールガイド のインストラクションに従って 、CN2のインストールを進めることができます。
CN2のインストールが完了した後でも、上記の手順で説明したようにデプロイしているYAMLでCN2 Apstraプラグインパラメーターを編集してから、CN2を再インストールすることもできます。
インストールの確認
以下 kubectl
のコマンドを実行して、インストールが稼働していることを確認します。例えば:
Check for the multus plug-in. kubectl get pods -A | grep multus kube-system kube-multus-ds-dn5j8 1/1 Running 1 26d kube-system kube-multus-ds-mnd4j 1/1 Running 1 26d kube-system kube-multus-ds-xvt5v 1/1 Running 2 26d- -------------------------------------------------------------------------------------------------------------------------------- Check for the sriov-device-plugin. kubectl get pods -A | grep sriov-device-plugin kube-system kube-sriov-device-plugin-amd64-2l792 1/1 Running 0 6d8h kube-system kube-sriov-device-plugin-amd64-n2lxv 1/1 Running 1 6d8h kube-system kube-sriov-device-plugin-amd64-v8tqx 1/1 Running 1 26d -------------------------------------------------------------------------------------------------------------------------------------------- Check if the virtual functions were discovered. kubectl describe node jfm-qnc-05.lab.juniper.net | grep -A8 Allocatable Allocatable: cpu: 64 ephemeral-storage: 189217404206 hugepages-1Gi: 0 hugepages-2Mi: 0 intel.com/intel_sriov_netdevice: 7 memory: 263710404Ki pods: 110 System Info: -------------------------------------------------------------------------------------------------------------------------------------------- Check for the Apstra plug-in CRDs. kubectl api-resources | grep apstra apstraplugins plugins.juniper.net/v1alpha1 true ApstraPlugin -------------------------------------------------------------------------------------------------------------------------------------------- Check for the Apstra secret. kubectl get secrets -A | grep apstra contrail apstra-plugin-secret Opaque 2 20d ------------------------------------------------------------------------------------------------------------------------------------------- Check for the contrail-apstra-plugin pod. kubectl get pods -A | grep apstra contrail contrail-apstra-plugin-fd86dd969-5s94s 1/1 Running 8 (6d7h ago) 12d
CN2 IPAMプラグインをインストールする
この手順に従って、KubernetesとOpenShiftの両方の導入にCN2 IPAMプラグインをインストールします。この手順では、CN2がすでにKubernetesクラスタにインストールされていることを前提としています。この手順では、単一クラスタの導入を示します。
CN2 IPAMプラグインをインストールして設定するには、次の手順にしたがっています。
SR-IOV の使用事例
このセクションでは、VNI内トポロジーとVNI間トポロジーにおけるSR-IOVのユースケースの例を示します。
VNI内:同じ仮想ネットワークに属するポッド
このVNI内のユースケースでは、ポッドは同じ仮想ネットワークに接続されています。デフォルトでは、同じ仮想ネットワークに接続されたポッドは、以下のかどうかにかかわらず、相互に通信できます。
-
ポッドは、同じ SR-IOV ワーカー ノードまたは異なる SR-IOV ワーカー ノードで生成されます。
または
-
SR-IOV ワーカー ノードは、同じリーフ デバイスまたは別のリーフ デバイスに接続されます。
図2 は、VNI内トポロジーの例を示しています。このスパイン リーフ トポロジーは、2 つの SR-IOV ワーカー ノードを示しています。各ノードには、SR-IOV が有効になっている物理 NIC があります。これらの物理NIC(ens801f2およびens801f3)は仮想機能に分割し、直接入出力(I/O)のためにポッドに接続できます。パケットがこれらの仮想機能を移動すると、パケットは正しいVLANでタグ付けされます。この例では、各ポッドは同じ仮想ネットワークに属しています。このユースケースでは、パケットはvRouterを通過しません。代わりに、パケットはApstraによってプロビジョニングされたファブリックアンダーレイに直接送信されます。
VNI間ルーティング:異なる仮想ネットワークに属するポッド
図 3. は、VNI間トポロジーの例を示しています。このトポロジーでは、トポロジー内のポッドは 2 つの異なる仮想ネットワークに属します。これらのネットワーク間のルーティングを有効にするには、CN2でVNR(仮想ネットワークルーター)を作成する必要があります。手順については、 VNI間ポッド通信の設定を参照してください。
VNI間トポロジーで使用するためにサポートされているジュニパーデバイスの一覧については、 EVPN-VXLANトポロジーにおけるレイヤー3接続を参照してください。また、QFX デバイスで Junos OS バージョン 20.2R2.11 以上が動作していることを確認します。
VNI内ポッド通信を設定する
VNI内ポッド通信を設定するには:
VNI間ポッド間通信を設定する
VNI間ポッド間通信を設定するには: