監視ツールがメモリがあることを示している場合、GKE はポッドを強制終了します

監視ツールがメモリがあることを示している場合、GKE はポッドを強制終了します

デフォルトの監視チャートを使用して GKE をテストしています。
クラスターの概要によると、各ノード (n2-custom-4-8192) には 6.36 GB のメモリ割り当てが可能になっています。
ノードの詳細ページでは、ポッドが強制終了されたときのピークの「使用済み」が 4.19 であることがわかります。

何か見落としているのでしょうか? それとも、これはチャートの問題でしょうか? 6.36 GB 割り当て可能なメモリ

4.19 GB 使用時にポッドが強制終了しました

答え1

この場合、すべてが意図したとおりに動作しています。 に関する情報を見逃したようですEviction threshold

AllocatableCapacityはマイナスReservedとの値ですEviction Threshold

GKEドキュメント内ノード割り当て可能リソースリソースの割り当てに関する情報を見つけることができます。

ノードのリソースの一部は、GKEおよび の一部としてそのノードを機能させるために必要な Kubernetes ノード コンポーネントを実行するために必要ですcluster。そのため、ノードの合計リソース (マシン タイプのドキュメントで指定) とallocatable内のノードのリソースとの間に不一致が生じることがありますGKE。マシン タイプが大きいほど、より多くのリソース (ひいてはポッドの数も) が実行される傾向があるため、 に予約されているcontainersリソースの量は、マシンが大きいほど増加します。は、一般的な よりも必要です。ノードには、Windows OS の実行と、コンテナーでは実行できない Windows Server コンポーネントに対応するために、追加のリソースが必要です。GKEKubernetes componentsWindows Server nodesmore resourcesLinux node

クラスターで使用可能なノード割り当て可能リソースを検査するには、次のコマンドを実行します。

$ kubectl describe node ${NodeName} | grep Allocatable -B 7 -A 6

返される出力には、一時ストレージ、メモリ、CPU の測定値を含む Capacity フィールドと Allocatable フィールドが含まれます。

少し下にスクロールすると割り当て可能なメモリとCPUリソース割り当て可能なリソースは次のように計算されます。

Allocatable = Capacity - Reserved - Eviction Threshold

メモリ リソースについては、GKE は次のものを予約します。

  • 1 GB未満のメモリを搭載したマシンの場合は255 MiBのメモリ
  • 最初の4GBのメモリの25%
  • 次の 4GB のメモリの 20% (最大 8GB)
  • 次の 8GB のメモリの 10% (最大 16GB)
  • 次の 112GB のメモリの 6% (最大 128GB)
  • 128GBを超えるメモリの2%

関連情報