注意:

使用多用途的 VM 型 Oracle Container Engine for Kubernetes 節點設定 Pod 的 SR-IOV 介面

簡介

當網路導向工作負載需要在 Pod 內設定次要網路介面時,我們可以使用像是 Multus 這樣的描述資料 CNI 來達到此目的。這些情況下通常連接的次要網路介面將具有特殊化的網路功能或特性,例如單一根 IO 虛擬化 (SR-IOV)。

在教學課程中:使用多部裸機 OKE 節點設定 Pod 的 SR-IOV 介面 (您可以從「相關連結」區段存取連結),其中涵蓋如何在 Oracle Cloud Infrastructure (OCI) 上的裸機 Kubernetes 節點上達成此目的,您可以直接在已連附至裸機執行處理的硬體上建立虛擬功能 (VF)。

本教學課程遵循 Oracle Container Engine for Kubernetes (OKE) 叢集中虛擬機器節點的相似方法,在裸機節點上使用的組態和外掛程式採用相似的方法。在裸機之間建立和管理介面有很大的差異,因為您完全掌控虛擬機器的硬體和虛擬機器,而虛擬機器管理程式會抽象您對基礎硬體的存取,而且您並沒有控制權。

此處描述的方法使用 Multus 為 Pod 提供多個介面,但不會使用 SR-IOV CNI 和相關的裝置外掛程式。這是因為 SR-IOV CNI 要求存取底層的硬體 (PF),這很顯然會對虛擬機器構成挑戰。為了克服此挑戰,我們可以使用 VNIC 的 OCI 網路 API 在實體功能 (PF) 上建立虛擬功能 (VF),例如裸機情況,然後提供 VM 直接和非結構化對此 VF 的存取。這些 VF 可以連附至運算執行處理 (包括 OKE 節點) 作為網路介面。這些介面 /VF 可以移至 Pod 的網路名稱空間,讓 Pod 可以直接使用該 VF 作為網路介面。從 Pod 的角度來看,它無法區別兩者,而且在兩種情況下都可以存取可以直接使用的 VF。

若要讓 VM 直接存取 VF,我們需要以 VFIO 網路連附模式啟動 VM,而非預設的半虛擬化模式。此選擇由運算執行處理的啟動模式控制。將網路連附模式設為 VFIO 之後,我們便可以使用 OCI API 建立網路連附項,此 API 會在基礎 PF 上建立 VF,並直接將 VF 提供給 VM。主機上的作業系統會將這些識別為網路介面。VM 可使用 VF 之後,即可將它移到 Pod 名稱空間。在此模型中,VF 是使用 OCI API 建立的,而非使用裸機案例中的系統指令。

VF 已移入 Pod 網路命名空間中

目標

使用多用途的 VM 型 Oracle Container Engine for Kubernetes 節點設定 Pod 的 SR-IOV 介面。

必要條件

注意:此教學課程已在具有 Flannel 網路的 OKE 叢集上驗證 (Flannel 作為主要 CNI)。

作業 1:設定節點

