Member-only story
KubernetesでCPU制限を使い続けるべき理由
もしくは、未使用のCPUを使用しないことが、コンテナにとってなぜ良いのか。
「頼むからKubernetesでCPU制限を使うのはやめてくれ」という記事への反論として、この記事を書きました。
私はその記事が好きで、素晴らしい記事だと思っています。私は、コンテナのメモリ要求と制限の設定に関するその推奨事項に同意し、CPU要求を常に設定するよう推奨しています。
私が同意できないのは、対照的なタイトルにも表れているように、CPUの制限を設けないということに関してです。
コンテナのKubernetesリソース管理について簡単におさらいすると*、CPUの「リクエスト」はコンテナの実行中に利用できる最小限のCPUの量で、CPUの「リミット」はコンテナが使用できる最大限のCPUの量です。
CPU制限を禁止するという考え方は、CPU制限を設定すると、コンテナがノード内の未使用(および未予約)のCPUにアクセスできなくなるという唯一のマイナス効果があり、コンテナが不必要で有害なCPUスロットリングにさらされる可能性があるという考えに基づいています。
しかし、「コンテナとKubernetesによる無限のスケーリング」という記事を書きながら徹底的に調査した結果、ほとんどの場合、CPU制限を設けるべき正当な理由があると私は考えるようになりました。
9/30更新:「理由#6: ネームスペースのリソースクォータを考慮する 」というタイトルのセクション全体を撤回しました。私は、そもそもネームスペースに追加されるすべてのポッドがCPU制限を持つという要件を見逃していました。したがって、CPU制限を使うか使わないかの議論では、この点全体が無意味なものになってしまいます。
* Kubernetesのリソースがどのように機能するかについてより深く知りたい方には、Stefanie Lai氏によるLayer-by-Layer Cgroup in KubernetesとShon Lev-RanとShir Monetherによるこのデータ満載の3部構成のシリーズをお読みになることを勧めします。
理由その1:スロットリング下でのレジリエンス
9/30 更新:このセクションの元のタイトルは「コンテナプローブは圧縮できない」でした。このため、このセクションの主旨が不明瞭になっていました。CPU制限を設けてコンテナを開発することで、CPUスロットリングのイベントに対してより強く、より良い挙動を示すようになります。CPU 制限を設けてコンテナを開発することで、CPU のスロットリングに対してより強いコンテナプローブと、スロットリング下でより正確なレディネスプローブを作成することは、CPU…