3.9. Éviction des pods à l'aide de l'ordonnanceur
Alors que le planificateur est utilisé pour déterminer le nœud le plus approprié pour héberger un nouveau pod, le déscheduler peut être utilisé pour évincer un pod en cours d'exécution afin qu'il puisse être reprogrammé sur un nœud plus approprié.
3.9.1. À propos du déschedulateur Copier lienLien copié sur presse-papiers!
Vous pouvez utiliser l'ordonnanceur pour expulser les pods sur la base de stratégies spécifiques afin que les pods puissent être replanifiés sur des nœuds plus appropriés.
Vous pouvez bénéficier de la désimplantation des pods en cours d'exécution dans des situations telles que les suivantes :
- Les nœuds sont sous-utilisés ou surutilisés.
 - Les exigences relatives aux pods et aux affinités entre nœuds, telles que les taches ou les étiquettes, ont changé et les décisions d'ordonnancement initiales ne sont plus appropriées pour certains nœuds.
 - En cas de défaillance d'un nœud, les pods doivent être déplacés.
 - De nouveaux nœuds sont ajoutés aux grappes.
 - Les pods ont été redémarrés trop souvent.
 
L'ordonnanceur ne planifie pas le remplacement des pods expulsés. Le planificateur effectue automatiquement cette tâche pour les pods évincés.
Lorsque l'ordonnanceur décide d'expulser des pods d'un nœud, il utilise le mécanisme général suivant :
- 
							Les pods des espaces de noms 
openshift-*etkube-systemne sont jamais expulsés. - 
							Les pods critiques dont la valeur de 
priorityClassNameestsystem-cluster-criticalousystem-node-criticalne sont jamais expulsés. - Les pods statiques, en miroir ou autonomes qui ne font pas partie d'un contrôleur de réplication, d'un ensemble de réplicas, d'un déploiement ou d'un travail ne sont jamais expulsés car ces pods ne seront pas recréés.
 - Les pods associés aux ensembles de démons ne sont jamais expulsés.
 - Les pods disposant d'un stockage local ne sont jamais expulsés.
 - Les pods "best effort" sont éliminés avant les pods "burstable" et "guaranteed".
 - 
							Tous les types de pods ayant l'annotation 
descheduler.alpha.kubernetes.io/evictsont éligibles à l'expulsion. Cette annotation est utilisée pour passer outre les contrôles qui empêchent l'expulsion, et l'utilisateur peut choisir le pod qui sera expulsé. Les utilisateurs doivent savoir comment et si le pod sera recréé. - Les pods soumis au budget de perturbation des pods (PDB) ne sont pas expulsés si la désynchronisation viole leur budget de perturbation des pods (PDB). Les pods sont expulsés en utilisant la sous-ressource d'expulsion pour gérer le PDB.
 
3.9.2. Profils du déschedulateur Copier lienLien copié sur presse-papiers!
Les profils suivants sont disponibles :
AffinityAndTaintsCe profil expulse les pods qui violent l'anti-affinité inter-pods, l'affinité des nœuds et les taches des nœuds.
Il permet de mettre en œuvre les stratégies suivantes :
- 
										
RemovePodsViolatingInterPodAntiAffinity: élimine les pods qui violent l'anti-affinité inter-pods. - 
										
RemovePodsViolatingNodeAffinity: supprime les pods qui ne respectent pas l'affinité des nœuds. RemovePodsViolatingNodeTaints: supprime les pods qui violentNoScheduletaints sur les nœuds.Les pods dont le type d'affinité de nœud est
requiredDuringSchedulingIgnoredDuringExecutionsont supprimés.
- 
										
 TopologyAndDuplicatesCe profil expulse les pods afin de répartir uniformément les pods similaires ou les pods du même domaine topologique entre les nœuds.
Il permet de mettre en œuvre les stratégies suivantes :
- 
										
RemovePodsViolatingTopologySpreadConstraintil détecte les domaines topologiques déséquilibrés et tente d'expulser les pods des domaines les plus vastes lorsque les contraintes deDoNotSchedulesont violées. - 
										
RemoveDuplicates: garantit qu'il n'y a qu'un seul pod associé à un ensemble de répliques, à un contrôleur de réplication, à un déploiement ou à un travail s'exécutant sur le même nœud. S'il y en a plus, ces pods dupliqués sont évincés pour une meilleure distribution des pods dans un cluster. 
- 
										
 LifecycleAndUtilizationCe profil permet d'expulser les pods qui fonctionnent depuis longtemps et d'équilibrer l'utilisation des ressources entre les nœuds.
