10.18. Gestion avancée des machines virtuelles
10.18.1. Travailler avec des quotas de ressources pour les machines virtuelles
Créer et gérer des quotas de ressources pour les machines virtuelles.
10.18.1.1. Définir des limites de quotas de ressources pour les machines virtuelles
Les quotas de ressources qui n'utilisent que des demandes fonctionnent automatiquement avec les machines virtuelles (VM). Si votre quota de ressources utilise des limites, vous devez définir manuellement des limites de ressources sur les machines virtuelles. Les limites de ressources doivent être supérieures d'au moins 100 Mo aux demandes de ressources.
Procédure
Définissez des limites pour une VM en modifiant le manifeste
VirtualMachine
. Par exemple :apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: with-limits spec: running: false template: spec: domain: # ... resources: requests: memory: 128Mi limits: memory: 256Mi 1
- 1
- Cette configuration est supportée parce que la valeur
limits.memory
est au moins100Mi
plus grande que la valeurrequests.memory
.
-
Sauvegarder le manifeste
VirtualMachine
.
10.18.1.2. Ressources supplémentaires
10.18.2. Spécifier des nœuds pour les machines virtuelles
Vous pouvez placer des machines virtuelles (VM) sur des nœuds spécifiques en utilisant des règles de placement de nœuds.
10.18.2.1. À propos du placement des nœuds pour les machines virtuelles
Pour garantir que les machines virtuelles (VM) s'exécutent sur les nœuds appropriés, vous pouvez configurer des règles de placement des nœuds. Cette opération peut s'avérer utile dans les cas suivants
- Vous avez plusieurs machines virtuelles. Pour garantir la tolérance aux pannes, vous souhaitez qu'elles s'exécutent sur des nœuds différents.
- Vous avez deux machines virtuelles bavardes. Pour éviter la redondance du routage inter-nœuds, vous souhaitez que les VM s'exécutent sur le même nœud.
- Vos machines virtuelles nécessitent des caractéristiques matérielles spécifiques qui ne sont pas présentes sur tous les nœuds disponibles.
- Vous avez un module qui ajoute des capacités à un nœud et vous voulez placer une VM sur ce nœud pour qu'elle puisse utiliser ces capacités.
Le placement des machines virtuelles s'appuie sur les règles de placement des charges de travail dans les nœuds. Si des charges de travail sont exclues de certains nœuds au niveau du composant, les machines virtuelles ne peuvent pas être placées sur ces nœuds.
Vous pouvez utiliser les types de règles suivants dans le champ spec
d'un manifeste VirtualMachine
:
nodeSelector
- Permet de planifier des machines virtuelles sur des nœuds étiquetés avec la ou les paires clé-valeur spécifiées dans ce champ. Les étiquettes du nœud doivent correspondre exactement à toutes les paires répertoriées.
affinity
Permet d'utiliser une syntaxe plus expressive pour définir des règles qui font correspondre les nœuds aux machines virtuelles. Par exemple, vous pouvez spécifier qu'une règle est une préférence plutôt qu'une exigence absolue, de sorte que les machines virtuelles soient toujours planifiées si la règle n'est pas respectée. L'affinité de pod, l'anti-affinité de pod et l'affinité de nœud sont prises en charge pour le placement des machines virtuelles. L'affinité de pod fonctionne pour les machines virtuelles car le type de charge de travail
VirtualMachine
est basé sur l'objetPod
.NoteLes règles d'affinité ne s'appliquent que lors de la planification. OpenShift Container Platform ne replanifie pas les charges de travail en cours d'exécution si les contraintes ne sont plus respectées.
tolerations
- Permet aux machines virtuelles d'être planifiées sur des nœuds qui ont des taches correspondantes. Si une erreur est appliquée à un nœud, ce nœud n'accepte que les machines virtuelles qui tolèrent l'erreur.
10.18.2.2. Exemples de placement de nœuds
Les exemples suivants d'extraits de fichiers YAML utilisent les champs nodePlacement
, affinity
et tolerations
pour personnaliser l'emplacement des nœuds pour les machines virtuelles.
10.18.2.2.1. Exemple : Placement de nœuds de VM avec nodeSelector
Dans cet exemple, la machine virtuelle a besoin d'un nœud dont les métadonnées contiennent des étiquettes example-key-1 = example-value-1
et example-key-2 = example-value-2
.
Si aucun nœud ne correspond à cette description, la machine virtuelle n'est pas planifiée.
Exemple de manifeste VM
metadata: name: example-vm-node-selector apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: spec: nodeSelector: example-key-1: example-value-1 example-key-2: example-value-2 ...
10.18.2.2.2. Exemple : Placement de nœuds VM avec affinité de pod et anti-affinité de pod
Dans cet exemple, la VM doit être programmée sur un nœud disposant d'un pod en cours d'exécution portant l'étiquette example-key-1 = example-value-1
. Si aucun pod de ce type n'est en cours d'exécution sur un nœud, la VM n'est pas programmée.
Dans la mesure du possible, la VM n'est pas programmée sur un nœud qui possède un pod portant l'étiquette example-key-2 = example-value-2
. Cependant, si tous les nœuds candidats ont un pod avec ce label, l'ordonnanceur ignore cette contrainte.
Exemple de manifeste VM
metadata: name: example-vm-pod-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 - labelSelector: matchExpressions: - key: example-key-1 operator: In values: - example-value-1 topologyKey: kubernetes.io/hostname podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: example-key-2 operator: In values: - example-value-2 topologyKey: kubernetes.io/hostname ...
- 1
- Si vous utilisez le type de règle
requiredDuringSchedulingIgnoredDuringExecution
, la VM n'est pas planifiée si la contrainte n'est pas respectée. - 2
- Si vous utilisez le type de règle
preferredDuringSchedulingIgnoredDuringExecution
, la VM est toujours planifiée si la contrainte n'est pas respectée, à condition que toutes les contraintes requises soient respectées.
10.18.2.2.3. Exemple : Placement de nœuds de VM avec affinité de nœuds
Dans cet exemple, la VM doit être programmée sur un nœud portant l'étiquette example.io/example-key = example-value-1
ou l'étiquette example.io/example-key = example-value-2
. La contrainte est respectée si une seule des étiquettes est présente sur le nœud. Si aucune étiquette n'est présente, la VM n'est pas programmée.
Dans la mesure du possible, l'ordonnanceur évite les nœuds portant l'étiquette example-node-label-key = example-node-label-value
. Toutefois, si tous les nœuds candidats portent cette étiquette, l'ordonnanceur ignore cette contrainte.
Exemple de manifeste VM
metadata: name: example-vm-node-affinity apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: 1 nodeSelectorTerms: - matchExpressions: - key: example.io/example-key operator: In values: - example-value-1 - example-value-2 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 1 preference: matchExpressions: - key: example-node-label-key operator: In values: - example-node-label-value ...
- 1
- Si vous utilisez le type de règle
requiredDuringSchedulingIgnoredDuringExecution
, la VM n'est pas planifiée si la contrainte n'est pas respectée. - 2
- Si vous utilisez le type de règle
preferredDuringSchedulingIgnoredDuringExecution
, la VM est toujours planifiée si la contrainte n'est pas respectée, à condition que toutes les contraintes requises soient respectées.
10.18.2.2.4. Exemple : Placement de nœuds de VM avec tolérances
Dans cet exemple, les nœuds réservés aux machines virtuelles sont déjà marqués de l'erreur key=virtualization:NoSchedule
. Étant donné que cette machine virtuelle a une adresse tolerations
correspondante, elle peut planifier sur les nœuds entachés.
Une machine virtuelle qui tolère une erreur n'est pas obligée de planifier sur un nœud avec cette erreur.
Exemple de manifeste VM
metadata: name: example-vm-tolerations apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: tolerations: - key: "key" operator: "Equal" value: "virtualization" effect: "NoSchedule" ...
10.18.2.3. Ressources supplémentaires
10.18.3. Configuration de la rotation des certificats
Configurer les paramètres de rotation des certificats pour remplacer les certificats existants.
10.18.3.1. Configuration de la rotation des certificats
Vous pouvez le faire pendant l'installation d'OpenShift Virtualization dans la console web ou après l'installation dans la ressource personnalisée (CR) HyperConverged
.
Procédure
Ouvrez le CR
HyperConverged
en exécutant la commande suivante :$ oc edit hco -n openshift-cnv kubevirt-hyperconverged
Modifiez les champs
spec.certConfig
comme indiqué dans l'exemple suivant. Pour éviter de surcharger le système, assurez-vous que toutes les valeurs sont supérieures ou égales à 10 minutes. Exprimez toutes les valeurs sous forme de chaînes de caractères conformes au format golangParseDuration
.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: certConfig: ca: duration: 48h0m0s renewBefore: 24h0m0s 1 server: duration: 24h0m0s 2 renewBefore: 12h0m0s 3
- Appliquez le fichier YAML à votre cluster.
10.18.3.2. Dépannage des paramètres de rotation des certificats
La suppression d'une ou de plusieurs valeurs de certConfig
entraîne le retour aux valeurs par défaut, à moins que les valeurs par défaut n'entrent en conflit avec l'une des conditions suivantes :
-
La valeur de
ca.renewBefore
doit être inférieure ou égale à la valeur deca.duration
. -
La valeur de
server.duration
doit être inférieure ou égale à la valeur deca.duration
. -
La valeur de
server.renewBefore
doit être inférieure ou égale à la valeur deserver.duration
.
Si les valeurs par défaut sont en conflit avec ces conditions, vous recevrez un message d'erreur.
Si vous supprimez la valeur server.duration
dans l'exemple suivant, la valeur par défaut de 24h0m0s
est supérieure à la valeur de ca.duration
, ce qui est contraire aux conditions spécifiées.
Exemple :
certConfig: ca: duration: 4h0m0s renewBefore: 1h0m0s server: duration: 4h0m0s renewBefore: 4h0m0s
Il en résulte le message d'erreur suivant :
error: hyperconvergeds.hco.kubevirt.io "kubevirt-hyperconverged" could not be patched: admission webhook "validate-hco.kubevirt.io" denied the request: spec.certConfig: ca.duration is smaller than server.duration
Le message d'erreur ne mentionne que le premier conflit. Vérifiez toutes les valeurs de certConfig avant de poursuivre.
10.18.4. Utilisation du mode UEFI pour les machines virtuelles
Vous pouvez démarrer une machine virtuelle (VM) en mode UEFI (Unified Extensible Firmware Interface).
10.18.4.1. À propos du mode UEFI pour les machines virtuelles
L'Unified Extensible Firmware Interface (UEFI), à l'instar de l'ancien BIOS, initialise les composants matériels et les fichiers image du système d'exploitation au démarrage de l'ordinateur. L'UEFI prend en charge des fonctions et des options de personnalisation plus modernes que le BIOS, ce qui permet des temps de démarrage plus rapides.
Il stocke toutes les informations relatives à l'initialisation et au démarrage dans un fichier portant l'extension .efi
, qui est stocké sur une partition spéciale appelée partition système EFI (ESP). L'ESP contient également les programmes de démarrage du système d'exploitation installé sur l'ordinateur.
10.18.4.2. Démarrage des machines virtuelles en mode UEFI
Vous pouvez configurer une machine virtuelle pour qu'elle démarre en mode UEFI en modifiant le manifeste VirtualMachine
.
Conditions préalables
-
Installez le CLI OpenShift (
oc
).
Procédure
Modifiez ou créez un fichier manifeste
VirtualMachine
. Utilisez la strophespec.firmware.bootloader
pour configurer le mode UEFI :Démarrage en mode UEFI avec démarrage sécurisé actif
apiversion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: special: vm-secureboot name: vm-secureboot spec: template: metadata: labels: special: vm-secureboot spec: domain: devices: disks: - disk: bus: virtio name: containerdisk features: acpi: {} smm: enabled: true 1 firmware: bootloader: efi: secureBoot: true 2 ...
- 1
- OpenShift Virtualization nécessite que le mode de gestion du système (
SMM
) soit activé pour que le démarrage sécurisé en mode UEFI se produise. - 2
- OpenShift Virtualization supporte une VM avec ou sans Secure Boot lors de l'utilisation du mode UEFI. Si Secure Boot est activé, le mode UEFI est requis. Cependant, le mode UEFI peut être activé sans utiliser le mode Secure Boot.
Appliquez le manifeste à votre cluster en exécutant la commande suivante :
oc create -f <nom_du_fichier>.yaml
10.18.5. Configuration du démarrage PXE pour les machines virtuelles
Le démarrage PXE, ou démarrage en réseau, est disponible dans OpenShift Virtualization. Le démarrage en réseau permet à un ordinateur de démarrer et de charger un système d'exploitation ou un autre programme sans nécessiter de périphérique de stockage connecté localement. Par exemple, vous pouvez l'utiliser pour choisir votre image de système d'exploitation souhaitée à partir d'un serveur PXE lors du déploiement d'un nouvel hôte.
10.18.5.1. Conditions préalables
- Un pont Linux doit être connecté.
- Le serveur PXE doit être connecté au même VLAN que le pont.
10.18.5.2. Démarrage PXE avec une adresse MAC spécifiée
En tant qu'administrateur, vous pouvez démarrer un client sur le réseau en créant d'abord un objet NetworkAttachmentDefinition
pour votre réseau PXE. Ensuite, faites référence à la définition de l'attachement réseau dans votre fichier de configuration de l'instance de machine virtuelle avant de démarrer l'instance de machine virtuelle. Vous pouvez également spécifier une adresse MAC dans le fichier de configuration de l'instance de machine virtuelle, si le serveur PXE l'exige.
Conditions préalables
- Un pont Linux doit être connecté.
- Le serveur PXE doit être connecté au même VLAN que le pont.
Procédure
Configurer un réseau PXE sur le cluster :
Créer le fichier de définition de l'attachement réseau pour le réseau PXE
pxe-net-conf
:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: pxe-net-conf spec: config: '{ "cniVersion": "0.3.1", "name": "pxe-net-conf", "plugins": [ { "type": "cnv-bridge", "bridge": "br1", "vlan": 1 1 }, { "type": "cnv-tuning" 2 } ] }'
NoteL'instance de machine virtuelle sera connectée au pont
br1
via un port d'accès avec le VLAN demandé.
Créez la définition de la pièce jointe au réseau en utilisant le fichier que vous avez créé à l'étape précédente :
$ oc create -f pxe-net-conf.yaml
Modifiez le fichier de configuration de l'instance de la machine virtuelle pour y inclure les détails de l'interface et du réseau.
Spécifiez le réseau et l'adresse MAC, si le serveur PXE l'exige. Si l'adresse MAC n'est pas spécifiée, une valeur est attribuée automatiquement.
Assurez-vous que
bootOrder
est défini sur1
afin que l'interface démarre en premier. Dans cet exemple, l'interface est connectée à un réseau appelé<pxe-net>
:interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1
NoteL'ordre de démarrage est global pour les interfaces et les disques.
Attribuez un numéro de périphérique de démarrage au disque afin de garantir un démarrage correct après le provisionnement du système d'exploitation.
Réglez la valeur du disque
bootOrder
sur2
:devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2
Spécifiez que le réseau est connecté à la définition de l'attachement au réseau créée précédemment. Dans ce scénario,
<pxe-net>
est connecté à la définition d'attachement au réseau appelée<pxe-net-conf>
:networks: - name: default pod: {} - name: pxe-net multus: networkName: pxe-net-conf
Créer l'instance de la machine virtuelle :
$ oc create -f vmi-pxe-boot.yaml
Exemple de sortie
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
Attendez que l'instance de la machine virtuelle s'exécute :
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: Running
Visualisez l'instance de la machine virtuelle à l'aide de VNC :
$ virtctl vnc vmi-pxe-boot
- Observez l'écran de démarrage pour vérifier que le démarrage PXE est réussi.
Connectez-vous à l'instance de la machine virtuelle :
$ virtctl console vmi-pxe-boot
Vérifiez les interfaces et l'adresse MAC sur la machine virtuelle et que l'interface connectée au pont a l'adresse MAC spécifiée. Dans ce cas, nous avons utilisé
eth1
pour le démarrage PXE, sans adresse IP. L'autre interface,eth0
, a reçu une adresse IP de OpenShift Container Platform.$ ip addr
Exemple de sortie
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ff
10.18.5.3. Glossaire de la mise en réseau de la virtualisation OpenShift
OpenShift Virtualization offre des fonctionnalités avancées de mise en réseau en utilisant des ressources et des plugins personnalisés.
Les termes suivants sont utilisés dans la documentation d'OpenShift Virtualization :
- Interface de réseau de conteneurs (CNI)
- un projet de la Cloud Native Computing Foundation, axé sur la connectivité réseau des conteneurs. OpenShift Virtualization utilise des plugins CNI pour s'appuyer sur la fonctionnalité réseau de base de Kubernetes.
- Multus
- un plugin CNI "meta" Plugin CNI qui permet à plusieurs CNI d'exister afin qu'un pod ou une machine virtuelle puisse utiliser les interfaces dont il a besoin.
- Définition des ressources personnalisées (CRD)
- une ressource de l'API Kubernetes qui vous permet de définir des ressources personnalisées, ou un objet défini à l'aide de la ressource de l'API CRD.
- Définition de l'attachement au réseau (NAD)
- un CRD introduit par le projet Multus qui permet d'attacher des pods, des machines virtuelles et des instances de machines virtuelles à un ou plusieurs réseaux.
- Politique de configuration du réseau de nœuds (NNCP)
-
une description de la configuration réseau requise sur les nœuds. Vous mettez à jour la configuration du réseau des nœuds, notamment en ajoutant ou en supprimant des interfaces, en appliquant un manifeste
NodeNetworkConfigurationPolicy
à la grappe. - Environnement d'exécution avant démarrage (PXE)
- une interface qui permet à un administrateur de démarrer une machine cliente à partir d'un serveur via le réseau. Le démarrage en réseau permet de charger à distance des systèmes d'exploitation et d'autres logiciels sur le client.
10.18.6. Utilisation de pages volumineuses avec des machines virtuelles
Vous pouvez utiliser d'énormes pages comme mémoire de secours pour les machines virtuelles de votre cluster.
10.18.6.1. Conditions préalables
- Les nœuds doivent avoir des pages énormes pré-allouées configurées.
10.18.6.2. Ce que font les grandes pages
La mémoire est gérée par blocs appelés pages. Sur la plupart des systèmes, une page correspond à 4Ki. 1Mi de mémoire équivaut à 256 pages ; 1Gi de mémoire équivaut à 256 000 pages, et ainsi de suite. Les unités centrales de traitement disposent d'une unité de gestion de la mémoire intégrée qui gère une liste de ces pages au niveau matériel. Le Translation Lookaside Buffer (TLB) est une petite mémoire cache matérielle des correspondances entre les pages virtuelles et les pages physiques. Si l'adresse virtuelle transmise dans une instruction matérielle peut être trouvée dans le TLB, la correspondance peut être déterminée rapidement. Si ce n'est pas le cas, la TLB est manquée et le système revient à une traduction d'adresse plus lente, basée sur le logiciel, ce qui entraîne des problèmes de performance. La taille de la TLB étant fixe, le seul moyen de réduire le risque d'erreur de la TLB est d'augmenter la taille de la page.
Une page énorme est une page de mémoire dont la taille est supérieure à 4Ki. Sur les architectures x86_64, il existe deux tailles courantes de pages énormes : 2Mi et 1Gi. Les tailles varient sur les autres architectures. Pour utiliser les pages énormes, le code doit être écrit de manière à ce que les applications en soient conscientes. Les pages énormes transparentes (THP) tentent d'automatiser la gestion des pages énormes sans que l'application en ait connaissance, mais elles ont des limites. En particulier, elles sont limitées à des tailles de page de 2Mi. Les THP peuvent entraîner une dégradation des performances sur les nœuds à forte utilisation ou fragmentation de la mémoire en raison des efforts de défragmentation des THP, qui peuvent bloquer les pages de mémoire. Pour cette raison, certaines applications peuvent être conçues pour (ou recommander) l'utilisation d'énormes pages pré-allouées au lieu de THP.
Dans OpenShift Virtualization, les machines virtuelles peuvent être configurées pour consommer des pages énormes pré-allouées.
10.18.6.3. Configuration de pages volumineuses pour les machines virtuelles
Vous pouvez configurer les machines virtuelles pour qu'elles utilisent des pages énormes pré-allouées en incluant les paramètres memory.hugepages.pageSize
et resources.requests.memory
dans la configuration de votre machine virtuelle.
La demande de mémoire doit être divisible par la taille de la page. Par exemple, vous ne pouvez pas demander la mémoire 500Mi
avec une taille de page de 1Gi
.
Les configurations de la mémoire de l'hôte et du système d'exploitation invité ne sont pas liées. Les pages volumineuses demandées dans le manifeste de la machine virtuelle s'appliquent à QEMU. Les pages volumineuses à l'intérieur de l'invité ne peuvent être configurées qu'en fonction de la quantité de mémoire disponible de l'instance de la machine virtuelle.
Si vous modifiez une machine virtuelle en cours d'exécution, celle-ci doit être redémarrée pour que les modifications soient prises en compte.
Conditions préalables
- Les nœuds doivent avoir des pages énormes pré-allouées configurées.
Procédure
Dans la configuration de votre machine virtuelle, ajoutez les paramètres
resources.requests.memory
etmemory.hugepages.pageSize
au paramètrespec.domain
. L'extrait de configuration suivant concerne une machine virtuelle qui demande un total de4Gi
de mémoire avec une taille de page de1Gi
:kind: VirtualMachine ... spec: domain: resources: requests: memory: "4Gi" 1 memory: hugepages: pageSize: "1Gi" 2 ...
Appliquer la configuration de la machine virtuelle :
oc apply -f <virtual_machine>.yaml
10.18.7. Activation de ressources dédiées pour les machines virtuelles
Pour améliorer les performances, vous pouvez dédier des ressources de nœuds, telles que l'unité centrale, à une machine virtuelle.
10.18.7.1. À propos des ressources dédiées
Lorsque vous activez les ressources dédiées pour votre machine virtuelle, la charge de travail de votre machine virtuelle est planifiée sur des CPU qui ne seront pas utilisés par d'autres processus. En utilisant des ressources dédiées, vous pouvez améliorer les performances de la machine virtuelle et la précision des prévisions de latence.
10.18.7.2. Conditions préalables
-
Le gestionnaire de CPU doit être configuré sur le nœud. Vérifiez que le nœud possède le label
cpumanager = true
avant de planifier les charges de travail des machines virtuelles. - La machine virtuelle doit être mise hors tension.
10.18.7.3. Activation de ressources dédiées pour une machine virtuelle
Vous activez les ressources dédiées pour une machine virtuelle dans l'onglet Details. Les machines virtuelles qui ont été créées à partir d'un modèle Red Hat peuvent être configurées avec des ressources dédiées.
Procédure
-
Dans la console OpenShift Container Platform, cliquez sur Virtualization
VirtualMachines dans le menu latéral. - Sélectionnez une machine virtuelle pour ouvrir la page VirtualMachine details.
- Dans l'onglet Scheduling, cliquez sur l'icône représentant un crayon à côté de Dedicated Resources.
- Sélectionnez Schedule this workload with dedicated resources (guaranteed policy).
- Cliquez sur Save.
10.18.8. Planification des machines virtuelles
Vous pouvez planifier une machine virtuelle (VM) sur un nœud en vous assurant que le modèle de CPU et l'attribut de stratégie de la VM sont compatibles avec les modèles de CPU et les attributs de stratégie pris en charge par le nœud.
10.18.8.1. Attributs de la politique
Vous pouvez planifier une machine virtuelle (VM) en spécifiant un attribut de stratégie et une caractéristique de CPU qui est mise en correspondance pour la compatibilité lorsque la VM est planifiée sur un nœud. Un attribut de stratégie spécifié pour une VM détermine la manière dont cette VM est planifiée sur un nœud.
Attribut de la politique | Description |
---|---|
force | La VM est obligée d'être programmée sur un nœud. Cela est vrai même si l'unité centrale de l'hôte ne prend pas en charge l'unité centrale de la VM. |
exiger | Politique par défaut qui s'applique à une VM si celle-ci n'est pas configurée avec un modèle de CPU spécifique et une spécification de fonctionnalité. Si un nœud n'est pas configuré pour prendre en charge la découverte de nœuds de CPU avec cet attribut de stratégie par défaut ou l'un des autres attributs de stratégie, les VM ne sont pas planifiées sur ce nœud. Le CPU de l'hôte doit prendre en charge le CPU de la VM ou l'hyperviseur doit pouvoir émuler le modèle de CPU pris en charge. |
facultatif | La VM est ajoutée à un nœud si elle est prise en charge par le processeur de la machine physique de l'hôte. |
désactiver | La VM ne peut pas être planifiée avec la découverte du nœud CPU. |
interdire | La VM n'est pas planifiée même si la fonction est prise en charge par l'unité centrale hôte et que la découverte du nœud de l'unité centrale est activée. |
10.18.8.2. Définition d'un attribut de politique et d'une fonction de l'unité centrale
Vous pouvez définir un attribut de stratégie et une fonction CPU pour chaque machine virtuelle (VM) afin de vous assurer qu'elle est planifiée sur un nœud conformément à la stratégie et à la fonction. La fonction CPU que vous définissez est vérifiée pour s'assurer qu'elle est prise en charge par le processeur hôte ou émulée par l'hyperviseur.
Procédure
Modifiez la spécification
domain
de votre fichier de configuration de la VM. L'exemple suivant définit la fonctionnalité CPU et la stratégierequire
pour une machine virtuelle (VM) :apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: features: - name: apic 1 policy: require 2
10.18.8.3. Planification des machines virtuelles avec le modèle de CPU pris en charge
Vous pouvez configurer un modèle de CPU pour une machine virtuelle (VM) afin de la planifier sur un nœud où son modèle de CPU est pris en charge.
Procédure
Modifiez la spécification
domain
du fichier de configuration de votre machine virtuelle. L'exemple suivant montre un modèle de CPU spécifique défini pour une VM :apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: Conroe 1
- 1
- Modèle de CPU pour la VM.
10.18.8.4. Ordonnancement des machines virtuelles avec le modèle d'hôte
Lorsque le modèle de CPU d'une machine virtuelle (VM) est défini sur host-model
, la VM hérite du modèle de CPU du nœud où elle est planifiée.
Procédure
Modifiez la spécification
domain
de votre fichier de configuration de la VM. L'exemple suivant montre quehost-model
est spécifié pour la machine virtuelle :apiVersion: kubevirt/v1alpha3 kind: VirtualMachine metadata: name: myvm spec: template: spec: domain: cpu: model: host-model 1
- 1
- La VM qui hérite du modèle de CPU du nœud où elle est planifiée.
10.18.9. Configuration de PCI passthrough
La fonction Peripheral Component Interconnect (PCI) passthrough vous permet d'accéder à des périphériques matériels et de les gérer à partir d'une machine virtuelle. Lorsque la fonction PCI passthrough est configurée, les périphériques PCI fonctionnent comme s'ils étaient physiquement connectés au système d'exploitation invité.
Les administrateurs de clusters peuvent exposer et gérer les périphériques hôtes qui sont autorisés à être utilisés dans le cluster en utilisant l'interface de ligne de commande (CLI) oc
.
10.18.9.1. A propos de la préparation d'un périphérique hôte pour le PCI passthrough
Pour préparer un périphérique hôte au passage PCI à l'aide de l'interface de programmation, créez un objet MachineConfig
et ajoutez des arguments de noyau pour activer l'unité de gestion de la mémoire d'entrée-sortie (IOMMU). Liez le périphérique PCI au pilote Virtual Function I/O (VFIO), puis exposez-le dans le cluster en modifiant le champ permittedHostDevices
de la ressource personnalisée (CR) HyperConverged
. La liste permittedHostDevices
est vide lorsque vous installez l'opérateur de virtualisation OpenShift pour la première fois.
Pour supprimer un périphérique hôte PCI du cluster à l'aide de la CLI, supprimez les informations relatives au périphérique PCI du CR HyperConverged
.
10.18.9.1.1. Ajout d'arguments au noyau pour activer le pilote IOMMU
Pour activer le pilote IOMMU (Input-Output Memory Management Unit) dans le noyau, créez l'objet MachineConfig
et ajoutez les arguments du noyau.
Conditions préalables
- Privilège administratif sur un cluster OpenShift Container Platform en fonctionnement.
- Matériel CPU Intel ou AMD.
- La technologie de virtualisation Intel pour les extensions Directed I/O ou AMD IOMMU dans le BIOS (Basic Input/Output System) est activée.
Procédure
Créez un objet
MachineConfig
qui identifie l'argument du noyau. L'exemple suivant montre un argument du noyau pour un processeur Intel.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
- 1
- Applique le nouvel argument du noyau uniquement aux nœuds de travail.
- 2
- L'adresse
name
indique le rang de cet argument du noyau (100) parmi les configurations de la machine et son objectif. Si vous avez un processeur AMD, spécifiez l'argument du noyau commeamd_iommu=on
. - 3
- Identifie l'argument du noyau comme étant
intel_iommu
pour un processeur Intel.
Créer le nouvel objet
MachineConfig
:$ oc create -f 100-worker-kernel-arg-iommu.yaml
Vérification
Vérifiez que le nouvel objet
MachineConfig
a bien été ajouté.$ oc get MachineConfig
10.18.9.1.2. Liaison des périphériques PCI au pilote VFIO
Pour lier les périphériques PCI au pilote VFIO (Virtual Function I/O), obtenez les valeurs de vendor-ID
et device-ID
de chaque périphérique et créez une liste avec ces valeurs. Ajoutez cette liste à l'objet MachineConfig
. L'opérateur MachineConfig
génère l'objet /etc/modprobe.d/vfio.conf
sur les nœuds dotés de périphériques PCI et lie les périphériques PCI au pilote VFIO.
Conditions préalables
- Vous avez ajouté des arguments au noyau pour activer l'IOMMU pour le processeur.
Procédure
Exécutez la commande
lspci
pour obtenir les adressesvendor-ID
etdevice-ID
du périphérique PCI.$ lspci -nnv | grep -i nvidia
Exemple de sortie
02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
Créer un fichier de configuration Butane,
100-worker-vfiopci.bu
, liant le périphérique PCI au pilote VFIO.NoteSee "Creating machine configs with Butane" for information about Butane.
Exemple :
variant: openshift version: 4.12.0 metadata: name: 100-worker-vfiopci labels: machineconfiguration.openshift.io/role: worker 1 storage: files: - path: /etc/modprobe.d/vfio.conf mode: 0644 overwrite: true contents: inline: | options vfio-pci ids=10de:1eb8 2 - path: /etc/modules-load.d/vfio-pci.conf 3 mode: 0644 overwrite: true contents: inline: vfio-pci
- 1
- Applique le nouvel argument du noyau uniquement aux nœuds de travail.
- 2
- Spécifiez la valeur
vendor-ID
(10de
) et la valeurdevice-ID
(1eb8
) déterminées précédemment pour lier un seul périphérique au pilote VFIO. Vous pouvez ajouter une liste de plusieurs périphériques avec leurs informations sur le fournisseur et le périphérique. - 3
- Le fichier qui charge le module noyau vfio-pci sur les nœuds de travail.
Utilisez Butane pour générer un fichier objet
MachineConfig
,100-worker-vfiopci.yaml
, contenant la configuration à fournir aux nœuds de travail :$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
Appliquer l'objet
MachineConfig
aux nœuds de travail :$ oc apply -f 100-worker-vfiopci.yaml
Vérifiez que l'objet
MachineConfig
a bien été ajouté.$ oc get MachineConfig
Exemple de sortie
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 00-worker d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-master-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-container-runtime d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 01-worker-kubelet d3da910bfa9f4b599af4ed7f5ac270d55950a3a1 3.2.0 25h 100-worker-iommu 3.2.0 30s 100-worker-vfiopci-configuration 3.2.0 30s
Vérification
Vérifiez que le pilote VFIO est chargé.
$ lspci -nnk -d 10de:
La sortie confirme que le pilote VFIO est utilisé.
Exemple de sortie
04:00.0 3D controller [0302]: NVIDIA Corporation GP102GL [Tesla P40] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation Device [10de:1eb8] Kernel driver in use: vfio-pci Kernel modules: nouveau
10.18.9.1.3. Exposer les périphériques hôtes PCI dans le cluster à l'aide de la CLI
Pour exposer les périphériques hôtes PCI dans le cluster, ajoutez des détails sur les périphériques PCI au tableau spec.permittedHostDevices.pciHostDevices
de la ressource personnalisée (CR) HyperConverged
.
Procédure
Modifiez le
HyperConverged
CR dans votre éditeur par défaut en exécutant la commande suivante :$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Ajoutez les informations relatives au périphérique PCI au tableau
spec.permittedHostDevices.pciHostDevices
. Par exemple :Exemple de fichier de configuration
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: 1 pciHostDevices: 2 - pciDeviceSelector: "10DE:1DB6" 3 resourceName: "nvidia.com/GV100GL_Tesla_V100" 4 - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" - pciDeviceSelector: "8086:6F54" resourceName: "intel.com/qat" externalResourceProvider: true 5 ...
- 1
- Les périphériques hôtes dont l'utilisation est autorisée dans le cluster.
- 2
- La liste des périphériques PCI disponibles sur le nœud.
- 3
- Le
vendor-ID
et ledevice-ID
nécessaires pour identifier le dispositif PCI. - 4
- Le nom d'un périphérique hôte PCI.
- 5
- Facultatif : La définition de ce champ à
true
indique que la ressource est fournie par un plugin de périphérique externe. OpenShift Virtualization permet l'utilisation de ce périphérique dans le cluster mais laisse l'allocation et la surveillance à un plugin de périphérique externe.
NoteL'exemple ci-dessus montre deux périphériques hôtes PCI nommés
nvidia.com/GV100GL_Tesla_V100
etnvidia.com/TU104GL_Tesla_T4
ajoutés à la liste des périphériques hôtes autorisés dans le CRHyperConverged
. Ces périphériques ont été testés et vérifiés pour fonctionner avec OpenShift Virtualization.- Enregistrez vos modifications et quittez l'éditeur.
Vérification
Vérifiez que les périphériques hôtes PCI ont été ajoutés au nœud en exécutant la commande suivante. L'exemple de sortie montre qu'il y a un périphérique associé aux noms de ressources
nvidia.com/GV100GL_Tesla_V100
,nvidia.com/TU104GL_Tesla_T4
etintel.com/qat
.oc describe node <node_name>
Exemple de sortie
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 1 pods: 250
10.18.9.1.4. Suppression des périphériques hôtes PCI de la grappe à l'aide du CLI
Pour supprimer un périphérique hôte PCI du cluster, supprimez les informations relatives à ce périphérique de la ressource personnalisée (CR) HyperConverged
.
Procédure
Modifiez le
HyperConverged
CR dans votre éditeur par défaut en exécutant la commande suivante :$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Supprimer les informations relatives au périphérique PCI du tableau
spec.permittedHostDevices.pciHostDevices
en supprimant les champspciDeviceSelector
,resourceName
etexternalResourceProvider
(le cas échéant) pour le périphérique approprié. Dans cet exemple, la ressourceintel.com/qat
a été supprimée.Exemple de fichier de configuration
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: permittedHostDevices: pciHostDevices: - pciDeviceSelector: "10DE:1DB6" resourceName: "nvidia.com/GV100GL_Tesla_V100" - pciDeviceSelector: "10DE:1EB8" resourceName: "nvidia.com/TU104GL_Tesla_T4" ...
- Enregistrez vos modifications et quittez l'éditeur.
Vérification
Vérifiez que le périphérique hôte PCI a été supprimé du nœud en exécutant la commande suivante. L'exemple de sortie montre qu'il n'y a aucun périphérique associé au nom de ressource
intel.com/qat
.oc describe node <node_name>
Exemple de sortie
Capacity: cpu: 64 devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 915128Mi hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 131395264Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250 Allocatable: cpu: 63500m devices.kubevirt.io/kvm: 110 devices.kubevirt.io/tun: 110 devices.kubevirt.io/vhost-net: 110 ephemeral-storage: 863623130526 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 130244288Ki nvidia.com/GV100GL_Tesla_V100 1 nvidia.com/TU104GL_Tesla_T4 1 intel.com/qat: 0 pods: 250
10.18.9.2. Configuration des machines virtuelles pour PCI passthrough
Une fois les périphériques PCI ajoutés au cluster, vous pouvez les affecter aux machines virtuelles. Les périphériques PCI sont désormais disponibles comme s'ils étaient physiquement connectés aux machines virtuelles.
10.18.9.2.1. Attribution d'un périphérique PCI à une machine virtuelle
Lorsqu'un périphérique PCI est disponible dans un cluster, vous pouvez l'affecter à une machine virtuelle et activer le PCI passthrough.
Procédure
Attribuer le périphérique PCI à une machine virtuelle en tant que périphérique hôte.
Exemple :
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: hostDevices: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: hostdevices1
- 1
- Le nom du périphérique PCI autorisé sur le cluster en tant que périphérique hôte. La machine virtuelle peut accéder à ce périphérique hôte.
Vérification
Utilisez la commande suivante pour vérifier que le périphérique hôte est disponible dans la machine virtuelle.
$ lspci -nnk | grep NVIDIA
Exemple de sortie
$ 02:01.0 3D controller [0302]: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] [10de:1eb8] (rev a1)
10.18.9.3. Ressources supplémentaires
10.18.10. Configuration du vGPU passthrough
Vos machines virtuelles peuvent accéder à un matériel GPU virtuel (vGPU). L'attribution d'un vGPU à votre machine virtuelle vous permet d'effectuer les opérations suivantes :
- Accédez à une fraction du GPU du matériel sous-jacent pour obtenir des performances élevées dans votre machine virtuelle.
- Rationaliser les opérations d'E/S gourmandes en ressources.
la fonction vGPU passthrough ne peut être attribuée qu'à des appareils connectés à des clusters fonctionnant dans un environnement "bare metal".
10.18.10.1. Attribution de périphériques vGPU passthrough à une machine virtuelle
Utilisez la console web d'OpenShift Container Platform pour attribuer des périphériques vGPU passthrough à votre machine virtuelle.
Conditions préalables
- La machine virtuelle doit être arrêtée.
Procédure
-
Dans la console web de OpenShift Container Platform, cliquez sur Virtualization
VirtualMachines dans le menu latéral. - Sélectionnez la machine virtuelle à laquelle vous souhaitez attribuer le périphérique.
Dans l'onglet Details, cliquez sur GPU devices.
Si vous ajoutez un périphérique vGPU en tant que périphérique hôte, vous ne pouvez pas accéder au périphérique avec la console VNC.
- Cliquez sur Add GPU device, entrez dans Name et sélectionnez l'appareil dans la liste Device name.
- Cliquez sur Save.
-
Cliquez sur l'onglet YAML pour vérifier que les nouveaux appareils ont été ajoutés à la configuration de votre cluster dans la section
hostDevices
.
Vous pouvez ajouter des périphériques matériels aux machines virtuelles créées à partir de modèles personnalisés ou d'un fichier YAML. Vous ne pouvez pas ajouter de périphériques à des modèles de source de démarrage fournis à l'avance pour des systèmes d'exploitation spécifiques, tels que Windows 10 ou RHEL 7.
Pour afficher les ressources connectées à votre cluster, cliquez sur Compute
10.18.10.2. Ressources supplémentaires
10.18.11. Configuration des dispositifs à médiation
OpenShift Virtualization crée automatiquement des périphériques médiatisés, tels que des GPU virtuels (vGPU), si vous fournissez une liste de périphériques dans la ressource personnalisée (CR) HyperConverged
.
La configuration déclarative des périphériques médiatisés est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes d'un point de vue fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, permettant aux clients de tester les fonctionnalités et de fournir un retour d'information au cours du processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
10.18.11.1. A propos de l'utilisation de NVIDIA GPU Operator
Le NVIDIA GPU Operator gère les ressources GPU NVIDIA dans un cluster OpenShift Container Platform et automatise les tâches liées au démarrage des nœuds GPU. Étant donné que le GPU est une ressource spéciale dans le cluster, vous devez installer certains composants avant de déployer des charges de travail d'application sur le GPU. Ces composants comprennent les pilotes NVIDIA qui activent l'architecture CUDA (compute unified device architecture), le plugin de périphérique Kubernetes, le runtime de conteneur et d'autres éléments tels que l'étiquetage automatique des nœuds, la surveillance et plus encore.
NVIDIA GPU Operator n'est pris en charge que par NVIDIA. Pour plus d'informations sur l'obtention d'un support de la part de NVIDIA, voir Obtenir un support de la part de NVIDIA.
Il existe deux façons d'activer les GPU avec OpenShift Container Platform OpenShift Virtualization : la méthode native d'OpenShift Container Platform décrite ici et l'utilisation de NVIDIA GPU Operator.
L'opérateur NVIDIA GPU est un opérateur Kubernetes qui permet à OpenShift Container Platform OpenShift Virtualization d'exposer les GPU aux charges de travail virtualisées fonctionnant sur OpenShift Container Platform. Il permet aux utilisateurs de provisionner et de gérer facilement des machines virtuelles dotées de GPU, en leur donnant la possibilité d'exécuter des charges de travail complexes d'intelligence artificielle/apprentissage machine (AI/ML) sur la même plateforme que leurs autres charges de travail. Il offre également un moyen simple de faire évoluer la capacité GPU de leur infrastructure, permettant ainsi une croissance rapide des charges de travail basées sur le GPU.
Pour plus d'informations sur l'utilisation de NVIDIA GPU Operator pour provisionner des nœuds de travail pour l'exécution de VM accélérées par le GPU, voir NVIDIA GPU Operator avec OpenShift Virtualization.
10.18.11.2. À propos de l'utilisation de GPU virtuels avec OpenShift Virtualization
Certaines cartes de processeurs graphiques (GPU) prennent en charge la création de GPU virtuels (vGPU). OpenShift Virtualization peut créer automatiquement des vGPU et d'autres périphériques médiatisés si un administrateur fournit des détails de configuration dans la ressource personnalisée (CR) HyperConverged
. Cette automatisation est particulièrement utile pour les grands clusters.
Reportez-vous à la documentation de votre fournisseur de matériel pour plus de détails sur les fonctionnalités et l'assistance.
- Dispositif de médiation
- Un dispositif physique divisé en un ou plusieurs dispositifs virtuels. Un vGPU est un type de périphérique médiatisé (mdev) ; les performances du GPU physique sont réparties entre les périphériques virtuels. Vous pouvez attribuer des périphériques médiatisés à une ou plusieurs machines virtuelles (VM), mais le nombre d'invités doit être compatible avec votre GPU. Certains GPU ne prennent pas en charge plusieurs invités.
10.18.11.2.1. Conditions préalables
Si votre fournisseur de matériel fournit des pilotes, vous les avez installés sur les nœuds où vous souhaitez créer des dispositifs à médiation.
- Si vous utilisez des cartes NVIDIA, vous avez installé le pilote NVIDIA GRID.
10.18.11.2.2. Aperçu de la configuration
Lors de la configuration des dispositifs à médiation, l'administrateur doit effectuer les tâches suivantes :
- Créer les dispositifs de médiation.
- Exposer les dispositifs médiatisés au cluster.
La CR HyperConverged
comprend des API qui permettent d'accomplir ces deux tâches.
Créer des dispositifs médiatisés
... spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - <device_type> nodeMediatedDeviceTypes: 2 - mediatedDevicesTypes: 3 - <device_type> nodeSelector: 4 <node_selector_key>: <node_selector_value> ...
- 1
- Obligatoire : Configure les paramètres globaux du cluster.
- 2
- Facultatif : Remplace la configuration globale pour un nœud ou un groupe de nœuds spécifique. Doit être utilisé avec la configuration globale
mediatedDevicesTypes
. - 3
- Obligatoire si vous utilisez
nodeMediatedDeviceTypes
. Remplace la configuration globale demediatedDevicesTypes
pour les nœuds spécifiés. - 4
- Requis si vous utilisez
nodeMediatedDeviceTypes
. Doit inclure une pairekey:value
.
Exposer les dispositifs à médiation au cluster
... permittedHostDevices: mediatedDevices: - mdevNameSelector: GRID T4-2Q 1 resourceName: nvidia.com/GRID_T4-2Q 2 ...
- 1
- Expose les dispositifs médiatisés qui correspondent à cette valeur sur l'hôte.Note
Vous pouvez voir les types de dispositifs médiatisés pris en charge par votre dispositif en consultant le contenu de
/sys/bus/pci/devices/<slot>:<bus>:<domain>.<function>/mdev_supported_types/<type>/name
, en remplaçant les valeurs correctes pour votre système.Par exemple, le fichier de noms du type
nvidia-231
contient la chaîne de sélectionGRID T4-2Q
. L'utilisation deGRID T4-2Q
comme valeur demdevNameSelector
permet aux nœuds d'utiliser le typenvidia-231
. - 2
- Le
resourceName
doit correspondre à celui alloué sur le nœud. Trouvez leresourceName
en utilisant la commande suivante :$ oc get $NODE -o json \ | jq '.status.allocatable | \ with_entries(select(.key | startswith("nvidia.com/"))) | \ with_entries(select(.value != "0"))'
10.18.11.2.3. Comment les vGPU sont affectés aux nœuds
Pour chaque appareil physique, OpenShift Virtualization configure les valeurs suivantes :
- Un seul type de mdev.
-
Nombre maximal d'instances du type
mdev
sélectionné.
L'architecture de la grappe affecte la manière dont les dispositifs sont créés et attribués aux nœuds.
- Grand cluster avec plusieurs cartes par nœud
Sur les nœuds dotés de plusieurs cartes pouvant prendre en charge des types de vGPU similaires, les types de périphériques concernés sont créés à la ronde. Par exemple :
... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-222 - nvidia-228 - nvidia-105 - nvidia-108 ...
Dans ce scénario, chaque nœud dispose de deux cartes, toutes deux compatibles avec les types de vGPU suivants :
nvidia-105 ... nvidia-108 nvidia-217 nvidia-299 ...
Sur chaque nœud, OpenShift Virtualization crée les vGPU suivants :
- 16 vGPUs de type nvidia-105 sur la première carte.
- 2 vGPUs de type nvidia-108 sur la seconde carte.
- Un nœud possède une seule carte qui prend en charge plusieurs types de vGPU
OpenShift Virtualization utilise le type pris en charge qui vient en premier sur la liste
mediatedDevicesTypes
.Par exemple, la carte d'un nœud prend en charge
nvidia-223
etnvidia-224
. La listemediatedDevicesTypes
suivante est configurée :... mediatedDevicesConfiguration: mediatedDevicesTypes: - nvidia-22 - nvidia-223 - nvidia-224 ...
Dans cet exemple, OpenShift Virtualization utilise le type
nvidia-223
.
10.18.11.2.4. Sur la modification et la suppression des dispositifs médiatisés
La configuration du dispositif médiatisé du cluster peut être mise à jour avec OpenShift Virtualization en :
-
Editer le
HyperConverged
CR et modifier le contenu de la strophemediatedDevicesTypes
. -
Modification des étiquettes de nœuds correspondant au sélecteur de nœuds
nodeMediatedDeviceTypes
. Suppression des informations relatives au dispositif dans les strophes
spec.mediatedDevicesConfiguration
etspec.permittedHostDevices
de la CRHyperConverged
.NoteSi vous supprimez les informations relatives au dispositif de la strophe
spec.permittedHostDevices
sans les supprimer également de la strophespec.mediatedDevicesConfiguration
, vous ne pouvez pas créer un nouveau type de dispositif à médiation sur le même nœud. Pour supprimer correctement les dispositifs à médiation, supprimez les informations relatives aux dispositifs dans les deux strophes.
En fonction des changements spécifiques, ces actions amènent OpenShift Virtualization à reconfigurer les périphériques médiatisés ou à les supprimer des nœuds du cluster.
10.18.11.2.5. Préparation des hôtes pour les dispositifs à médiation
Vous devez activer le pilote Input-Output Memory Management Unit (IOMMU) avant de pouvoir configurer les périphériques à médiation.
10.18.11.2.5.1. Ajout d'arguments au noyau pour activer le pilote IOMMU
Pour activer le pilote IOMMU (Input-Output Memory Management Unit) dans le noyau, créez l'objet MachineConfig
et ajoutez les arguments du noyau.
Conditions préalables
- Privilège administratif sur un cluster OpenShift Container Platform en fonctionnement.
- Matériel CPU Intel ou AMD.
- La technologie de virtualisation Intel pour les extensions Directed I/O ou AMD IOMMU dans le BIOS (Basic Input/Output System) est activée.
Procédure
Créez un objet
MachineConfig
qui identifie l'argument du noyau. L'exemple suivant montre un argument du noyau pour un processeur Intel.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker 1 name: 100-worker-iommu 2 spec: config: ignition: version: 3.2.0 kernelArguments: - intel_iommu=on 3 ...
- 1
- Applique le nouvel argument du noyau uniquement aux nœuds de travail.
- 2
- L'adresse
name
indique le rang de cet argument du noyau (100) parmi les configurations de la machine et son objectif. Si vous avez un processeur AMD, spécifiez l'argument du noyau commeamd_iommu=on
. - 3
- Identifie l'argument du noyau comme étant
intel_iommu
pour un processeur Intel.
Créer le nouvel objet
MachineConfig
:$ oc create -f 100-worker-kernel-arg-iommu.yaml
Vérification
Vérifiez que le nouvel objet
MachineConfig
a bien été ajouté.$ oc get MachineConfig
10.18.11.2.6. Ajout et suppression de dispositifs médiatisés
Vous pouvez ajouter ou supprimer des dispositifs médiatisés.
10.18.11.2.6.1. Créer et exposer des dispositifs médiatisés
Vous pouvez exposer et créer des dispositifs médiatisés tels que des GPU virtuels (vGPU) en modifiant la ressource personnalisée (CR) HyperConverged
.
Conditions préalables
- Vous avez activé le pilote IOMMU (Input-Output Memory Management Unit).
Procédure
Modifiez le
HyperConverged
CR dans votre éditeur par défaut en exécutant la commande suivante :$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Ajoutez les informations sur le dispositif médiatisé à la CR
HyperConverged
spec
, en veillant à inclure les strophesmediatedDevicesConfiguration
etpermittedHostDevices
. Par exemple :Exemple de fichier de configuration
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: <.> mediatedDevicesTypes: <.> - nvidia-231 nodeMediatedDeviceTypes: <.> - mediatedDevicesTypes: <.> - nvidia-233 nodeSelector: kubernetes.io/hostname: node-11.redhat.com permittedHostDevices: <.> mediatedDevices: - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q - mdevNameSelector: GRID T4-8Q resourceName: nvidia.com/GRID_T4-8Q ...
<.> Crée des dispositifs médiatisés. <.> Requis : Configuration globale
mediatedDevicesTypes
. <.> Facultatif : Remplace la configuration globale pour des nœuds spécifiques. <.> Requis si vous utiliseznodeMediatedDeviceTypes
<.> Expose les périphériques à médiation au cluster.- Enregistrez vos modifications et quittez l'éditeur.
Vérification
Vous pouvez vérifier qu'un dispositif a été ajouté à un nœud spécifique en exécutant la commande suivante :
oc describe node <node_name>
10.18.11.2.6.2. Suppression des dispositifs à médiation de la grappe à l'aide de la CLI
Pour supprimer un dispositif médiatisé du cluster, supprimez les informations relatives à ce dispositif de la ressource personnalisée (CR) HyperConverged
.
Procédure
Modifiez le
HyperConverged
CR dans votre éditeur par défaut en exécutant la commande suivante :$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
Supprimez les informations relatives au dispositif dans les strophes
spec.mediatedDevicesConfiguration
etspec.permittedHostDevices
de la CRHyperConverged
. La suppression des deux entrées garantit la possibilité de créer ultérieurement un nouveau type de dispositif à médiation sur le même nœud. Par exemple :Exemple de fichier de configuration
apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: mediatedDevicesConfiguration: mediatedDevicesTypes: 1 - nvidia-231 permittedHostDevices: mediatedDevices: 2 - mdevNameSelector: GRID T4-2Q resourceName: nvidia.com/GRID_T4-2Q
- Enregistrez vos modifications et quittez l'éditeur.
10.18.11.3. Utilisation de dispositifs médiatisés
Un vGPU est un type de dispositif médiatisé ; les performances du GPU physique sont réparties entre les dispositifs virtuels. Vous pouvez attribuer des périphériques médiatisés à une ou plusieurs machines virtuelles.
10.18.11.3.1. Attribution d'un dispositif médiatisé à une machine virtuelle
Attribuer des périphériques médiatisés tels que des GPU virtuels (vGPU) à des machines virtuelles.
Conditions préalables
-
Le dispositif médiatisé est configuré dans la ressource personnalisée
HyperConverged
.
Procédure
Attribuez le périphérique médiatisé à une machine virtuelle (VM) en modifiant la strophe
spec.domain.devices.gpus
du manifesteVirtualMachine
:Exemple de manifeste de machine virtuelle
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: domain: devices: gpus: - deviceName: nvidia.com/TU104GL_Tesla_T4 1 name: gpu1 2 - deviceName: nvidia.com/GRID_T4-1Q name: gpu2
Vérification
Pour vérifier que le périphérique est disponible dans la machine virtuelle, exécutez la commande suivante, en remplaçant
<device_name>
par la valeurdeviceName
du manifesteVirtualMachine
:$ lspci -nnk | grep <device_name>
10.18.11.4. Ressources supplémentaires
10.18.12. Configuration d'un chien de garde
Exposer un chien de garde en configurant la machine virtuelle (VM) pour un périphérique de chien de garde, en installant le chien de garde et en démarrant le service de chien de garde.
10.18.12.1. Conditions préalables
-
La machine virtuelle doit disposer d'une prise en charge par le noyau d'un périphérique de surveillance
i6300esb
. Les images Red Hat Enterprise Linux (RHEL) prennent en chargei6300esb
.
10.18.12.2. Définition d'un dispositif de surveillance
Définir comment le chien de garde procède lorsque le système d'exploitation (OS) ne répond plus.
Tableau 10.4. Actions disponibles
|
La machine virtuelle (VM) s'éteint immédiatement. Si |
| La VM redémarre sur place et le système d'exploitation invité ne peut pas réagir. Étant donné que le temps nécessaire au redémarrage du système d'exploitation invité peut entraîner un dépassement du délai d'exécution des sondes d'intégrité, l'utilisation de cette option est déconseillée. Ce délai peut prolonger le temps nécessaire au redémarrage de la VM si les protections au niveau du cluster remarquent que la sonde d'intégrité a échoué et la replanifient de force. |
| La VM s'éteint de manière gracieuse en arrêtant tous les services. |
Procédure
Créez un fichier YAML avec le contenu suivant :
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog name: <vm-name> spec: running: false template: metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog spec: domain: devices: watchdog: name: <watchdog> i6300esb: action: "poweroff" 1 ...
- 1
- Spécifiez l'action
watchdog
(poweroff
,reset
, oushutdown
).
L'exemple ci-dessus configure le dispositif de surveillance
i6300esb
sur une VM RHEL8 avec l'action de mise hors tension et expose le dispositif en tant que/dev/watchdog
.Ce dispositif peut maintenant être utilisé par le binaire chien de garde.
Appliquez le fichier YAML à votre cluster en exécutant la commande suivante :
oc apply -f <nom_du_fichier>.yaml
Cette procédure sert uniquement à tester la fonctionnalité du chien de garde et ne doit pas être exécutée sur des machines de production.
Exécutez la commande suivante pour vérifier que la VM est connectée au dispositif de surveillance :
$ lspci | grep watchdog -i
Exécutez l'une des commandes suivantes pour confirmer que le chien de garde est actif :
Déclencher une panique du noyau :
# echo c > /proc/sysrq-trigger
Mettre fin au service de chien de garde :
# pkill -9 watchdog
10.18.12.3. Installation d'un dispositif de surveillance
Installez le paquet watchdog
sur votre machine virtuelle et démarrez le service watchdog.
Procédure
En tant qu'utilisateur root, installez le paquetage
watchdog
et ses dépendances :# yum install watchdog
Décommentez la ligne suivante dans le fichier
/etc/watchdog.conf
et enregistrez les modifications :#watchdog-device = /dev/watchdog
Activer le service watchdog pour qu'il démarre au démarrage :
# systemctl enable --now watchdog.service
10.18.12.4. Ressources supplémentaires
10.18.13. Importation et mise à jour automatiques de sources de démarrage prédéfinies
Vous pouvez utiliser des sources de démarrage qui sont system-defined et incluses avec OpenShift Virtualization ou user-defined, que vous créez. Les importations et les mises à jour de sources de démarrage définies par le système sont contrôlées par le portail de fonctionnalités du produit. Vous pouvez activer, désactiver ou réactiver les mises à jour à l'aide du portail de fonctionnalités. Les sources de démarrage définies par l'utilisateur ne sont pas contrôlées par le portail de fonctionnalités du produit et doivent être gérées individuellement pour activer ou désactiver les importations et les mises à jour automatiques.
À partir de la version 4.10, OpenShift Virtualization importe et met à jour automatiquement les sources de démarrage, sauf si vous vous désengagez manuellement ou si vous ne définissez pas de classe de stockage par défaut.
Si vous passez à la version 4.10, vous devez activer manuellement les importations et les mises à jour automatiques pour les sources de démarrage de la version 4.9 ou antérieure.
10.18.13.1. Activation des mises à jour automatiques des sources de démarrage
Si vous avez des sources de démarrage d'OpenShift Virtualization 4.9 ou antérieures, vous devez activer manuellement les mises à jour automatiques pour ces sources de démarrage. Toutes les sources de démarrage d'OpenShift Virtualization 4.10 et plus sont automatiquement mises à jour par défaut.
Pour activer les importations et les mises à jour automatiques des sources de démarrage, définissez le champ cdi.kubevirt.io/dataImportCron
sur true
pour chaque source de démarrage que vous souhaitez mettre à jour automatiquement.
Procédure
Pour activer les mises à jour automatiques pour une source de démarrage, utilisez la commande suivante pour appliquer l'étiquette
dataImportCron
à la source de données :oc label --overwrite DataSource rhel8 -n openshift-virtualization-os-images cdi.kubevirt.io/dataImportCron=true 1
- 1
- En spécifiant
true
, vous activez les mises à jour automatiques pour la source de démarragerhel8
.
10.18.13.2. Désactivation des mises à jour automatiques des sources de démarrage
La désactivation des importations et des mises à jour automatiques de la source de démarrage peut s'avérer utile pour réduire le nombre de journaux dans les environnements déconnectés ou pour réduire l'utilisation des ressources.
Pour désactiver les importations et les mises à jour automatiques de la source de démarrage, définissez le champ spec.featureGates.enableCommonBootImageImport
dans la ressource personnalisée (CR) HyperConverged
sur false
.
Les sources de démarrage définies par l'utilisateur ne sont pas affectées par ce paramètre.
Procédure
Utilisez la commande suivante pour désactiver les mises à jour automatiques de la source de démarrage :
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", \ "value": false}]'
10.18.13.3. Réactivation des mises à jour automatiques des sources de démarrage
Si vous avez précédemment désactivé les mises à jour automatiques des sources de démarrage, vous devez réactiver manuellement cette fonctionnalité. Définissez le champ spec.featureGates.enableCommonBootImageImport
dans la ressource personnalisée (CR) HyperConverged
sur true
.
Procédure
Utilisez la commande suivante pour réactiver les mises à jour automatiques :
$ oc patch hco kubevirt-hyperconverged -n openshift-cnv --type json -p '[{"op": "replace", "path": "/spec/featureGates/enableCommonBootImageImport", "value": true}]'
10.18.13.4. Configuration d'une classe de stockage pour les mises à jour de sources de démarrage définies par l'utilisateur
Vous pouvez configurer une classe de stockage qui permet l'importation et la mise à jour automatiques des sources de démarrage définies par l'utilisateur.
Procédure
Définir un nouveau
storageClassName
en modifiant la ressource personnalisée (CR)HyperConverged
.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: rhel8-image-cron spec: template: spec: storageClassName: <appropriate_class_name> ...
Définissez la nouvelle classe de stockage par défaut en exécutant les commandes suivantes :
$ oc patch storageclass <current_default_storage_class> -p '{"metadata" : {"annotations":{"storageclass.kubernetes.io/is-default-class":\N "false"}}}'
$ oc patch storageclass <appropriate_storage_class> -p '{"metadata" : {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
10.18.13.5. Activation des mises à jour automatiques pour les sources de démarrage définies par l'utilisateur
OpenShift Virtualization met automatiquement à jour les sources de démarrage définies par le système par défaut, mais ne met pas automatiquement à jour les sources de démarrage définies par l'utilisateur. Vous devez activer manuellement les importations et les mises à jour automatiques sur les sources de démarrage définies par l'utilisateur en modifiant la ressource personnalisée (CR) HyperConverged
.
Procédure
La commande suivante permet d'ouvrir le CR
HyperConverged
pour l'éditer :$ oc edit -n openshift-cnv HyperConverged
Modifiez le CR
HyperConverged
en ajoutant le modèle et la source de démarrage appropriés dans la sectiondataImportCronTemplates
. Par exemple :Exemple sous CentOS 7
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: name: centos7-image-cron annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" 1 spec: schedule: "0 */12 * * *" 2 template: spec: source: registry: 3 url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 10Gi managedDataSource: centos7 4 retentionPolicy: "None" 5
- 1
- Cette annotation est requise pour les classes de stockage dont la valeur
volumeBindingMode
est fixée àWaitForFirstConsumer
. - 2
- Planification du travail spécifié au format cron.
- 3
- Permet de créer un volume de données à partir d'une source de registre. Utilisez la valeur par défaut
pod
pullMethod
et nonnode
pullMethod
, qui est basée sur le cache de dockernode
. Le cache dockernode
est utile lorsqu'une image de registre est disponible viaContainer.Image
, mais que l'importateur CDI n'est pas autorisé à y accéder. - 4
- Pour que l'image personnalisée soit détectée comme source de démarrage disponible, le nom de l'image
managedDataSource
doit correspondre au nom du modèleDataSource
, qui se trouve sousspec.dataVolumeTemplates.spec.sourceRef.name
dans le fichier YAML du modèle VM. - 5
- Utilisez
All
pour conserver les volumes et les sources de données lorsque la tâche cron est supprimée. UtilisezNone
pour supprimer les volumes et les sources de données lorsque la tâche cron est supprimée.
10.18.13.6. Désactivation d'une mise à jour automatique pour une source de démarrage définie par le système ou par l'utilisateur
Vous pouvez désactiver les importations et les mises à jour automatiques pour une source de démarrage définie par l'utilisateur et pour une source de démarrage définie par le système.
Les sources de démarrage définies par le système n'étant pas répertoriées par défaut dans le site spec.dataImportCronTemplates
de la ressource personnalisée (CR) HyperConverged
, vous devez ajouter la source de démarrage et désactiver les importations et mises à jour automatiques.
Procédure
-
Pour désactiver les importations et les mises à jour automatiques d'une source de démarrage définie par l'utilisateur, supprimez la source de démarrage du champ
spec.dataImportCronTemplates
dans la liste des ressources personnalisées. Pour désactiver les importations et les mises à jour automatiques d'une source de démarrage définie par le système :
-
Modifiez le CR
HyperConverged
et ajoutez la source de démarrage àspec.dataImportCronTemplates
. Désactivez les importations et les mises à jour automatiques en définissant l'annotation
dataimportcrontemplate.kubevirt.io/enable
surfalse
. Par exemple :apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: dataImportCronTemplates: - metadata: annotations: dataimportcrontemplate.kubevirt.io/enable: false name: rhel8-image-cron ...
-
Modifiez le CR
10.18.13.7. Vérification de l'état d'une source de démarrage
Vous pouvez vérifier si une source de démarrage est définie par le système ou par l'utilisateur.
La section status
de chaque source d'amorçage répertoriée dans le champ status.dataImportChronTemplates
du CR HyperConverged
indique le type de source d'amorçage. Par exemple, commonTemplate: true
indique une source d'amorçage définie par le système (commonTemplate
) et status: {}
indique une source d'amorçage définie par l'utilisateur.
Procédure
-
Utilisez la commande
oc get
pour dresser la liste desdataImportChronTemplates
dans le CRHyperConverged
. Vérifier l'état de la source de démarrage.
Exemple de sortie
... apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged ... spec: ... status: 1 ... dataImportCronTemplates: 2 - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: centos-7-image-cron spec: garbageCollect: Outdated managedDataSource: centos7 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: url: docker://quay.io/containerdisks/centos:7-2009 storage: resources: requests: storage: 30Gi status: {} status: commonTemplate: true 3 ... - metadata: annotations: cdi.kubevirt.io/storage.bind.immediate.requested: "true" name: user-defined-dic spec: garbageCollect: Outdated managedDataSource: user-defined-centos-stream8 schedule: 55 8/12 * * * template: metadata: {} spec: source: registry: pullMethod: node url: docker://quay.io/containerdisks/centos-stream:8 storage: resources: requests: storage: 30Gi status: {} status: {} 4 ...
10.18.14. Activation des évictions du désordre sur les machines virtuelles
Vous pouvez utiliser l'ordonnanceur pour expulser les pods afin qu'ils puissent être replanifiés sur des nœuds plus appropriés. Si le pod est une machine virtuelle, l'éviction du pod entraîne la migration en direct de la machine virtuelle vers un autre nœud.
L'éviction du Descheduler pour les machines virtuelles est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
10.18.14.1. Profils du déschedulateur
Utilisez le profil Technology Preview DevPreviewLongLifecycle
pour activer le descheduler sur une machine virtuelle. Il s'agit du seul profil de déscheduler actuellement disponible pour OpenShift Virtualization. Pour garantir une planification correcte, créez des VM avec des demandes de CPU et de mémoire pour la charge attendue.
DevPreviewLongLifecycle
Ce profil équilibre l'utilisation des ressources entre les nœuds et permet les stratégies suivantes :
-
RemovePodsHavingTooManyRestarts
: supprime les pods dont les conteneurs ont été redémarrés trop de fois et les pods dont la somme des redémarrages de tous les conteneurs (y compris les Init Containers) est supérieure à 100. Le redémarrage du système d'exploitation invité de la VM n'augmente pas ce nombre. LowNodeUtilization
l'ordonnanceur : évince les pods des nœuds sur-utilisés lorsqu'il y a des nœuds sous-utilisés. Le nœud de destination du pod évincé sera déterminé par l'ordonnanceur.- Un nœud est considéré comme sous-utilisé si son utilisation est inférieure à 20 ou à tous les seuils (CPU, mémoire et nombre de pods).
- Un nœud est considéré comme surutilisé si son utilisation est supérieure à 50 ou à l'un des seuils (CPU, mémoire et nombre de pods).
-
10.18.14.2. Installation du déschedulateur
Le descheduler n'est pas disponible par défaut. Pour l'activer, vous devez installer Kube Descheduler Operator depuis OperatorHub et activer un ou plusieurs profils de descheduler.
Par défaut, le descheduler fonctionne en mode prédictif, ce qui signifie qu'il ne fait que simuler les évictions de pods. Vous devez changer le mode en mode automatique pour que le descheduler effectue les évictions de pods.
Si vous avez activé les plans de contrôle hébergés dans votre cluster, définissez un seuil de priorité personnalisé pour réduire le risque d'éviction des pods dans les espaces de noms des plans de contrôle hébergés. Définissez le nom de la classe de seuil de priorité sur hypershift-control-plane
, car elle a la valeur de priorité la plus basse (100000000
) des classes de priorité du plan de contrôle hébergé.
Conditions préalables
- Privilèges d'administrateur de cluster.
- Accès à la console web d'OpenShift Container Platform.
Procédure
- Connectez-vous à la console web de OpenShift Container Platform.
Créer l'espace de noms requis pour l'opérateur Kube Descheduler.
-
Naviguez jusqu'à Administration
Namespaces et cliquez sur Create Namespace. -
Entrez
openshift-kube-descheduler-operator
dans le champ Name, entrezopenshift.io/cluster-monitoring=true
dans le champ Labels pour activer les métriques du déscheduler, et cliquez sur Create.
-
Naviguez jusqu'à Administration
Installez l'opérateur Kube Descheduler.
-
Naviguez jusqu'à Operators
OperatorHub. - Tapez Kube Descheduler Operator dans le champ de filtre.
- Sélectionnez le site Kube Descheduler Operator et cliquez sur Install.
- Sur la page Install Operator, sélectionnez A specific namespace on the cluster. Sélectionnez openshift-kube-descheduler-operator dans le menu déroulant.
- Ajustez les valeurs de Update Channel et Approval Strategy aux valeurs souhaitées.
- Cliquez sur Install.
-
Naviguez jusqu'à Operators
Créer une instance de déscheduler.
-
Dans la page Operators
Installed Operators, cliquez sur Kube Descheduler Operator. - Sélectionnez l'onglet Kube Descheduler et cliquez sur Create KubeDescheduler.
Modifiez les paramètres si nécessaire.
- Pour expulser des pods au lieu de simuler les expulsions, remplacez le champ Mode par Automatic.
Développez la section Profiles et sélectionnez
DevPreviewLongLifecycle
. Le profilAffinityAndTaints
est activé par défaut.ImportantLe seul profil actuellement disponible pour OpenShift Virtualization est
DevPreviewLongLifecycle
.
-
Dans la page Operators
Vous pouvez également configurer les profils et les paramètres du déscheduler ultérieurement à l'aide de la CLI OpenShift (oc
).
10.18.14.3. Activation des évictions du déscheduler sur une machine virtuelle (VM)
Une fois le descheduler installé, vous pouvez activer les évictions du descheduler sur votre VM en ajoutant une annotation à la ressource personnalisée (CR) VirtualMachine
.
Conditions préalables
-
Installez le descheduler dans la console web de OpenShift Container Platform ou OpenShift CLI (
oc
). - Assurez-vous que la machine virtuelle n'est pas en cours d'exécution.
Procédure
Avant de démarrer la VM, ajoutez l'annotation
descheduler.alpha.kubernetes.io/evict
au CRVirtualMachine
:apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: metadata: annotations: descheduler.alpha.kubernetes.io/evict: "true"
Si vous n'avez pas déjà défini le profil
DevPreviewLongLifecycle
dans la console web lors de l'installation, spécifiez le profilDevPreviewLongLifecycle
dans la sectionspec.profile
de l'objetKubeDescheduler
:apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 profiles: - DevPreviewLongLifecycle mode: Predictive 1
- 1
- Par défaut, le descheduler n'évince pas les pods. Pour évincer des pods, définissez
mode
àAutomatic
.
L'ordonnanceur est maintenant activé sur la VM.