23.4. Configuration d'un périphérique de réseau SR-IOV
Vous pouvez configurer un dispositif de virtualisation d'E/S à racine unique (SR-IOV) dans votre cluster.
23.4.1. Objet de configuration du nœud de réseau SR-IOV
Vous spécifiez la configuration du dispositif de réseau SR-IOV pour un nœud en créant une stratégie de nœud de réseau SR-IOV. L'objet API de la stratégie fait partie du groupe API sriovnetwork.openshift.io
.
Le fichier YAML suivant décrit une politique de nœuds de réseau SR-IOV :
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" 4 priority: <priority> 5 mtu: <mtu> 6 needVhostNet: false 7 numVfs: <num> 8 nicSelector: 9 vendor: "<vendor_code>" 10 deviceID: "<device_id>" 11 pfNames: ["<pf_name>", ...] 12 rootDevices: ["<pci_bus_id>", ...] 13 netFilter: "<filter_string>" 14 deviceType: <device_type> 15 isRdma: false 16 linkType: <link_type> 17 eSwitchMode: "switchdev" 18
- 1
- Nom de l'objet ressource personnalisé.
- 2
- L'espace de noms dans lequel l'opérateur de réseau SR-IOV est installé.
- 3
- Le nom de la ressource du plugin de périphérique réseau SR-IOV. Vous pouvez créer plusieurs stratégies de nœuds de réseau SR-IOV pour un nom de ressource.
Lorsque vous spécifiez un nom, veillez à utiliser l'expression syntaxique acceptée
^[a-zA-Z0-9_] $
dans le formulaireresourceName
. - 4
- Le sélecteur de nœuds indique les nœuds à configurer. Seuls les périphériques de réseau SR-IOV sur les nœuds sélectionnés sont configurés. Le plugin SR-IOV Container Network Interface (CNI) et le plugin de périphérique sont déployés sur les nœuds sélectionnés uniquement.
- 5
- Facultatif : La priorité est une valeur entière comprise entre
0
et99
. Plus la valeur est petite, plus la priorité est élevée. Par exemple, une priorité de10
est plus élevée que celle de99
. La valeur par défaut est99
. - 6
- Facultatif : L'unité de transmission maximale (MTU) de la fonction virtuelle. La valeur maximale du MTU peut varier selon les modèles de contrôleurs d'interface réseau (NIC).
- 7
- Facultatif : Définissez
needVhostNet
surtrue
pour monter le périphérique/dev/vhost-net
dans le pod. Utilisez le périphérique/dev/vhost-net
monté avec le kit de développement du plan de données (DPDK) pour transmettre le trafic à la pile réseau du noyau. - 8
- Le nombre de fonctions virtuelles (VF) à créer pour le périphérique de réseau physique SR-IOV. Pour un contrôleur d'interface réseau (NIC) Intel, le nombre de VF ne peut pas être supérieur au nombre total de VF pris en charge par le périphérique. Pour un NIC Mellanox, le nombre de VF ne peut pas être supérieur à
128
. - 9
- Le sélecteur NIC identifie le dispositif à configurer par l'opérateur. Il n'est pas nécessaire de spécifier des valeurs pour tous les paramètres. Il est recommandé d'identifier le périphérique réseau avec suffisamment de précision pour éviter de sélectionner un périphérique par inadvertance.
Si vous spécifiez
rootDevices
, vous devez également spécifier une valeur pourvendor
,deviceID
oupfNames
. Si vous spécifiezpfNames
etrootDevices
en même temps, assurez-vous qu'ils se réfèrent au même appareil. Si vous spécifiez une valeur pournetFilter
, il n'est pas nécessaire de spécifier d'autres paramètres car un ID de réseau est unique. - 10
- Facultatif : Le code hexadécimal du fournisseur de l'appareil de réseau SR-IOV. Les seules valeurs autorisées sont
8086
et15b3
. - 11
- Facultatif : Le code hexadécimal du périphérique du réseau SR-IOV. Par exemple,
101b
est l'ID d'un périphérique Mellanox ConnectX-6. - 12
- Facultatif : Un tableau d'un ou plusieurs noms de fonctions physiques (PF) pour l'appareil.
- 13
- Facultatif : Un tableau d'une ou plusieurs adresses de bus PCI pour le PF de l'appareil. Indiquer l'adresse au format suivant :
0000:02:00.1
. - 14
- Facultatif : Le filtre réseau spécifique à la plateforme. La seule plateforme prise en charge est Red Hat OpenStack Platform (RHOSP). Les valeurs acceptables utilisent le format suivant :
openstack/NetworkID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
. Remplacezxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
par la valeur du fichier de métadonnées/var/config/openstack/latest/network_data.json
. - 15
- Facultatif : Le type de pilote pour les fonctions virtuelles. Les seules valeurs autorisées sont
netdevice
etvfio-pci
. La valeur par défaut estnetdevice
.Pour qu'une carte d'interface réseau Mellanox fonctionne en mode DPDK sur des nœuds métalliques nus, utilisez le type de pilote
netdevice
et définissezisRdma
commetrue
. - 16
- Facultatif : Permet d'activer ou non le mode d'accès direct à la mémoire à distance (RDMA). La valeur par défaut est
false
.Si le paramètre
isRdma
est réglé surtrue
, vous pouvez continuer à utiliser le VF compatible RDMA comme un périphérique réseau normal. Un périphérique peut être utilisé dans l'un ou l'autre mode.Définissez
isRdma
surtrue
etneedVhostNet
surtrue
pour configurer une carte d'interface réseau Mellanox à utiliser avec les applications Fast Datapath DPDK. - 17
- Optionnel : Le type de lien pour les VF. La valeur par défaut est
eth
pour Ethernet. Remplacez cette valeur par "ib" pour InfiniBand.Lorsque
linkType
est défini surib
,isRdma
est automatiquement défini surtrue
par le webhook de l'opérateur de réseau SR-IOV. LorsquelinkType
est défini surib
,deviceType
ne doit pas être défini survfio-pci
.Ne pas définir linkType sur 'eth' pour SriovNetworkNodePolicy, car cela peut conduire à un nombre incorrect de périphériques disponibles rapportés par le plugin de périphérique.
- 18
- Facultatif : Pour activer le délestage matériel, le champ "eSwitchMode" doit être défini sur
"switchdev"
.
23.4.1.1. Exemples de configuration de nœuds de réseau SR-IOV
L'exemple suivant décrit la configuration d'un dispositif InfiniBand :
Exemple de configuration d'un dispositif InfiniBand
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-ib-net-1 namespace: openshift-sriov-network-operator spec: resourceName: ibnic1 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 4 nicSelector: vendor: "15b3" deviceID: "101b" rootDevices: - "0000:19:00.0" linkType: ib isRdma: true
L'exemple suivant décrit la configuration d'un périphérique réseau SR-IOV dans une machine virtuelle RHOSP :
Exemple de configuration d'un dispositif SR-IOV dans une machine virtuelle
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-sriov-net-openstack-1 namespace: openshift-sriov-network-operator spec: resourceName: sriovnic1 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 1 1 nicSelector: vendor: "15b3" deviceID: "101b" netFilter: "openstack/NetworkID:ea24bd04-8674-4f69-b0ee-fa0b3bd20509" 2
- 1
- Le champ
numVfs
est toujours défini sur1
lors de la configuration de la stratégie de réseau de nœuds pour une machine virtuelle. - 2
- Le champ
netFilter
doit faire référence à un ID de réseau lorsque la machine virtuelle est déployée sur RHOSP. Les valeurs valides pournetFilter
sont disponibles à partir d'un objetSriovNetworkNodeState
.
23.4.1.2. Partitionnement des fonctions virtuelles (VF) pour les dispositifs SR-IOV
Dans certains cas, vous pouvez souhaiter répartir les fonctions virtuelles (VF) d'une même fonction physique (PF) dans plusieurs pools de ressources. Par exemple, vous pouvez vouloir que certaines fonctions virtuelles se chargent avec le pilote par défaut et que les autres se chargent avec le pilote vfio-pci
. Dans un tel déploiement, le sélecteur pfNames
de votre ressource personnalisée (CR) SriovNetworkNodePolicy peut être utilisé pour spécifier une plage de VF pour un pool en utilisant le format suivant : <pfname>#<first_vf>-<last_vf>
.
Par exemple, le YAML suivant montre le sélecteur pour une interface nommée netpf0
avec les VF 2
et 7
:
pfNames: ["netpf0#2-7"]
-
netpf0
est le nom de l'interface PF. -
2
est le premier indice VF (basé sur 0) qui est inclus dans la plage. -
7
est le dernier indice VF (basé sur 0) qui est inclus dans la plage.
Il est possible de sélectionner des VF dans la même CP en utilisant des CR de polices différentes si les conditions suivantes sont remplies :
-
La valeur
numVfs
doit être identique pour les polices qui sélectionnent la même CP. -
L'indice VF doit être compris entre
0
et<numVfs>-1
. Par exemple, si vous avez une police dont la valeurnumVfs
est définie sur8
, la valeur<first_vf>
ne doit pas être inférieure à0
, et la valeur<last_vf>
ne doit pas être supérieure à7
. - Les fourchettes de valeurs des différentes politiques ne doivent pas se chevaucher.
-
L'adresse
<first_vf>
ne doit pas être plus grande que l'adresse<last_vf>
.
L'exemple suivant illustre le partitionnement des cartes réseau pour un périphérique SR-IOV.
La politique policy-net-1
définit un pool de ressources net-1
qui contient le VF 0
de PF netpf0
avec le pilote VF par défaut. La politique policy-net-1-dpdk
définit un pool de ressources net-1-dpdk
qui contient les VF 8
à 15
de la PF netpf0
avec le pilote VF vfio
.
Politique policy-net-1
:
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-net-1 namespace: openshift-sriov-network-operator spec: resourceName: net1 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 16 nicSelector: pfNames: ["netpf0#0-0"] deviceType: netdevice
Politique policy-net-1-dpdk
:
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-net-1-dpdk namespace: openshift-sriov-network-operator spec: resourceName: net1dpdk nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 16 nicSelector: pfNames: ["netpf0#8-15"] deviceType: vfio-pci
Vérification de la réussite du partitionnement de l'interface
Confirmez que l'interface est partitionnée en fonctions virtuelles (VF) pour le périphérique SR-IOV en exécutant la commande suivante.
ip link show <interface> 1
- 1
- Remplacez
<interface>
par l'interface que vous avez spécifiée lors du partitionnement en VF pour le périphérique SR-IOV, par exemple,ens3f1
.
Exemple de sortie
5: ens3f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 3c:fd:fe:d1:bc:01 brd ff:ff:ff:ff:ff:ff vf 0 link/ether 5a:e7:88:25:ea:a0 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off vf 1 link/ether 3e:1d:36:d7:3d:49 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off vf 2 link/ether ce:09:56:97:df:f9 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off vf 3 link/ether 5e:91:cf:88:d1:38 brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off vf 4 link/ether e6:06:a1:96:2f:de brd ff:ff:ff:ff:ff:ff, spoof checking on, link-state auto, trust off
23.4.2. Configuration des périphériques de réseau SR-IOV
L'opérateur de réseau SR-IOV ajoute la ressource SriovNetworkNodePolicy.sriovnetwork.openshift.io
CustomResourceDefinition à OpenShift Container Platform. Vous pouvez configurer un périphérique réseau SR-IOV en créant une ressource personnalisée (CR) SriovNetworkNodePolicy.
Lors de l'application de la configuration spécifiée dans un objet SriovNetworkNodePolicy
, l'opérateur SR-IOV peut vidanger les nœuds et, dans certains cas, les redémarrer.
L'application d'une modification de configuration peut prendre plusieurs minutes.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc
). -
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. - Vous avez installé l'opérateur de réseau SR-IOV.
- Vous avez suffisamment de nœuds disponibles dans votre cluster pour gérer la charge de travail expulsée des nœuds épuisés.
- Vous n'avez sélectionné aucun nœud du plan de contrôle pour la configuration des équipements du réseau SR-IOV.
Procédure
-
Créez un objet
SriovNetworkNodePolicy
, puis enregistrez le YAML dans le fichier<name>-sriov-node-network.yaml
. Remplacez<name>
par le nom de cette configuration. -
Facultatif : Étiqueter les nœuds de cluster compatibles SR-IOV avec
SriovNetworkNodePolicy.Spec.NodeSelector
s'ils ne le sont pas déjà. Pour plus d'informations sur l'étiquetage des nœuds, voir "Understanding how to update labels on nodes". Créer l'objet
SriovNetworkNodePolicy
:oc create -f <name>-sriov-node-network.yaml
où
<name>
spécifie le nom de cette configuration.Après l'application de la mise à jour de la configuration, tous les pods de l'espace de noms
sriov-network-operator
passent à l'étatRunning
.Pour vérifier que le dispositif de réseau SR-IOV est configuré, entrez la commande suivante. Remplacez
<node_name>
par le nom d'un nœud avec le dispositif de réseau SR-IOV que vous venez de configurer.oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
Ressources supplémentaires
23.4.3. Dépannage de la configuration SR-IOV
Après avoir suivi la procédure de configuration d'un périphérique de réseau SR-IOV, les sections suivantes traitent de certaines conditions d'erreur.
Pour afficher l'état des nœuds, exécutez la commande suivante :
oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name>
où : <node_name>
indique le nom d'un nœud doté d'un dispositif de réseau SR-IOV.
Sortie d'erreur : Impossible d'allouer de la mémoire
"lastSyncError": "write /sys/bus/pci/devices/0000:3b:00.1/sriov_numvfs: cannot allocate memory"
Lorsqu'un nœud indique qu'il ne peut pas allouer de mémoire, vérifiez les éléments suivants :
- Confirmez que les paramètres SR-IOV globaux sont activés dans le BIOS du nœud.
- Confirmez que VT-d est activé dans le BIOS du nœud.
23.4.4. Affectation d'un réseau SR-IOV à un VRF
En tant qu'administrateur de cluster, vous pouvez affecter une interface réseau SR-IOV à votre domaine VRF en utilisant le plugin CNI VRF.
Pour ce faire, ajoutez la configuration VRF au paramètre facultatif metaPlugins
de la ressource SriovNetwork
.
Les applications qui utilisent les VRF doivent se lier à un périphérique spécifique. L'usage courant est d'utiliser l'option SO_BINDTODEVICE
pour une socket. SO_BINDTODEVICE
lie la socket à un périphérique spécifié dans le nom de l'interface passée, par exemple, eth1
. Pour utiliser SO_BINDTODEVICE
, l'application doit avoir les capacités de CAP_NET_RAW
.
L'utilisation d'une VRF via la commande ip vrf exec
n'est pas prise en charge dans les pods OpenShift Container Platform. Pour utiliser la VRF, liez les applications directement à l'interface VRF.
23.4.4.1. Création d'un attachement réseau SR-IOV supplémentaire avec le plugin CNI VRF
L'opérateur de réseau SR-IOV gère les définitions de réseaux supplémentaires. Lorsque vous indiquez un réseau SR-IOV supplémentaire à créer, l'opérateur de réseau SR-IOV crée automatiquement la ressource personnalisée (CR) NetworkAttachmentDefinition
.
Ne modifiez pas les ressources personnalisées NetworkAttachmentDefinition
gérées par l'opérateur de réseau SR-IOV. Cela pourrait perturber le trafic sur votre réseau supplémentaire.
Pour créer un attachement réseau SR-IOV supplémentaire avec le plugin CNI VRF, suivez la procédure suivante.
Conditions préalables
- Installez le CLI (oc) de OpenShift Container Platform.
- Connectez-vous au cluster OpenShift Container Platform en tant qu'utilisateur disposant des privilèges cluster-admin.
Procédure
Créez la ressource personnalisée (CR)
SriovNetwork
pour l'attachement supplémentaire au réseau SR-IOV et insérez la configurationmetaPlugins
, comme dans l'exemple de CR suivant. Enregistrez le YAML dans le fichiersriov-network-attachment.yaml
.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: example-network namespace: additional-sriov-network-1 spec: ipam: | { "type": "host-local", "subnet": "10.56.217.0/24", "rangeStart": "10.56.217.171", "rangeEnd": "10.56.217.181", "routes": [{ "dst": "0.0.0.0/0" }], "gateway": "10.56.217.1" } vlan: 0 resourceName: intelnics metaPlugins : | { "type": "vrf", 1 "vrfname": "example-vrf-name" 2 }
Créer la ressource
SriovNetwork
:$ oc create -f sriov-network-attachment.yaml
Vérification de la création de la CR NetworkAttachmentDefinition
Confirmez que l'opérateur du réseau SR-IOV a créé le CR
NetworkAttachmentDefinition
en exécutant la commande suivante.oc get network-attachment-definitions -n <namespace> 1
- 1
- Remplacez
<namespace>
par l'espace de noms que vous avez spécifié lors de la configuration de l'attachement au réseau, par exemple,additional-sriov-network-1
.
Exemple de sortie
NAME AGE additional-sriov-network-1 14m
NoteIl peut y avoir un délai avant que l'opérateur du réseau SR-IOV ne crée le CR.
Vérification de la réussite de l'attachement au réseau SR-IOV supplémentaire
Pour vérifier que le VRF CNI est correctement configuré et que l'attachement réseau SR-IOV supplémentaire est attaché, procédez comme suit :
- Créer un réseau SR-IOV qui utilise la VRF CNI.
- Attribuer le réseau à un pod.
Vérifiez que l'attachement réseau du pod est connecté au réseau supplémentaire SR-IOV. Connectez-vous à distance au pod et exécutez la commande suivante :
$ ip vrf show
Exemple de sortie
Name Table ----------------------- red 10
Confirmez que l'interface VRF est maître de l'interface secondaire :
$ ip link
Exemple de sortie
... 5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode ...