Nota:

Configura interfacce SR-IOV per i pod utilizzando Multus per nodi Oracle Container Engine for Kubernetes basati su VM

Introduzione

Quando carichi di lavoro altamente orientati alla rete richiedono la configurazione di interfacce di rete secondarie all'interno dei pod, possiamo utilizzare una meta CNI come Multus per raggiungere questo obiettivo. Le interfacce di rete secondarie generalmente collegate in questi casi avranno funzionalità o proprietà di rete specializzate come la virtualizzazione SR-IOV (Single Root IO Virtualization).

In una esercitazione precedente: configurare le interfacce SR-IOV per i pod che utilizzano Multus per i nodi OKE Bare Metal (è possibile accedere al collegamento dalla sezione Collegamenti correlati), abbiamo descritto come farlo sui nodi Kubernetes Bare Metal su Oracle Cloud Infrastructure (OCI), in cui è possibile creare direttamente le funzioni virtuali (VF) nell'hardware collegato all'istanza Bare Metal.

Questa esercitazione segue un approccio simile per i nodi Virtual Machine in un cluster OKE (Oracle Container Engine for Kubernetes) e adotta un approccio simile, con configurazioni e plugin diversi da quelli utilizzati sui nodi Bare Metal. Esistono differenze significative nel modo in cui le interfacce vengono create e gestite tra Bare Metal in cui hai il controllo completo sull'hardware e sulle Virtual Machine in cui un hypervisor sottrae l'accesso all'hardware sottostante e non ne hai tanto controllo.

L'approccio descritto qui utilizza Multus per fornire più interfacce a un pod, tuttavia il CNI SR-IOV e il plugin dispositivo associato non vengono utilizzati. Questo perché l'SR-IOV CNI richiede l'accesso all'hardware sottostante, la funzione fisica (PF), che ovviamente pone una sfida sulle macchine virtuali. Per superare questa sfida, possiamo utilizzare le API di networking OCI per le VNIC, per creare una funzione virtuale (VF) nella funzione fisica (PF), come nello scenario Bare Metal e fornire alla VM un accesso diretto e libero a questo VF. Questi VF possono essere collegati a un'istanza di computazione, inclusi i nodi OKE, come interfacce di rete. Queste interfacce/VF possono essere spostate negli spazi di nomi di rete per i pod, che consentono al pod di utilizzare in modo diretto ed esclusivo VF come interfaccia di rete. Dal punto di vista dei Pod, non sarà in grado di distinguere tra i due, e in entrambi i casi avrà accesso a un VF che possono utilizzare direttamente.

Per concedere a una VM l'accesso diretto a una VF, è necessario avviare la VM con la modalità di collegamento di rete VFIO anziché con la modalità predefinita paravirtualizzata. Questa scelta è controllata dalla modalità di avvio per l'istanza di computazione. Una volta impostata la modalità di collegamento di rete come VFIO, è possibile creare collegamenti di rete utilizzando le API OCI, che crea VF sul PF di base e fornisce il VF direttamente alla VM. Il sistema operativo dell'host riconoscerà questi elementi come interfacce di rete. Una volta disponibile, il VF può essere spostato nello spazio di nomi pod. In questo modello, le VF vengono create utilizzando le API OCI invece dei comandi di sistema nello scenario bare-metal.

VF spostati negli spazi di nomi della rete pod

Obiettivo

Configura le interfacce SR-IOV per i pod che utilizzano Multus per i nodi Oracle Container Engine for Kubernetes basati su VM.

Prerequisiti

Nota: questa esercitazione è stata convalidata su cluster OKE con la rete Flannel (Flannel come CNI principale).

Task 1: impostazione dei nodi

