
4 つのワーカー ノード (4 つの CPU を搭載した Ubuntu 20.04) で実行されている Kubernetes クラスターがあり、すべてのノードで高い負荷平均が見られます。ノードの 1 つで top を実行した結果は次のとおりです。 上
このノードは 111 個のコンテナを実行しているので、これが予想されるものかどうかはわかりません。負荷平均が高くなる原因は他にもあるのでしょうか、それとも単にコンテナが多すぎてリソースが足りないだけなのでしょうか?
答え1
負荷平均は、実行中または実行を待機しているプログラムの数です。
Top は便利ですが、CPU で実行中または実行待ちの状態など、全体像の半分しか表示されません。残りの半分は、ディスク I/O が完了するのを待っている状態です。
ディスク I/O の場合、atop
これは便利です。これをクリックすると、dプロセスによるディスクの使用状況が表示されます。(通常、これを取得するには、root として実行する必要があります。)
答え2
一般的な経験則は、負荷平均がホストのコア数を超えないようにすることです。これが理想的な状況です。それを超えても、必ずしも問題になるわけではありません。私の経験では、負荷平均だけが常に問題を示すわけではありません。負荷が高い、システム CPU 使用率が高い、または iowait が高い場合は、おそらく悪い状況にあります。
Kubernetes に関してよく耳にするのは、リソース制限を設定する必要があるということです。制限がない場合、各ポッドはノードにフル アクセス権を持ちます。アプリケーションの適切なサイズ設定は、私の意見では簡単ではありません。特に、誰もがクラウド ネイティブではないアプリケーションを k8s に投入しようとしている場合はなおさらです。
提案としては、ワークロードを削減したり、ワーカーを追加したり (スケールアウト)、ノードにリソースを追加したり (スケールアップ)、あるいはこれらの組み合わせを行うことができます。