모든 Kubernetes 포드는 단일 CPU에서 실행됩니다.

모든 Kubernetes 포드는 단일 CPU에서 실행됩니다.

내 컴퓨터에는 48개의 CPU가 있습니다. 포드를 생성하기 전에 echo "0" > /sys/devices/system/cpuN/online.

노드에 대한 첫 번째 Pod를 생성할 때 #1echo를 통해 CPU를 온라인 상태로 만듭니다 "1" > /sys/devices/system/cpu1/online. 포드 실행 CPU 스트레스 작업은 CPU0이 포드에서 완전히 사용되는 것으로 보입니다. 포드를 사용합니다 99-100% CPU.

동일한 노드에 두 번째 포드를 생성하면 온라인 상태가 됩니다 CPU #2 echo "1" > /sys/devices/system/cpu2/online. CPU1하지만 CPU0만 완전히 사용되었으며 CPU2부하가 없었습니다. 두 포드 모두 CPU 사용량이 50%인 상태로 실행됩니다.

동일한 노드에 더 많은 포드를 생성하면 CPU0더 많은 CPU를 온라인으로 공유할 뿐입니다. 다른 모든 온라인 CPU는 유휴 상태입니다.

나의 Kubernetes version is 1.23.12. 버전에서는 이런 일이 발생하지 않습니다 1.28. 버전에서는 1.28모든 Pod가 100% 사용량으로 서로 다른 CPU에서 실행됩니다. Pod의 yaml에는 CPU 제한이 있으며 1로 요청합니다.

이것이 버전의 버그인지 1.23.12또는 일부 구성이 잘못되었는지 확실하지 않습니다. 어떤 의견이라도 감사하겠습니다.

답변1

CPU 관리자는 CPUKubernetes의 Pod에 리소스를 할당하는 일을 담당합니다. 노드에서 CPU 관리자는 향상된 작업 부하 정책을 활성화하는 역할을 담당합니다. 예를 들어 Pod가 조절되었는지 여부와 예약 시간에 어떤 CPU 코어를 사용할 수 있는지에 따라 여러 CPU집약적인 Pod에 작업을 다른 CPU 코어에 공유하도록 지시합니다.

CPU 관리자는 Kubernetes 이후 베타 버전으로 제공되며 v1.12기본적으로 활성화되어 있습니다. kubelet --cpu-manager-policy옵션은 CPU 관리자 정책을 정의하는 데 사용됩니다.

~ 안에쿠버네티스 버전 1.23.14그들은버그를 수정하다변화에.

Kubelet: fix GetAllocatableCPUs method in cpumanage.

에서버전 1.26, CPU 관리자가 Kubernetes에서 GA로 전환되었습니다. 이는 CPU 관리자 기능이 안정적인 것으로 간주되어 프로덕션 환경에서 사용할 준비가 되었음을 의미합니다. 이것이 version 1.23.12가 아닌 에서 문제가 발생하는 이유일 수 있습니다 version 1.31.

관련 정보