Konfigurieren von Tolerations-Regeln für Dynamic Engine
Verwenden Sie Tolerations in Dynamic Engine-Helm-Charts, um zuzulassen, dass Pods auf Kubernetes-Knoten mit Taints geplant werden.
Ab Dynamic Engine v1.4.0 können Sie Toleration-Regeln in Helm-Wertedateien festlegen, um zu steuern, welche Knoten mit Taints für die Planung von Pods berechtigt sind. Wenden Sie eine einheitliche Regel auf alle Pods an oder konfigurieren Sie getrennte Regeln für Infrastruktur-Service-Pods und Kunden-Arbeitslast-Pods wie Datenintegrations-Jobs, Datenservices-Jobs und Routen.
Vorbereitungen
- Die benutzerdefinierten Ressourcendefinitionen dynamic-engine-crd müssen mit dem Helm-Chart oci://ghcr.io/talend/helm/dynamic-engine-crd installiert worden sein. Führen Sie andernfalls die folgenden Befehle für die Installation aus:
- Suchen Sie die zu verwendende Diagrammversion:
- Führen Sie den folgenden Helm-Befehl aus:
helm show chart oci://ghcr.io/talend/helm/dynamic-engine-crd --version <engine_version> - Sehen Sie die Version direkt über Talend Management Console ein oder suchen Sie im Dynamic Engine Änderungs-Log nach der in Ihrer Dynamic Engine-Version enthaltenen Diagrammversion.
- Verwenden Sie einen API-Aufruf an den Dynamic Engine-Versionsendpunkt.
- Führen Sie den folgenden Helm-Befehl aus:
- Führen Sie den folgenden Befehl aus, um das Helm-Chart einer bestimmten Version zu installieren:Ersetzen Sie <helm_chart_version> durch die Chart-Version, die von Ihrer Dynamic Engine-Version unterstützt wird.
helm install dynamic-engine-crd oci://ghcr.io/talend/helm/dynamic-engine-crd --version <helm_chart_version>Wenn die Version nicht angegeben wird, installieren Sie die neueste verfügbare dynamic-engine-crd-Diagrammversion.
- Suchen Sie die zu verwendende Diagrammversion:
- Ihr Kubernetes-Knoten muss Taints mit den Werten aufweisen, die Sie tolerieren möchten.
- Sie benötigen grundlegende Kenntnisse über Kubernetes-Taints und -Tolerations.
Warum und wann dieser Vorgang ausgeführt wird
Standardmäßig werden auf Knoten mit Taints keine Dynamic Engine-Pods geplant, es sei denn, Sie konfigurieren eine entsprechende Toleration-Regel. Ein Taint für einen Knoten verhindert, dass der Planer Pods platziert, die nicht die entsprechende Toleration aufweisen. Verwenden Sie eine einheitliche globale Regel, wenn alle Pods den gleichen Knoten-Pool mit Taints nutzen können. Konfigurieren Sie getrennte arbeitslastspezifische Regeln, wenn Infrastruktur-Service-Pods und Kunden-Arbeitslast-Pods auf verschiedenen Knoten mit Taints geplant werden müssen.
Prozedur
Um getrennte Toleration-Regeln für Infrastruktur-Service-Pods und Kunden-Arbeitslast-Pods zu konfigurieren, befolgen Sie die Schritte 4 und 5 statt der Schritte 2 und 3.
Ergebnisse
Nachdem Sie die Charts erfolgreich implementiert haben:
- Dynamic Engine-Services im Namespace qlik-dynamic-engine können auf Knoten mit dem Taint dedicated=dynamic-engine:NoSchedule geplant werden.
- Dynamic Engine-Umgebungsservices im Namespace qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID können auf Knoten mit dem Taint dedicated=dynamic-engine:NoSchedule geplant werden.
- Wenn getrennte Toleration-Regeln verwendet werden, können Kunden-Arbeitslast-Pods (Datenintegrations-Jobs, Datenservices-Jobs und Routen-Pods) im Namespace qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID auf Knoten mit dem Taint dedicated=dynamic-engine-jobs-and-routes:NoSchedule geplant werden.
Wenn Pods nach dem Hinzufügen von Tolerations im Status Pending (Ausstehend) bleiben, prüfen Sie, ob eine Nichtübereinstimmung zwischen Knoten-Taints und Tolerations vorliegt.
Zu häufigen Situationen zählen:
- Der Knoten weist den Taint dedicated=dynamic-engine:NoSchedule auf, aber der Pod hat keine Toleration für den Schlüssel dedicated.
- Die Pod-Toleration verwendet den falschen value, operator oder effect, sodass sie nicht genau mit dem Taint übereinstimmt.
- Der Knoten verwendet NoExecute und der Pod toleriert nur NoSchedule, sodass der Planer den Pod dennoch ablehnen oder auslagern kann.
Verwenden Sie die folgenden Befehle, um das Problem zu prüfen:
-
Prüfen Sie den Pod auf Planungsfehlerdetails:
kubectl describe pod <pod-name> -n <namespace>Schauen Sie sich die Abschnitte Events und Tolerations an. Ein fehlgeschlagenes Planungsevent benennt den spezifischen Taint, der nicht toleriert wurde.
-
Suchen Sie nach Uhrzeit sortiert nach Planungsfehlerevents:
kubectl get events -n <namespace> --sort-by=.lastTimestampSuchen Sie nach Meldungen mit FailedScheduling, die Taints ohne übereinstimmende Toleration referenzieren.
-
Vergleichen Sie Knoten-Taints mit Pod-Tolerations:
kubectl describe node <node-name>Prüfen Sie den Abschnitt Taints. Die Taint-Werte key, value, operator und effect müssen alle genau mit der Pod-Toleration übereinstimmen.
-
Identifizieren Sie, auf welchem Knoten ein Pod platziert wurde:
kubectl get pods -n <namespace> -o wideVerwenden Sie diesen Befehl, um die Knotenzuweisung anzuzeigen, und prüfen Sie diesen Knoten dann mit kubectl describe node.