Remarque :

Configurer des interfaces SR-IOV pour les pods à l'aide de Multus pour les noeuds Oracle Container Engine for Kubernetes basés sur une machine virtuelle

Introduction

Lorsque des charges de travail fortement orientées réseau nécessitent la configuration d'interfaces réseau secondaires au sein des pods, nous pouvons utiliser une méta CNI comme Multus pour y parvenir. Les interfaces réseau secondaires généralement connectées dans ces cas auront des fonctionnalités ou des propriétés réseau spécialisées telles que la virtualisation d'E/S à root unique (SR-IOV).

Dans un tutoriel précédent : configurez les interfaces SR-IOV pour les pods à l'aide de Multus pour les noeuds OKE Bare Metal (vous pouvez accéder au lien à partir de la section Liens associés). Nous avons expliqué comment y parvenir sur les noeuds Kubernetes Bare Metal sur Oracle Cloud Infrastructure (OCI), où vous pouvez créer directement des fonctions virtuelles (VF) sur le matériel attaché à l'instance Bare Metal.

Ce tutoriel suit une approche similaire pour les noeuds de machine virtuelle dans un cluster Oracle Container Engine for Kubernetes (OKE), et adopte une approche similaire, avec différentes configurations et plug-ins que ceux utilisés sur les noeuds sans système d'exploitation. Il existe des différences importantes dans la façon dont les interfaces sont créées et gérées entre Bare Metal, où vous disposez d'un contrôle total sur le matériel et les machines virtuelles où un hyperviseur abstrait votre accès au matériel sous-jacent et vous n'avez pas autant de contrôle sur celui-ci.

L'approche décrite ici utilise Multus pour fournir plusieurs interfaces à un pod, mais la carte CNI SR-IOV et le plug-in de périphérique associé ne sont pas utilisés. En effet, la SR-IOV CNI nécessite l'accès au matériel sous-jacent, la fonction physique (PF), qui pose évidemment un problème sur les machines virtuelles. Pour relever ce défi, nous pouvons utiliser les API de réseau OCI pour les VNIC, pour créer une fonction virtuelle (VF) sur la fonction physique (PF), comme dans le scénario Bare Metal, et accorder à la machine virtuelle un accès direct et non structuré à cette VF. Ces VF peuvent être attachées à une instance de calcul, y compris les noeuds OKE, en tant qu'interfaces réseau. Ces interfaces/FV peuvent être déplacées vers les espaces de noms réseau des pods, ce qui permet au pod d'utiliser directement et exclusivement la fonction virtuelle en tant qu'interface réseau. Du point de vue des Pods, il ne sera pas en mesure de distinguer les deux, et dans les deux cas aura accès à une VF qu'ils peuvent utiliser directement.

Pour accorder un accès direct à une machine virtuelle à une fonction virtuelle, nous devons lancer la machine virtuelle avec le mode d'attachement réseau VFIO par opposition au mode par défaut paravirtualized. Ce choix est contrôlé par le mode de lancement de l'instance de calcul. Une fois le mode d'attachement réseau défini sur VFIO, nous pouvons créer des attachements réseau à l'aide des API OCI, ce qui crée des VF sur le PF sous-jacent et fournit le VF directement à la machine virtuelle. Le système d'exploitation de l'hôte les reconnaît comme des interfaces réseau. Une fois que la fonction virtuelle est disponible pour la machine virtuelle, elle peut être déplacée vers l'espace de noms de pod. Dans ce modèle, les VF sont créées à l'aide des API OCI plutôt que des commandes système dans le scénario Bare Metal.

VF déplacées vers les espaces de noms réseau du pod

Objectif

Configurez les interfaces SR-IOV pour les pods à l'aide de Multus pour les noeuds Oracle Container Engine for Kubernetes basés sur une machine virtuelle.

Prérequis

Remarque : ce tutoriel a été validé sur les clusters OKE avec réseau flanel (Flannel en tant que CNI principal).

Tâche 1 : configurer les noeuds

