
私のマシンには 48 個の CPU があります。ポッドを作成する前に、 によって 1 ~ 47 個の CPU をオフラインにしますecho "0" > /sys/devices/system/cpuN/online
。
ノードに最初のポッドを作成すると、#1
echo によって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
。