Koordinator Descheduler dans le module complémentaire ack-koordinator offre des fonctionnalités de désordonnancement permettant de replanifier les Pods en cours d'exécution dont l'emplacement n'est pas optimal vers un autre nœud. Il étend le framework de désordonnancement de la communauté Kubernetes Descheduler avec un contrôle d'éviction amélioré. Koordinator Descheduler est compatible avec les politiques de Kubernetes Descheduler.
Avant de commencer
Familiarisez-vous avec les fonctionnalités, les attributs d'API et les configurations de politique (système, modèle, plug-in de politique et plug-in d'éviction) du Kubernetes Descheduler avant de le comparer à Koordinator Descheduler.
Relation entre Koordinator Descheduler et Kubernetes Descheduler
Avant la version 0.25.0, la communauté Kubernetes Descheduler a proposé le Descheduling Framework, une approche basée sur des plug-ins pour gérer le cycle de vie du désordonnancement, avec deux objectifs :
Transformer les politiques de désordonnancement et la logique d'éviction des pods en plug-ins pour plus de flexibilité.
Implémenter un environnement d'exécution prenant en charge le chargement et l'exécution des plug-ins, ainsi que la gestion du cycle de vie du désordonnancement.
Avec Kubernetes Descheduler 0.26.0, Koordinator Descheduler v1.2.0 a intégré toutes les politiques et le plug-in DefaultEvictor, et a ajouté l'évicteur MigrationController.
Différences de fonctionnalités
Koordinator Descheduler est compatible avec la plupart des cas d'utilisation de Kubernetes Descheduler, mais diffère par les méthodes de configuration, les politiques de désordonnancement, les évicteurs et le contrôle d'éviction.
Koordinator Descheduler a commencé à développer son framework de désordonnancement avant Kubernetes Descheduler et utilise une API de configuration différente :
v1alpha2/DeschedulerConfiguration.Koordinator Descheduler ajoute le plug-in de politique LowNodeLoad pour un désordonnancement conscient des points chauds, basé sur l'utilisation réelle des nœuds. Il offre des résultats plus précis que le plug-in natif LowNodeUtilization qui utilise les taux d'allocation des ressources. Consultez Utiliser le désordonnancement conscient des points chauds.
Koordinator Descheduler ajoute l'évicteur
MigrationController.MigrationControlleroffre un contrôle d'éviction plus sûr et plus complet. Consultez Configuration du plug-in Evictor.
Exemples de configuration
Les exemples suivants utilisent la politique RemovePodsViolatingNodeTaints (RemovePodsViolatingNodeTaints) pour comparer les formats de configuration de Kubernetes Descheduler et de Koordinator Descheduler. La version de configuration est définie par les champs apiVersion et kind.
|
Version de configuration |
Kubernetes Descheduler |
Kubernetes Descheduler |
Koordinator Descheduler |
|
Version du composant |
Toutes les versions |
v0.27.0 et ultérieures |
Toutes les versions |
|
|
|
|
|
|
|
|
|
|
-
Exemple de configuration Kubernetes Descheduler
-
Pour les versions antérieures à la v0.27.0, la version de configuration est
descheduler/v1alpha1/DeschedulerPolicy.# API attributes. apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" # System configurations. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # Eviction configurations. In the other two configuration APIs, these parameters are part of the evictor plug-in configuration. evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false # Policy configurations. In the other two APIs, these are provided as descheduling templates and split into plug-in activation and parameter settings. strategies: "RemovePodsViolatingNodeTaints": enabled: true params: nodeFit: true # The nodeFit parameter must be enabled in each policy. In the other two APIs, nodeFit is part of the evictor plug-in configuration. excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". -
Pour la v0.27.0 et les versions ultérieures, la version de configuration est
descheduler/v1alpha2/DeschedulerPolicy.# API attributes. apiVersion: "descheduler/v1alpha2" kind: "DeschedulerPolicy" # System configurations. nodeSelector: "node=node1" maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # End of system configurations. # A list of descheduling templates. profiles: - name: kubernetes-descheduler # Specify the name of the descheduling template. # Template configurations. plugins: deschedule: enabled: - "RemovePodsViolatingNodeTaints" # The data type of the `enabled` field is a list of strings. balance: disabled: - "*" # End of template configurations. # A list of plug-in configurations. pluginConfig: # Configuration for the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # Node taint validation plug-in configuration. args: excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". # Configuration for the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # The nodeFit parameter is part of the evictor plug-in configuration.
-
-
Exemple de configuration Koordinator Descheduler
La version de configuration est
descheduler/v1alpha2/DeschedulerConfiguration.# API attributes. apiVersion: descheduler/v1alpha2 kind: DeschedulerConfiguration # System configurations. dryRun: false deschedulingInterval: 120s nodeSelector: node: node1 # The data type of nodeSelector is different from the other two configuration APIs. maxNoOfPodsToEvictPerNode: 10 maxNoOfPodsToEvictPerNamespace: 10 # End of system configurations. # A list of descheduling templates. profiles: - name: koord-descheduler # Template configurations. plugins: deschedule: enabled: - name: RemovePodsViolatingNodeTaints # The data type of the `enabled` field is a list of structs. balance: disabled: - name: "*" evict: # Use the `evict` field to specify the evictor to use. enabled: - name: MigrationController # MigrationController is enabled by default. # - name: DefaultEvictor # Optional: DefaultEvictor. filter: # Use the `filter` field to specify the eviction filter to use. enabled: - name: MigrationController # MigrationController is enabled by default. # - name: DefaultEvictor # Optional: DefaultEvictor. # End of template configurations. # A list of plug-in configurations. pluginConfig: # Configuration for the RemovePodsViolatingNodeTaints policy plug-in. - name: RemovePodsViolatingNodeTaints # Node taint validation plug-in configuration. args: excludedTaints: - deschedule=not-allow # Ignore nodes with the taint key="deschedule" and value="not-allow". # Configuration for the DefaultEvictor evictor plug-in. - name: "DefaultEvictor" args: evictFailedBarePods: false evictLocalStoragePods: true evictSystemCriticalPods: true evictDaemonSetPods: false ignorePvcPods: false nodeFit: true # The nodeFit parameter is part of the evictor plug-in configuration.
Ces exemples couvrent uniquement les différences de version de configuration. Consultez Configuration système, Configuration des modèles, Configuration des plug-ins de politique et Configuration des plug-ins Evictor pour plus de détails sur les paramètres.
Différences de configuration système
La configuration système de Kubernetes Descheduler (Top Level configuration) prend uniquement en charge
nodeSelector,maxNoOfPodsToEvictPerNodeetmaxNoOfPodsToEvictPerNamespace. Koordinator Descheduler ajoutedryRunetdeschedulingInterval.Dans l'API
v1alpha1/DeschedulerPolicyde Kubernetes Descheduler, les paramètres de l'évicteur de pods font partie de la configuration système. Dans les deux autres API, ils se trouvent dans le champargsdu plug-in evictor.Dans l'API
v1alpha2/DeschedulerConfigurationde Koordinator Descheduler, le type de données denodeSelectordiffère légèrement des deux autres API. Consultez Configuration système.
Différences de configuration des modèles
L'API
v1alpha1/DeschedulerPolicyde Kubernetes Descheduler ne prend pas en charge les modèles de désordonnancement, ce qui rend son format de configuration significativement différent de celui de Koordinator Descheduler.-
L'API
v1alpha2/DeschedulerPolicyde Kubernetes Descheduler et l'APIv1alpha2/DeschedulerConfigurationde Koordinator Descheduler sont similaires car elles utilisent toutes deux des modèles de désordonnancement. Elles diffèrent par les types de données et la manière dont le plug-in evictor est activé.v1alpha2/DeschedulerPolicyutilise une liste de chaînes pour activer ou désactiver les plug-ins, tandis quev1alpha2/DeschedulerConfigurationutilise une liste de structures sousplugins.v1alpha2/DeschedulerPolicyprend uniquement en charge DefaultEvictor (activé automatiquement).v1alpha2/DeschedulerConfigurationprend en charge à la fois MigrationController et DefaultEvictor, où le comportement de DefaultEvictor correspond à la version communautaire. Spécifiez l'évicteur dans les champs de modèleevictetfilter.
Différences de configuration des plug-ins de politique
Koordinator Descheduler prend en charge toutes les politiques de Kubernetes Descheduler 0.26.0, mais Koordinator Descheduler ne prend pas en charge les paramètres ajoutés dans les versions ultérieures. Le tableau suivant répertorie les différences de paramètres pour Koordinator Descheduler.
|
Modifications des paramètres de politique |
Exemple de code |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Différences de configuration des plug-ins Evictor
Koordinator Descheduler prend en charge le plug-in DefaultEvictor de Kubernetes Descheduler 0.26.0. Les paramètres ajoutés à DefaultEvictor dans les versions ultérieures de Kubernetes Descheduler ne sont pas pris en charge dans Koordinator Descheduler.
DefaultEvictor
|
Modifications des paramètres de l'évicteur |
Exemple |
|
|
|
MigrationController
Koordinator Descheduler prend également en charge le plug-in évicteur MigrationController, qui permet d'utiliser plusieurs méthodes d'éviction.
Migration vers Koordinator Descheduler
Pour migrer de Kubernetes Descheduler vers Koordinator Descheduler, suivez les étapes spécifiques à la version ci-dessous :
Désinstallez votre instance actuelle de Kubernetes Descheduler. L'exécution de plusieurs désordonnanceurs dans un cluster entraîne des conditions de concurrence imprévisibles.
-
Installez et configurez Koordinator Descheduler comme décrit dans Activer la fonctionnalité de désordonnancement.
Configurez les paramètres au niveau du système dans Koordinator Descheduler en vous basant sur les Différences de configuration système.
-
Créez un modèle de désordonnancement compatible avec Koordinator Descheduler.
Si vous utilisez Kubernetes Descheduler 0.26.0 ou une version antérieure, seule l'API
v1alpha1/DeschedulerPolicyest prise en charge. Effectuez la configuration en vous basant sur les Différences de configuration des modèles.-
Si vous utilisez une version de Kubernetes Descheduler postérieure à 0.26.0, vérifiez l'API de configuration que vous utilisez.
Si l'API est
v1alpha1/DeschedulerPolicy, créez un modèle de désordonnancement compatible avec Koordinator Descheduler en vous basant sur les Différences de configuration des modèles.Si l'API est
v1alpha2/DeschedulerPolicy, modifiez les champs de configuration dans Koordinator Descheduler en vous basant sur les Différences de configuration des modèles.
Configurez les plug-ins dans Koordinator Descheduler en vous basant sur les Différences de configuration des plug-ins de politique et les Différences de configuration des plug-ins Evictor.
Références
-
Installez le composant ack-koordinator et activez le désordonnancement : Activer la fonctionnalité de désordonnancement.
Vous pouvez également configurer des paramètres avancés pour Koordinator Descheduler, les modèles de désordonnancement, les plug-ins de politique de désordonnancement et les plug-ins d'éviction dans une ConfigMap. Pour plus d'informations, consultez Configurer les paramètres avancés.
Présentation du composant ack-koordinator et journal des modifications : ack-koordinator (anciennement ack-slo-manager).