
У моей машины 48 процессоров. Перед созданием модулей я отключаю процессоры 1-47 с помощью echo "0" > /sys/devices/system/cpuN/online
.
Когда я создаю первый pod на узле, я подключаю CPU #1
с помощью echo "1" > /sys/devices/system/cpu1/online
. Под запускает задачу CPU stress и я вижу, CPU0
что он полностью используется этим pod. Под использует 99-100% CPU
.
Когда я создаю второй pod на том же узле, я в сети CPU #2 echo "1" > /sys/devices/system/cpu2/online
. Но только CPU0 полностью используется CPU1
и CPU2
не имеет нагрузки. И оба pod работают с 50% использованием CPU.
Если я создам больше pod'ов на том же узле, они просто разделят CPU0
все, что я вывел в онлайн больше CPU. Все остальные онлайн CPU просто простаивают.
Мой Kubernetes version is 1.23.12
. Этого не происходит в версии 1.28
. В версии 1.28
все модули работают на разных ЦП с использованием 100%. Yaml модуля имеет ограничение ЦП и запрос на 1.
Я не уверен, что это ошибка в версии 1.23.12
или какая-то конфигурация в ней неверна. Любые комментарии будут оценены.
решение1
CPU Manager отвечает за распределение CPU
ресурсов по модулям в Kubernetes. На узле CPU Manager отвечает за включение расширенных политик рабочей нагрузки. Например, в зависимости от того, ограничен ли модуль и какие ядра ЦП доступны во время планирования, он направляет несколько CPU
интенсивных модулей для распределения задач по разным ядрам ЦП.
CPU Manager находится в бета-версии с момента Kubernetes v1.12
и включен по умолчанию. --cpu-manager-policy
Параметр kubelet используется для определения политики CPU Manager.
ВKubernetes версии 1.23.14у них естьисправление ошибкив изменении.
Kubelet: fix GetAllocatableCPUs method in cpumanage.
Отверсия 1.26, диспетчер ЦП стал общедоступным в Kubernetes. Это означает, что функция диспетчера ЦП была признана стабильной и готова к использованию в производственных средах. Так что это может быть причиной того, что вы получаете проблему в , version 1.23.12
а не в version 1.31
.