Kubernetes サイドカー コンテナにおけるプロセス メモリ使用量の不一致

Kubernetes サイドカー コンテナにおけるプロセス メモリ使用量の不一致

次のリソースを含むサイドカー コンテナーがあります。

resources:
  limits:
    memory: 512Mi
  requests:
    memory: 64Mi

しかし、 を実行するとtop、次のようになります:

  • envoy と pilot-agent はそれぞれ約 363MB と 61MB を使用しているようです
  • 使用メモリは上部で54.6MBです
  • 実行するとfree -m、一見無関係な答えが得られる。
$ free -m
              total        used        free      shared  buff/cache   available
Mem:         385307       47140      315018         292       23148      336021
Swap:             0           0           0

サイドカーで走るトップ

ここでは正確に何が起こっているのでしょうか、そしてそれらのプロセスはどれくらいのメモリを消費しているのでしょうか?

答え1

この free および top 出力には、合計約 385,000 MiB のメモリを持つホストのうち、約 50,000 MiB が使用されていることが示されています。

コンテナはカーネルを共有するため、ホスト メトリックには通常、ノード全体の数値が表示されます。ただし、名前空間にはプロセスとファイルのみが表示されます。これは、オペレーティング システムがアプリケーションをサポートするためだけに存在する専用 VM または物理ホストとは異なります。

コンテナごとの数値には、cgroup の数値を照会する必要があります。Stack Overflow でこれを行う方法をいくつか参照してください。Kubernetes ポッドの CPU とメモリを確認するその多くはメトリック サーバーを必要とします。

プロセスの常駐メモリを合計して、それがシステムの正確なメモリ使用量であると期待するのは危険です。これには共有メモリやキャッシュは含まれません。また、カーネルはメモリに関して奇妙な計算トリックを実行します。3 桁の有効数字は正しい考えです。ただし、少数のプロセスで主にプライベート メモリを使用する単純なケースでは、これは適切な推定値です。

関連情報