每個需要存取 SR-IOV 介面的節點都必須先備妥硬體輔助的網路附件,才能被 Pod 使用。

  1. 以 VFIO 模式啟動節點

    • 在叢集中建立節點集區與一組節點。

    • 建立節點之後,請編輯執行處理特性。

      編輯執行處理 1

    • 在執行處理特性上,按一下顯示進階選項以檢視其他特性。在 [ 啟動選項 ] 標籤中,選擇 [ 網路類型 ] 的 [ 硬體輔助 (SR-IOV) 網路 ]。

      編輯執行處理選項

      注意:一旦將執行處理的半虛擬化網路連附項切換成硬體輔助 (SR-IOV 或 VFIO) 模式,就無法再進行基礎架構維護。

    • 更新工作流程將會提示您重新啟動執行處理。重新啟動執行處理之後,將會有 VFIO 網路連附項。這可在主控台上驗證。

      vfio 驗證

    • 另一個確認執行處理是否使用 SR-IOV 網路連附項的方法是將 SSH 連線至節點,並使用 lspci 列出 VM 上的 PCI 裝置。您應該能夠像使用 virtio 驅動程式的裝置一樣,直接在 VM 上看到底層的虛擬功能 (例如下方影像中的儲存控制器)。

      vfio 驗證

    • 此時,節點會有一個 VNIC 連附項,這是用於對節點進行所有通訊的主要 VNIC。由於執行處理使用硬體輔助的網路連附項,因此節點可以看到該網路連附作為基礎硬體上的虛擬功能。為了 Pod 獨佔使用虛擬功能 (VF),我們在 VM 上需要額外的 VF。您可以使用主控台或 API 將額外的 VNIC 連附項新增至執行處理。這些 VNIC 附件是基礎 PF 上的 VF。可使用 lspci 進行驗證。

  2. 新增其他 VNIC 連附項

    • 從執行處理頁面選擇連附的 VNIC ,然後按一下建立 VNIC

      附加 vnic

    • 使用所需的 VCN 和子網路來設定 VNIC。

      配置 vnic

    • 檢查主機上是否可以像以前一樣,透過節點上的 SSH 連線並執行 lspci 一樣,查看 VNIC。

      增加族群

    • 當您將次要 VNIC 新增至 Linux VM 執行處理時,新的介面 (亦即乙太網路裝置) 會新增至執行處理,並自動被作業系統辨識。不過,次要 VNIC 未啟用 DHCP,您必須使用靜態 IP 位址和預設路由來配置介面。

  3. 設定次要 VNIC 的作業系統

    • OCI 提供文件和命令檔,以便為次要 VNIC 設定作業系統。若要設定次要 VNIC,請下載節點上的命令檔,然後根據 OCI 文件中提供的指示執行。

      Note: The secondary VNICs on each node must be set up by repeating these steps for each node. These steps can be optionally and automated using a custom cloud_init script for the nodes.

    • 使用介面的 IP 位址和預設路由驗證介面是否已連線。若要檢查,請使用 ip addrnmcli 指令。

      鏈接有效

    • (選擇性) 使用 ping 來確認路由,以相互連線次要 IP 位址。在下方影像中,10.0.10.238 是叢集中第二個節點上的次要 IP。

      ping1

      ping2

作業 2:安裝 Meta-Plugin CNI (多重)

Multus 是一種中繼外掛程式,它可以將 VF 資訊提供給下游 CNI (例如 SR-IOV CNI 外掛程式),以處理網路資源探測,同時啟用具有多個網路介面的「多址」Pod 或 Pod。

注意:Multus 4.0 之後,Multus 推出名為「複雜外掛程式」的新用戶端伺服器樣式部署。新的厚重 Plug-in 支援其他功能,例如先前不支援的度量。本文件使用 'thin' 外掛程式,因為它使用較少的資源。

  1. 若要安裝 Multus,請執行下列指令。

    git clone https://github.com/k8snetworkplumbingwg/multus-cni.git && cd multus-cni
    kubectl apply -f deployments/multus-daemonset.yml && cd ..
    

注意:安裝時,標記為 stable 的常駐程式集所使用的預設影像需要 kubelet 為 v1.20.x。若在較舊的叢集上安裝,請編輯清單中的子集,然後使用多重使用者影像標記 v3.7.1

此清單會為 kind:NetworkAttachmentDefinition 建立新的 CRD,並透過常駐程式在所有節點上提供 Multus 二進位檔。您可以確保在您的節點上執行 Multus daemonset,確認安裝。

作業 3:將多個介面附加至 Pod

作業 4:部署具有多重介面與測試的 Pod

Pod 現在可以使用註解來要求其他介面。此註解可讓 meta-plug-in (Multus) 瞭解在建立 Pod 時用來提供其他介面的 NetworkAttachmentDefinition (CNI 組態)。

注意:使用像本範例所示的靜態組態時,Pod 必須設定節點相關性,因此 Pod 會排定在可使用所需主機裝置的節點上。

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center