Configurer des règles de tolerations (tolérances) pour Dynamic Engine
Utilisez des tolerations (tolérances) dans les charts Helm Dynamic Engine pour permettre la planification des pods sur des nœuds Kubernetes marqués.
À partir de Dynamic Engine v1.4.0, vous pouvez définir les règles de tolerations (tolérances) dans les fichiers de valeurs Helm pour contrôler quels nœuds marqués sont éligibles pour la planification des pods. Appliquez une règle uniforme à l'ensemble des pods ou configurez des règles distinctes pour les pods de service d'infrastructure et les pods de workload client tels que les Jobs d'intégration de données, les Jobs de service de données et les Routes.
Avant de commencer
- Les définitions des ressources personnalisées dynamic-engine-crd doivent avoir été installées à l'aide du chart Helm oci://ghcr.io/talend/helm/dynamic-engine-crd. Si ce n'est pas le cas, exécutez les commandes suivantes pour l'installation :
- Trouvez la version du chart à utiliser :
- Exécutez la commande Helm suivante :
helm show chart oci://ghcr.io/talend/helm/dynamic-engine-crd --version <engine_version> - Visualisez la version directement depuis Talend Management Console ou consultez le Dynamic Engine journal de modification de la version du chart dans votre version de Dynamic Engine.
- Utilisez un appel d'API pour l'endpoint de version de Dynamic Engine (en anglais).
- Exécutez la commande Helm suivante :
- Exécutez la commande suivante pour installer le chart Helm dans une version donnée :Remplacez <helm_chart_version> par la version du chart supportée par votre version du Dynamic Engine.
helm install dynamic-engine-crd oci://ghcr.io/talend/helm/dynamic-engine-crd --version <helm_chart_version>Si vous ne spécifiez pas la version, vous installez la dernière version disponible du chart dynamic-engine-crd.
- Trouvez la version du chart à utiliser :
- Vos nœuds Kubernetes doivent être marqués à l'aide des valeurs que vous souhaitez tolérer.
- Vous devez avoir des connaissances de base des marques et tolerations (tolérances) Kubernetes (en anglais).
Pourquoi et quand exécuter cette tâche
Par défaut, les pods Dynamic Engine ne sont pas planifiés sur les noeuds marqués, sauf si vous configurez une règle de toleration (tolérance) correspondante. Une marque sur un nœud empêche l'ordonnanceur de placer des pods auxquels il manque une toleration (tolérance) correspondante. Lorsque tous les pods peuvent partager le même pool de nœuds marqués, utilisez une règle globale uniforme. Configurez des règles spécifiques au workload distinctes lorsque les pods de service d'infrastructure et les pods de workload client doivent être planifiés sur des nœuds marqués différents.
Procédure
Pour configurer des règles de tolerations (tolérances) distinctes pour les pods de service d'infrastructure et les pods de workload client, suivez les étapes 4 et 5 au lieu des étapes 2 et 3.
Résultats
Après le déploiement correct des charts :
- Les services Dynamic Engine figurant dans l'espace de noms qlik-dynamic-engine peuvent être planifiés sur des nœuds marqués à l'aide de dedicated=dynamic-engine:NoSchedule.
- Les services d'environnement Dynamic Engine figurant dans l'espace de noms qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID peuvent être planifiés sur des nœuds marqués à l'aide de dedicated=dynamic-engine:NoSchedule.
- Lors de l'utilisation de règles de tolerations (tolérances) distinctes, les pods de workload client (Jobs d'intégration de données, Jobs de service de données et pods de Route) figurant dans l'espace de noms qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID peuvent être planifiés sur des nœuds marqués à l'aide de dedicated=dynamic-engine-jobs-and-routes:NoSchedule.
Si les pods restent à l'état Pending (En attente) après l'ajout de tolerations (tolérances), vérifiez qu'il n'existe pas d'incohérence entre les marques des nœuds et les tolerations (tolérances) des pods.
Les situations les plus fréquentes peuvent être :
- Le nœud est marqué à l'aide de dedicated=dynamic-engine:NoSchedule, mais le pod n'a pas de toleration (tolérance) pour la clé dedicated.
- La toleration (tolérance) de pod utilise le mauvais élément value, operator ou effect, si bien qu'elle ne correspond pas exactement à la marque.
- Le nœud utilise NoExecute et le pod tolère uniquement NoSchedule, si bien que l'ordonnanceur peut tout de même rejeter ou expulser le pod.
Pour inspecter le problème, utilisez les commandes suivantes :
-
Dans le pod, recherchez les détails de l'échec de planification :
kubectl describe pod <pod-name> -n <namespace>Recherchez les sections Events (Événements) et Tolerations (Tolérances). Un événement de planification en échec nomme la marque spécifique qui n'a pas été tolérée.
-
Accédez aux événements d'échec de planification triés par heure :
kubectl get events -n <namespace> --sort-by=.lastTimestampRecherchez les messages FailedScheduling qui référencent des marques sans toleration (tolérance) correspondante.
-
Comparez les marques des nœuds et les tolerations (tolérances) des pods :
kubectl describe node <node-name>Vérifiez la section Taints (Marques). Les éléments key, value, operator et effect de la marque doivent tous parfaitement correspondre à la toleration (tolérance) du pod.
-
Identifiez sur quel nœud un pod est arrivé :
kubectl get pods -n <namespace> -o wideUtilisez cette commande pour voir l'attribution du nœud, puis inspectez ce nœud à l'aide de kubectl describe node.