Ogni nodo che richiede l'accesso alle interfacce SR-IOV deve essere preparato per i collegamenti di rete assistiti da hardware prima che possano essere utilizzati dai pod.

  1. Avviare i nodi in modalità VFIO

    • Creare un pool di nodi e un set di nodi nel cluster.

    • Una volta creati i nodi, modificare le proprietà dell'istanza.

      modifica istanza 1

    • Nelle proprietà dell'istanza fare clic su Mostra opzioni avanzate per visualizzare le proprietà aggiuntive. Nella scheda Opzioni di avvio scegliere Networking assistito dall'hardware (SR-IOV) per il tipo di rete.

      opzioni di modifica dell'istanza

      Nota: dopo aver passato un'istanza ai collegamenti di rete paravirtualizzati in modalità assistita da hardware (SR-IOV o VFIO), questi non saranno più idonei per la migrazione attiva per la manutenzione dell'infrastruttura.

    • Il workflow di aggiornamento richiederà il riavvio dell'istanza. Dopo il riavvio dell'istanza saranno presenti collegamenti di rete VFIO. Ciò può essere verificato nella console.

      verifica vfio

    • Un altro metodo per verificare se le istanze utilizzano i collegamenti di rete SR-IOV è SSH sul nodo e utilizzare lspci per elencare i dispositivi PCI nella VM. Dovresti essere in grado di visualizzare la funzione virtuale di base direttamente sulla VM, al contrario di un dispositivo che utilizza un driver virtio (ad esempio il controller di storage nell'immagine seguente).

      verifica vfio

    • A questo punto, il nodo dispone di un singolo collegamento VNIC, che è la VNIC primaria utilizzata per tutte le comunicazioni al nodo. Poiché l'istanza utilizza collegamenti di rete assistiti da hardware, il collegamento di rete è visibile al nodo come funzione virtuale sull'hardware di base. Affinché i pod possano utilizzare esclusivamente una funzione virtuale (VF), abbiamo bisogno di VF aggiuntivi sulla VM. Questa operazione può essere fornita mediante la console o l'API per aggiungere collegamenti VNIC aggiuntivi all'istanza. Questi collegamenti VNIC sono VF nel PF di base. Questi possono essere verificati con lspci.

  2. Aggiungi altri collegamenti VNIC

    • Nella pagina dell'istanza scegliere VNIC collegate e fare clic su Crea VNIC.

      collega vnic

    • Configura la VNIC utilizzando la VCN e la subnet necessarie.

      configurazione di vnic

    • Verificare se la VNIC può essere visualizzata nell'host come funzione virtuale precedente mediante l'applicazione SSH sul nodo e l'esecuzione di lspci.

      add-vnic

    • Quando aggiungi una VNIC secondaria a un'istanza di VM Linux, all'istanza viene aggiunta una nuova interfaccia (ovvero un dispositivo Ethernet) e viene riconosciuta automaticamente dal sistema operativo. Tuttavia, DHCP non è attivo per la VNIC secondaria ed è necessario configurare l'interfaccia con l'indirizzo IP statico e l'instradamento predefinito.

  3. Configurare il sistema operativo per le VNIC secondarie

    • OCI fornisce documentazione e uno script per la configurazione del sistema operativo per le VNIC secondarie. Per configurare la VNIC secondaria, scaricare lo script sul nodo ed eseguirlo in base alle istruzioni fornite nella documentazione OCI.

      Nota: le VNIC secondarie su ciascun nodo devono essere impostate ripetendo questi passi per ogni nodo. Questi passi possono essere facoltativi e automatizzati mediante uno script personalizzato cloud_init per i nodi.

    • Verificare che l'interfaccia sia ora connessa, con il relativo indirizzo IP e la route predefinita. Per controllare, utilizzare il comando ip addr o nmcli.

      collegamento attivo

    • Se si desidera, verificare il routing utilizzando un ping per raggiungere gli indirizzi IP secondari. Nelle immagini seguenti, 10.0.10.238 è l'IP secondario su un secondo nodo del cluster.

      ping1

      ping2

Task 2: Installare un CNI Meta-Plugin (Multus)

Multus è un meta plug-in che può fornire le informazioni VF a un CNI a valle come il plugin SR-IOV CNI per gestire l'attivazione delle risorse di rete abilitando pod "Multi-homed" o pod con più interfacce di rete.

Nota: a partire da Multus 4.0, Multus ha introdotto una nuova distribuzione dello stile client-server denominata "thick plug-in". Il nuovo plug-in spesso supporta funzioni aggiuntive come le metriche non supportate in precedenza. Questo documento utilizza il plugin 'thin' in quanto consuma meno risorse.

  1. Per installare Multus, eseguire i comandi seguenti.

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

Nota: durante l'installazione, l'immagine predefinita utilizzata dal daemon contrassegnato con stable richiede che il kubelet sia v1.20.x. Se si esegue l'installazione in un cluster precedente, modificare il deamonset nel file manifesto e utilizzare il tag immagine multus v3.7.1.

Questo file manifesto crea una nuova CRD per kind:NetworkAttachmentDefinition e fornisce il file binario Multus su tutti i nodi tramite un daemon. È possibile verificare l'installazione verificando che Multus daemonset sia in esecuzione sui nodi.

Task 3: collegare più interfacce ai pod

Task 4: Distribuisci pod con più interfacce e test

I pod possono ora richiedere interfacce aggiuntive utilizzando un'annotazione. L'annotazione consente al meta-plug-in (Multus) di sapere quale NetworkAttachmentDefinition (configurazione CNI) utilizzare per fornire interfacce aggiuntive quando viene creato il pod.

Nota: quando si utilizza una configurazione statica simile a quella illustrata in questo esempio, è necessario impostare l'affinità dei nodi, in modo che il pod sia pianificato sul nodo in cui è disponibile il dispositivo host desiderato.

Approvazioni

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Explorer di Oracle Learning.

Per la documentazione sul prodotto, visitare il sito Oracle Help Center.