Il permet de mettre en œuvre les stratégies suivantes :
RemovePodsHavingTooManyRestarts: supprime les pods dont les conteneurs ont été redémarrés trop souvent.Pods où la somme des redémarrages de tous les conteneurs (y compris les conteneurs d'initialisation) est supérieure à 100.
LowNodeUtilizationle système de gestion des pods : trouve les nœuds qui sont sous-utilisés et expulse les pods, si possible, des nœuds surutilisés dans l'espoir que la recréation des pods expulsés sera programmée sur ces nœuds sous-utilisés.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).
PodLifeTime: évince les nacelles trop anciennes.Par défaut, les pods datant de plus de 24 heures sont supprimés. Vous pouvez personnaliser la valeur de la durée de vie des pods.
SoftTopologyAndDuplicatesCe profil est le même que celui de
TopologyAndDuplicates, sauf que les pods ayant des contraintes topologiques douces, commewhenUnsatisfiable: ScheduleAnyway, sont également pris en compte pour l'expulsion.NoteN'activez pas à la fois
SoftTopologyAndDuplicatesetTopologyAndDuplicates. L'activation des deux entraîne un conflit.EvictPodsWithLocalStorage- Ce profil permet aux pods disposant d'un stockage local d'être éligibles à l'éviction.
 EvictPodsWithPVC- 
								Ce profil permet aux pods ayant des réclamations de volumes persistants d'être éligibles à l'éviction. Si vous utilisez 
Kubernetes NFS Subdir External Provisioner, vous devez ajouter un espace de noms exclu pour l'espace de noms où le provisionneur est installé. 
3.9.3. Installation du déschedulateur Copier lienLien copié sur presse-papiers!
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-operatordans le champ Name, entrezopenshift.io/cluster-monitoring=truedans 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 pour sélectionner un ou plusieurs profils à activer. Le profil
AffinityAndTaintsest activé par défaut. Cliquez sur Add Profile pour sélectionner d'autres profils.NoteN'activez pas à la fois
TopologyAndDuplicatesetSoftTopologyAndDuplicates. L'activation des deux entraîne un conflit.Optionnel : Développez la section Profile Customizations pour définir des configurations optionnelles pour le déscheduler.
- 
													Définissez une valeur personnalisée de durée de vie des pods pour le profil 
LifecycleAndUtilization. Utilisez le champ podLifetime pour définir une valeur numérique et une unité valide (s,m, ouh). La durée de vie par défaut est de 24 heures (24h). Définissez un seuil de priorité personnalisé pour que les pods soient pris en compte pour l'expulsion uniquement si leur priorité est inférieure à un niveau de priorité spécifié. Utilisez le champ thresholdPriority pour définir un seuil de priorité numérique ou utilisez le champ thresholdPriorityClassName pour spécifier un certain nom de classe de priorité.
NoteNe spécifiez pas à la fois thresholdPriority et thresholdPriorityClassName pour le déscheduler.
Définissez des espaces de noms spécifiques à exclure ou à inclure dans les opérations du déscheduler. Développez le champ namespaces et ajoutez des espaces de noms à la liste excluded ou included. Vous ne pouvez définir qu'une liste d'espaces de noms à exclure ou une liste d'espaces de noms à inclure. Notez que les espaces de noms protégés (
openshift-*,kube-system,hypershift) sont exclus par défaut.ImportantLa stratégie
LowNodeUtilizationne prend pas en charge l'exclusion d'espaces de noms. Si le profilLifecycleAndUtilizationest défini, ce qui active la stratégieLowNodeUtilization, aucun espace de noms n'est exclu, même les espaces de noms protégés. Pour éviter les expulsions des espaces de noms protégés lorsque la stratégieLowNodeUtilizationest activée, définissez le nom de la classe de priorité sursystem-cluster-criticalousystem-node-critical.Expérimental : Définir les seuils de sous-utilisation et de surutilisation pour la stratégie
LowNodeUtilization. Utilisez le champ devLowNodeUtilizationThresholds pour définir l'une des valeurs suivantes :- 
															
Low: 10 % sous-utilisés et 30 % surutilisés - 
															
Medium20% de sous-utilisation et 50% de sur-utilisation (par défaut) - 
															
High: 40 % sous-utilisés et 70 % surutilisés 
NoteCe paramètre est expérimental et ne doit pas être utilisé dans un environnement de production.
- 
															
 
- 
													Définissez une valeur personnalisée de durée de vie des pods pour le profil 
 - 
											En option : Utilisez le champ Descheduling Interval Seconds pour modifier le nombre de secondes entre les exécutions du descheduler. La valeur par défaut est 
3600secondes. 
- Cliquez sur Create.
 
- 
									Dans la page Operators 
 
					Vous pouvez également configurer les profils et les paramètres du descheduler ultérieurement en utilisant le CLI OpenShift (oc). Si vous n'avez pas ajusté les profils lors de la création de l'instance de descheduler depuis la console web, le profil AffinityAndTaints est activé par défaut.
				
3.9.4. Configuration des profils de désordre Copier lienLien copié sur presse-papiers!
Vous pouvez configurer les profils utilisés par le descheduler pour évincer les pods.
Conditions préalables
- Privilèges de l'administrateur du cluster
 
Procédure
Modifiez l'objet
KubeDescheduler:oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Spécifiez un ou plusieurs profils dans la section
spec.profiles.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - Facultatif : Par défaut, le descheduler n'expulse pas les pods. Pour évincer les modules, définissez
modesurAutomatic. - 2
 - Facultatif : Définissez une liste d'espaces de noms créés par l'utilisateur à inclure ou à exclure des opérations de déscheduler. Utilisez
