Todos los pods de Kubernetes se ejecutan en una única CPU

Todos los pods de Kubernetes se ejecutan en una única CPU

Mi máquina tiene 48 CPU. Antes de crear pods, desconecto entre 1 y 47 CPU mediante echo "0" > /sys/devices/system/cpuN/online.

Cuando creo el primer pod para un nodo, conecto la CPU #1mediante echo "1" > /sys/devices/system/cpu1/online. El pod ejecuta la tarea de estrés de la CPU y veo CPU0que este pod lo utiliza por completo. El uso de la vaina 99-100% CPU.

Cuando creo el segundo pod en el mismo nodo, me pongo en línea CPU #2 echo "1" > /sys/devices/system/cpu2/online. Pero solo CPU0 está completamente utilizada CPU1y CPU2no tenía carga. Y ambos pods funcionan con un uso de CPU del 50 %.

Si creo más pods en el mismo nodo, simplemente comparten CPU0lo que tenga en línea, más CPU. Todas las demás CPU en línea están simplemente inactivas.

Mi Kubernetes version is 1.23.12. Esto no sucede en la versión 1.28. En la versión 1.28, todos los pods se ejecutan en diferentes CPU con un uso del 100%. El yaml del pod tiene limitación de CPU y solicitud a 1.

No estoy seguro de que se trate de un error en la versión 1.23.12o de que alguna configuración salga mal. Cualquier comentario será apreciado.

Respuesta1

El administrador de CPU es responsable de la asignación de CPUrecursos a los pods en Kubernetes. En un nodo, el Administrador de CPU es responsable de habilitar políticas de carga de trabajo mejoradas. Por ejemplo, dependiendo de si el pod está limitado y qué núcleos de CPU están disponibles en el momento de la programación, dirige varios CPUpods intensivos para que compartan tareas con diferentes núcleos de CPU.

CPU Manager ha estado en versión beta desde Kubernetes v1.12y está habilitado de forma predeterminada. La --cpu-manager-policyopción kubelet se emplea para definir la política del Administrador de CPU.

EnKubernetes versión 1.23.14ellos tienen unarreglar un erroren el cambio.

Kubelet: fix GetAllocatableCPUs method in cpumanage.

Deversión 1.26, el administrador de CPU pasó a GA en Kubernetes. Esto significa que la función CPU Manager se considera estable y está lista para usarse en entornos de producción. Entonces esa podría ser la razón por la que tienes un problema al version 1.23.12no estar en version 1.31.

información relacionada