Schoten über Cluster verteilen
Derzeit wird die Auto-Scale-Richtlinie von AWS verwendet, um EKS-Worker-Knoten (min.+gewünschte 10, max. 15) jeden Tag zu einer festen Zeit zu starten. Es gibt 120 Pods und 30 Bereitstellungen.
Offensichtlich wird zunächst nur ein Knoten aktiv sein. Dann der zweite Knoten. Danach ist der letzte Knoten oben. Aus diesem Grund fügt Kubernetes alle Pods in den ersten Knoten hinzu. Gibt es eine Möglichkeit, dass die Pods im Szenario gleichmäßig verteilt werden?
Antworten
Werfen Sie einen Blick auf den Descheduler . Dieses Projekt wird als Kubernetes-Job ausgeführt, der darauf abzielt, Pods zu beenden, wenn er der Meinung ist, dass der Cluster unausgeglichen ist.
Die LowNodeUtilizationStrategie scheint zu Ihrem Fall zu passen:
Diese Strategie findet Knoten, die nicht ausgelastet sind, und entfernt Pods, wenn möglich, von anderen Knoten in der Hoffnung, dass die Neuerstellung entfernter Pods auf diesen nicht ausgelasteten Knoten geplant wird.
Eine andere Option besteht darin, ein wenig Chaos Engineering manuell anzuwenden, wodurch ein fortlaufendes Update für Ihre Bereitstellung erzwungen wird, und hoffentlich wird der Planer das Gleichgewichtsproblem beheben, wenn Pods neu erstellt werden.
Sie können die verwenden kubectl rollout restart my-deployment. Es ist viel besser, als die Pods einfach mit zu löschen kubectl delete pod, da der Rollout die Verfügbarkeit während des „Rebalancing“ sicherstellt (obwohl das Löschen der Pods insgesamt Ihre Chancen auf ein besseres Rebalancing erhöht).
Sie sollten sich mit Affinität und Anti-Affinität befassen, da Sie so steuern können, welche Pods auf welchen Knoten gehen. Sie können es so haben, dass es mit Anti-Affinität nur 1 Pod jeder Bereitstellung auf einem Knoten gibt. Dies ist ein bisschen übertrieben und würde für Sie nicht genau funktionieren, obwohl Sie mit IIRC mehrere Pods auf einem Knoten haben können, nur mit einem Limit.
https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/