excludedpour définir une liste d'espaces de noms à exclure ou utilisezincludedpour définir une liste d'espaces de noms à inclure. Notez que les espaces de noms protégés (openshift-*,kube-system,hypershift) sont exclus par défaut.ImportantLa stratégie
LowNodeUtilizationne prend pas en charge l'exclusion d'espaces de noms. Si le profilLifecycleAndUtilizationest défini, ce qui active la stratégieLowNodeUtilization, aucun espace de noms n'est exclu, même les espaces de noms protégés. Pour éviter les expulsions des espaces de noms protégés lorsque la stratégieLowNodeUtilizationest activée, définissez le nom de la classe de priorité sursystem-cluster-criticalousystem-node-critical. - 3
 - Facultatif : Activez une valeur personnalisée de durée de vie du pod pour le profil
LifecycleAndUtilization. Les unités valides sonts,m, ouh. La durée de vie du pod par défaut est de 24 heures. - 4
 - Facultatif : Spécifiez un seuil de priorité pour que les pods soient pris en compte pour l'expulsion uniquement si leur priorité est inférieure au niveau spécifié. Utilisez le champ
thresholdPrioritypour définir un seuil de priorité numérique (par exemple,10000) ou utilisez le champthresholdPriorityClassNamepour spécifier un certain nom de classe de priorité (par exemple,my-priority-class-name). Si vous spécifiez un nom de classe de priorité, il doit déjà exister ou le descheduler lancera une erreur. Ne définissez pas à la foisthresholdPriorityetthresholdPriorityClassName. - 5
 - Ajouter un ou plusieurs profils à activer. Profils disponibles :
AffinityAndTaints,TopologyAndDuplicates,LifecycleAndUtilization,SoftTopologyAndDuplicates,EvictPodsWithLocalStorage, etEvictPodsWithPVC. - 6
 - N'activez pas à la fois
TopologyAndDuplicatesetSoftTopologyAndDuplicates. L'activation des deux entraîne un conflit. 
Vous pouvez activer plusieurs profils ; l'ordre dans lequel les profils sont spécifiés n'est pas important.
- Enregistrez le fichier pour appliquer les modifications.
 
3.9.5. Configuration de l'intervalle de déschedulation Copier lienLien copié sur presse-papiers!
Vous pouvez configurer le temps qui s'écoule entre deux exécutions du Descheduler. La valeur par défaut est de 3600 secondes (une heure).
Conditions préalables
- Privilèges de l'administrateur du cluster
 
Procédure
Modifiez l'objet
KubeDescheduler:oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Mettez à jour le champ
deschedulingIntervalSecondsavec la valeur souhaitée :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - Définit le nombre de secondes entre les exécutions du planificateur. Une valeur de
0dans ce champ permet d'exécuter le descheduler une fois et de le quitter. 
- Enregistrez le fichier pour appliquer les modifications.
 
3.9.6. Désinstallation du déscheduler Copier lienLien copié sur presse-papiers!
					Vous pouvez supprimer le descheduler de votre cluster en supprimant l'instance du descheduler et en désinstallant Kube Descheduler Operator. Cette procédure nettoie également l'espace de noms KubeDescheduler CRD et openshift-kube-descheduler-operator.
				
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.
 Supprime l'instance du déscheduler.
- 
									Sur la page Operators 
Installed Operators, cliquez sur Kube Descheduler Operator.  - Sélectionnez l'onglet Kube Descheduler.
 - 
									Cliquez sur le menu Options 
									
									 à côté de l'entrée cluster et sélectionnez Delete KubeDescheduler.
								 - Dans la boîte de dialogue de confirmation, cliquez sur Delete.
 
- 
									Sur la page Operators 
 Désinstaller l'opérateur Kube Descheduler.
- 
									Naviguez jusqu'à Operators 
Installed Operators.  - 
									Cliquez sur le menu Options 
									
									 à côté de l'entrée Kube Descheduler Operator et sélectionnez Uninstall Operator.
								 - Dans la boîte de dialogue de confirmation, cliquez sur Uninstall.
 
- 
									Naviguez jusqu'à Operators 
 Supprimer l'espace de noms
openshift-kube-descheduler-operator.- 
									Naviguez jusqu'à Administration 
Namespaces.  - 
									Saisissez 
openshift-kube-descheduler-operatordans le champ de filtre. - 
									Cliquez sur le menu Options 
									
									 à côté de l'entrée openshift-kube-descheduler-operator et sélectionnez Delete Namespace.
								 - 
									Dans la boîte de dialogue de confirmation, saisissez 
openshift-kube-descheduler-operatoret cliquez sur Delete. 
- 
									Naviguez jusqu'à Administration 
 Supprimer le CRD
KubeDescheduler.- 
									Naviguez jusqu'à Administration 
Custom Resource Definitions.  - 
									Saisissez 
KubeDeschedulerdans le champ de filtre. - 
									Cliquez sur le menu Options 
									
									 à côté de l'entrée KubeDescheduler et sélectionnez Delete CustomResourceDefinition.
								 - Dans la boîte de dialogue de confirmation, cliquez sur Delete.
 
- 
									Naviguez jusqu'à Administration