CPU は、Kubernetes のシェアを使用して処理されます。各 CPU コアは 1024 のシェアに分割され、Linux カーネルの cgroups (コントロール グループ) 機能を使用して、実行中のすべてのプロセスに分散されます。
現在のプロセスはすべて処理でき、アクションは必要ありません。プロセスが CPU を 100% を超えて使用する場合、共有が設定されます。他の Linux カーネルと同様に、Kubernetes は CFS (Completely Fair Scheduler) メカニズムを使用するため、共有数が多いプロセスほど多くの CPU 時間を取得できます。
メモリとは異なり、Kubernetes はスロットルによってポッドを強制終了しません。
CPU 統計は /sys/fs/cgroup/cpu/cpu.stat で表示できます。
4. CPUの過剰使用
プロセスのリソース消費を制限したい場合、制限またはリクエストを設定することが重要です。ただし、リクエストの合計数を実際の CPU サイズより大きく設定しないように注意してください。これは、各コンテナーに特定の数の CPU が必要であることを意味します。
Kubernetes の CPU スロットリングを監視すると、プロセスが Kubernetes の制限にどの程度近づいているかを確認できます。
(sum by(namespace,pod,container)(rate(container_cpu_usage_seconds_total
{
container!=""}[5m]))/ sum by(namespace,pod,container)(kube_pod_container_resource_limits{
resource="cpu"}))>0.8
クラスター内で発生するスロットルの量を追跡する場合、cadvisor は、すべての CPU サイクルのスロットルの割合を簡単に計算できるcontainer_cpu_cfs_throttled_periods_total およびcontainer_cpu_cfs_periods_total を提供します。