Alle Kubernetes-Pods laufen auf einer einzigen CPU

Alle Kubernetes-Pods laufen auf einer einzigen CPU

Meine Maschine hat 48 CPUs. Bevor ich Pods erstelle, schalte ich 1-47 CPUs offline echo "0" > /sys/devices/system/cpuN/online.

Wenn ich den ersten Pod für einen Knoten erstelle, schalte ich die CPU #1per Echo online "1" > /sys/devices/system/cpu1/online. Der Pod führt die CPU-Stress-Aufgabe aus und ich sehe, CPU0dass er vollständig von diesem Pod genutzt wird. Der Pod nutzt 99-100% CPU

Wenn ich den zweiten Pod für denselben Knoten erstelle, bin ich online CPU #2 echo "1" > /sys/devices/system/cpu2/online. Aber nur CPU0 ist voll ausgelastet CPU1und CPU2hatte keine Last. Und beide Pods laufen mit 50 % CPU-Auslastung.

Wenn ich mehr Pods für denselben Knoten erstelle, teilen sie sich einfach, CPU0was ich an CPUs online habe. Alle anderen CPUs, die online sind, sind einfach im Leerlauf.

Mein Kubernetes version is 1.23.12. Dies passiert in Version nicht 1.28. In Version 1.28laufen alle Pods auf unterschiedlichen CPUs mit 100 % Auslastung. Das YAML des Pods hat eine CPU-Beschränkung und eine Anforderung von 1.

Ich bin mir nicht sicher, ob es sich um einen Versionsfehler handelt 1.23.12oder ob eine Konfiguration darin schief läuft. Jeder Kommentar ist willkommen.

Antwort1

Der CPU-Manager ist für die Zuweisung von CPURessourcen an Pods in Kubernetes verantwortlich. Auf einem Knoten ist der CPU-Manager für die Aktivierung erweiterter Workload-Richtlinien verantwortlich. Je nachdem, ob der Pod gedrosselt ist und welche CPU-Kerne zum Planungszeitpunkt verfügbar sind, weist er beispielsweise mehrere CPUintensive Pods an, Aufgaben auf verschiedene CPU-Kerne aufzuteilen.

CPU Manager befindet sich seit Kubernetes in der Betaphase v1.12und ist standardmäßig aktiviert. Die --cpu-manager-policyOption Kubelet wird verwendet, um die CPU Manager-Richtlinie zu definieren.

InKubernetes Version 1.23.14Sie haben einFehlerbehebungim Wandel.

Kubelet: fix GetAllocatableCPUs method in cpumanage.

AusVersion 1.26, der CPU-Manager wurde in Kubernetes allgemein verfügbar. Das bedeutet, dass die CPU-Manager-Funktion als stabil gilt und für den Einsatz in Produktionsumgebungen bereit ist. Das könnte also der Grund sein, warum Sie ein Problem in version 1.23.12nicht in haben version 1.31.

verwandte Informationen