Le déscheduling consiste à replanifier les pods correspondant aux règles d'éviction d'un nœud vers un autre. Lorsqu'il existe des nœuds surchargés en raison d'une inégalité des ressources du cluster, ou lorsque les pods ne peuvent pas être planifiés selon la politique prédéfinie suite à des modifications des attributs des nœuds, utilisez le déscheduling pour optimiser l'utilisation des ressources et affecter les pods aux nœuds les plus adaptés. Cela garantit la haute disponibilité et l'efficacité des charges de travail dans votre cluster.
Avant de commencer
Prenez note des éléments suivants avant d'utiliser la fonctionnalité de déscheduling.
Lisez la documentation officielle de Kubernetes pour comprendre le fonctionnement du planificateur Kubernetes ainsi que les termes liés aux politiques de planification natives de Kubernetes, tels que les taints et tolérations et les règles d'affinité et d'anti-affinité.
Reportez-vous à la rubrique ack-koordinator (ack-slo-manager) pour découvrir l'architecture et les fonctionnalités d'ack-koordinator.
Consultez la section Utiliser la planification consciente de la charge afin de comprendre comment Container Service for Kubernetes (ACK) donne la priorité aux nœuds faiblement chargés lors de la planification des pods, en se basant sur l'utilisation des ressources des nœuds.
Cette rubrique vous permet d'acquérir les connaissances suivantes sur le déscheduling :
Les cas d'utilisation du déscheduling.
Le flux de travail du déscheduling.
Les termes liés au déscheduling, notamment les modèles de déscheduling, les politiques Deschedule et Balance, ainsi que les évictors DefaultEvictor et MigrationController.
Importance du déscheduling
Le planificateur Kubernetes affecte les pods aux nœuds appropriés en fonction de l'état actuel du cluster. Toutefois, l'état du cluster évolue constamment. Dans certains scénarios, il peut s'avérer nécessaire de migrer des pods en cours d'exécution vers d'autres nœuds. Voici quelques exemples :
Les charges de travail du cluster ne sont pas réparties uniformément. Certains nœuds sont surchargés, ce qui dégrade leurs performances.
L'utilisation globale des ressources du cluster est faible. Vous souhaitez supprimer certains nœuds pour réduire les coûts. Pour ce faire, vous devez d'abord migrer les pods hébergés sur ces nœuds vers d'autres nœuds.
Le cluster présente une forte fragmentation des ressources. Par conséquent, un nœud peut manquer de ressources libres alors que le total des ressources disponibles dans le cluster reste suffisant. Dans ce scénario, les pods nécessitant d'importantes ressources ne peuvent pas être planifiés, ce qui augmente davantage les dépenses liées aux ressources du cluster.
Des taints ou des libellés sont ajoutés ou supprimés d'un nœud. Dans ce cas, certains pods présents sur le nœud ne correspondent plus à la règle d'affinité. Ces pods doivent être migrés vers un nœud dont la règle d'affinité correspond à leurs exigences.
Par exemple, une application connaît des fluctuations de charge à différents moments. Des nœuds surchargés peuvent apparaître pendant les heures de pointe, ce qui détériore la qualité de service de l'application. Pour résoudre ce problème, la fonctionnalité de déscheduling peut évincer les pods anormaux afin de réduire la charge des nœuds surchargés et garantir la qualité de service.
Pour atteindre cet objectif, ack-koordinator propose un module de déscheduling nommé Koordinator Descheduler, qui s'exécute sous forme de déploiement sur les nœuds. Koordinator Descheduler est développé sur la base du cadre de déscheduling (Descheduling Framework) de Kubernetes Descheduler. Il est compatible avec toutes les politiques de déscheduling de Kubernetes Descheduler. Koordinator Descheduler optimise également le déscheduling des pods en améliorant les politiques, les méthodes d'éviction, le contrôle du trafic d'éviction et les processus d'éviction. Pour plus d'informations sur les différences entre Koordinator Descheduler et Kubernetes Descheduler, consultez la rubrique Koordinator Descheduler et Kubernetes Descheduler.
Flux de travail du déscheduling
Koordinator Descheduler fonctionne de manière périodique. Configurez plusieurs politiques de déscheduling pour filtrer, vérifier et évincer les pods répondant aux conditions d'éviction. Le schéma suivant illustre le fonctionnement de Koordinator Descheduler.
-
Parcourez les modèles de déscheduling et exécutez séquentiellement la politique Deschedule activée dans chaque modèle.
Récupérez les informations concernant les nœuds, les charges de travail et les pods.
Faites correspondre les pods avec les règles de déscheduling (Deschedule).
Filtrez, vérifiez et triez les pods qui satisfont aux règles d'éviction.
L'évictor de pods activé dans le modèle de déscheduling envoie une demande d'éviction de pod.
Parcourez à nouveau les modèles de déscheduling et exécutez séquentiellement la politique Balance activée dans chaque modèle. Le flux de travail est similaire à l'étape 1.
Les sections suivantes décrivent les termes utilisés dans le flux de travail du déscheduling.
Modèle de déscheduling
Configurez un ou plusieurs modèles de déscheduling pour répondre à différents besoins. Pour chaque modèle, spécifiez la politique de déscheduling et l'évictor de pods à utiliser, définissez le champ d'application applicable et configurez des paramètres avancés pour un type spécifique de pod.
L'utilisation de politiques de déscheduling vous permet d'appliquer différentes stratégies d'éviction de pods selon les scénarios. Par exemple, pour évincer des pods expirés ayant des durées de vie (TTL) différentes dans divers namespaces, configurez plusieurs modèles de déscheduling et définissez un seuil de TTL pour les pods dans chaque namespace.
Pendant le processus de déscheduling, Koordinator Descheduler parcourt tous les modèles de déscheduling et exécute la politique Deschedule contenue dans chacun d'eux. Une fois toutes les politiques Deschedule exécutées, Koordinator Descheduler parcourt à nouveau les modèles et exécute la politique Balance de chaque modèle.
Politiques de déscheduling : Deschedule et Balance
Deux politiques de déscheduling sont disponibles : Deschedule et Balance. Ces politiques servent à identifier les pods à évincer. Pour plus d'informations sur la configuration des politiques de déscheduling et sur les fonctionnalités prises en charge par chacune d'elles, consultez la section Appliquer la configuration.
Deschedule : Koordinator Descheduler compare chaque pod aux contraintes de planification actuelles et évince les pods correspondants séquentiellement. Par exemple, il évince un par un les pods qui ne respectent pas la règle d'affinité ou d'anti-affinité des nœuds.
Balance : Koordinator Descheduler optimise la distribution de certains pods ou de l'ensemble des pods du cluster, puis décide quels pods évincer. Par exemple, il évince les pods des nœuds surchargés en fonction de l'utilisation des ressources des nœuds.
Les politiques de déscheduling sont indépendantes les unes des autres. Koordinator Descheduler exécute chaque politique pour évincer les pods selon les règles d'éviction définies, puis filtre, vérifie et trie les pods correspondants. Des contraintes telles que la capacité du cluster, l'utilisation des ressources et le nombre de réplicas sont prises en compte lors de la mise en correspondance des pods avec les règles d'éviction. Une fois que Koordinator Descheduler a déterminé les pods à évincer, il envoie une demande à l'évictor de pods pour procéder à leur éviction.
Évictors et contrôle de l'éviction
Les évictors dans Koordinator Descheduler sont utilisés pour évincer les pods. Deux évictors sont disponibles : DefaultEvictor et MigrationController.
DefaultEvictor : évictor de pods de base qui permet de limiter le nombre maximal de pods à évincer. Utilisez et configurez DefaultEvictor de la même manière que dans Kubernetes Descheduler. Pour plus d'informations, consultez la documentation DefaultEvictor.
MigrationController : permet d'évincer et de migrer les pods de manière sécurisée et de tracer les évictions de pods. Pour plus d'informations sur les paramètres, consultez la section MigrationController.
Pour plus d'informations sur les différences entre ces deux évictors, consultez la section Activer la fonctionnalité de déscheduling.
Activer le déscheduling
Pour plus d'informations sur l'installation du composant ack-koordinator et l'activation du déscheduling, consultez la rubrique Activer la fonctionnalité de déscheduling.
Vous pouvez également configurer des paramètres avancés pour Koordinator Descheduler, les modèles de déscheduling, les plug-ins de politique de déscheduling et les plug-ins d'évictor dans une ConfigMap. Pour plus d'informations, consultez la section Configurer les paramètres avancés.
Références
Si vous utilisez Kubernetes Descheduler, nous vous recommandons de migrer vers Koordinator Descheduler. Pour plus d'informations sur les différences et la procédure de migration vers Koordinator Descheduler, consultez la rubrique Koordinator Descheduler et Kubernetes Descheduler.
La fonctionnalité de déscheduling est développée sur la base de Koordinator Descheduler, intégré au composant ack-koordinator. L'installation et l'utilisation du composant ack-koordinator sont gratuites. Toutefois, des frais peuvent s'appliquer dans certains scénarios. Pour plus d'informations, consultez la section Facturation.