Chaque noeud nécessitant un accès aux interfaces SR-IOV doit être préparé pour les attachements réseau assistés par le matériel avant qu'ils puissent être utilisés par les pods.

  1. Initialiser les noeuds en mode VFIO

    • Créez un pool de noeuds et un ensemble de noeuds dans votre cluster.

    • Une fois les noeuds créés, modifiez les propriétés de l'instance.

      modifier l'instance 1

    • Dans les propriétés de l'instance, cliquez sur Afficher les options avancées pour afficher les propriétés supplémentaires. Dans l'onglet Options de lancement, sélectionnez Mise en réseau assistée par matériel (SR-IOV) pour le type de mise en réseau.

      modifier les options d'instance

      Remarque : une fois qu'une instance est passée en mode paravirtualisé, les attachements réseau en mode matériel assisté (SR-IOV ou VFIO) ne sont plus éligibles à la migration en direct pour la maintenance de l'infrastructure.

    • Le workflow de mise à jour vous invite à redémarrer l'instance. Après le redémarrage, l'instance dispose d'attachements réseau VFIO. Cela peut être vérifié sur la console.

      vfio-vérifier

    • Une autre méthode pour vérifier si vos instances utilisent des attachements réseau SR-IOV consiste à se connecter via SSH au noeud et à utiliser lspci pour répertorier les périphériques PCI sur la machine virtuelle. Vous devriez pouvoir voir la fonction virtuelle sous-jacente directement sur la machine virtuelle plutôt qu'un périphérique à l'aide d'un pilote virtio (comme le contrôleur de stockage dans l'image ci-dessous).

      vfio-vérifier

    • A ce stade, le noeud dispose d'un seul attachement de carte d'interface réseau virtuelle, qui est la carte d'interface réseau virtuelle principale utilisée pour toutes les communications avec le noeud. Etant donné que l'instance utilise des attachements réseau assistés par le matériel, l'attachement réseau est visible par le noeud en tant que fonction virtuelle sur le matériel sous-jacent. Pour que les pods utilisent exclusivement une fonction virtuelle, nous avons besoin de VF supplémentaires sur la machine virtuelle. Vous pouvez le fournir à l'aide de la console ou de l'API afin d'ajouter des attachements de VNIC supplémentaires à l'instance. Ces attachements VNIC sont des VF sur le PF sous-jacent. Vous pouvez les vérifier avec lspci.

  2. Ajout d'attachements de carte d'interface réseau virtuelle supplémentaires

    • Sur la page de l'instance, choisissez VNIC attachées et cliquez sur Créer une VNIC.

      attacher une carte VNIC

    • Configurez la carte d'interface réseau virtuelle à l'aide du VCN et du sous-réseau requis.

      configurer une carte vNIC

    • Vérifiez si la VNIC peut être vue sur l'hôte comme une fonction virtuelle comme précédemment, en effectuant une connexion SSH sur le noeud et en exécutant lspci.

      ajouter-vnic

    • Lorsque vous ajoutez une carte d'interface réseau virtuelle secondaire à une instance de machine virtuelle Linux, une nouvelle interface (c'est-à-dire un périphérique Ethernet) est ajoutée à l'instance et automatiquement reconnue par le système d'exploitation. Toutefois, DHCP n'est pas actif pour la VNIC secondaire et vous devez configurer l'interface avec l'adresse IP statique et la route par défaut.

  3. Configuration du système d'exploitation pour les cartes d'interface réseau virtuelles secondaires

    • OCI fournit une documentation et un script pour configurer le système d'exploitation pour les cartes d'interface réseau virtuelles secondaires. Pour configurer la carte d'interface réseau virtuelle secondaire, téléchargez le script sur le noeud et exécutez-le en fonction des instructions fournies dans la documentation OCI.

      Remarque : les VNIC secondaires sur chaque noeud doivent être configurées en répétant ces étapes pour chaque noeud. Ces étapes peuvent éventuellement être automatisées à l'aide d'un script cloud_init personnalisé pour les noeuds.

    • Vérifiez que l'interface est maintenant connectée, avec son adresse IP et sa route par défaut. Pour vérifier, utilisez la commande ip addr ou nmcli.

      lien actif

    • Vérifiez éventuellement le routage à l'aide d'une commande ping pour atteindre les adresses IP secondaires les unes des autres. Dans les images ci-dessous, 10.0.10.238 est l'adresse IP secondaire sur un deuxième noeud du cluster.

      ping1

      ping2

Tâche 2 : installation d'un CNI Meta-Plugin (Multus)

Multus est un module d'extension méta qui peut fournir les informations VF à un CNI en aval comme le module d'extension CNI SR-IOV pour qu'il gère la plomberie des ressources réseau tout en activant les pods ou pods " multiréseau " avec plusieurs interfaces réseau.

Remarque : à partir de plusieurs versions 4.0, Multus a introduit un nouveau déploiement de type client-serveur appelé "plug-in épais". Le nouveau plug-in épais prend en charge des fonctionnalités supplémentaires telles que des mesures qui n'étaient pas prises en charge précédemment. Ce document utilise le module d'extension "fin" car il consomme moins de ressources.

  1. Pour installer Multus, exécutez les commandes suivantes.

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

Remarque : lors de l'installation, l'image par défaut utilisée par le démon marqué stable nécessite que le kubelet soit v1.20.x. Si vous effectuez l'installation sur un cluster plus ancien, modifiez le fichier deamonset dans le manifeste et utilisez la balise d'image multus v3.7.1.

Ce manifeste crée un CRD pour kind:NetworkAttachmentDefinition et fournit le binaire Multus sur tous les noeuds via un ensemble de démons. Vous pouvez vérifier l'installation en vous assurant que le démon Multus est en cours d'exécution sur vos noeuds.

Tâche 3 : attachement de plusieurs interfaces aux pods

Tâche 4 : déploiement de pods avec plusieurs interfaces et test

Les pods peuvent désormais demander des interfaces supplémentaires à l'aide d'une annotation. L'annotation permet au meta-plug-in (Multus) de savoir quel NetworkAttachmentDefinition (configuration CNI) utiliser pour fournir des interfaces supplémentaires lors de la création du pod.

Remarque : lors de l'utilisation d'une configuration statique comme celle présentée dans cet exemple, les pods doivent avoir une affinité de noeud définie, de sorte que le pod soit planifié sur le noeud où le périphérique hôte souhaité est disponible.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.