すべてのKubernetesポッドは単一のCPUで実行される

すべてのKubernetesポッドは単一のCPUで実行される

私のマシンには 48 個の CPU があります。ポッドを作成する前に、 によって 1 ~ 47 個の CPU をオフラインにしますecho "0" > /sys/devices/system/cpuN/online

ノードに最初のポッドを作成すると、#1echo によってCPU がオンラインになります"1" > /sys/devices/system/cpu1/online。ポッドは CPU ストレス タスクを実行し、CPU0このポッドによって完全に使用されていることがわかります。ポッドは を使用します99-100% CPU

同じノードに 2 番目のポッドを作成すると、オンラインになりますCPU #2 echo "1" > /sys/devices/system/cpu2/online。ただし、CPU0 のみが完全に使用されており、CPU1負荷CPU2がかかっていません。また、両方のポッドが 50% の CPU 使用率で実行されます。

同じノードにさらにポッドを作成すると、追加CPU0でオンラインになった CPU が共有されるだけです。その他のオンライン CPU はアイドル状態になります。

私のKubernetes version is 1.23.12。これはバージョン では発生しません1.28。バージョン では1.28、すべてのポッドが異なる CPU で 100% 使用率で実行されます。ポッドの yaml には CPU 制限があり、1 に要求されます。

これはバージョンのバグなのか、それとも何らかの設定が間違っているのかはわかりません1.23.12。コメントをいただければ幸いです。

答え1

CPU マネージャーは、Kubernetes 内のポッドへのリソースの割り当てを担当しますCPU。ノードでは、CPU マネージャーは拡張ワークロード ポリシーを有効にする役割を担います。たとえば、ポッドがスロットルされているかどうか、およびスケジュール時にどの CPU コアが使用可能かに応じて、複数のCPU負荷の高いポッドにタスクを異なる CPU コアに共有するように指示します。

CPU マネージャーは Kubernetes 以来ベータ版でありv1.12、デフォルトで有効になっています。CPU--cpu-manager-policyマネージャー ポリシーを定義するには、kubelet オプションを使用します。

Kubernetes バージョン 1.23.14彼らは持っていますバグを修正変化の中で。

Kubelet: fix GetAllocatableCPUs method in cpumanage.

からバージョン 1.26、CPU マネージャーが Kubernetes で GA になりました。これは、CPU マネージャー機能が安定しているとみなされ、実稼働環境で使用できる状態になっていることを意味します。そのため、 ではversion 1.23.12なくで問題が発生している可能性がありますversion 1.31

関連情報