RSS Kubernetes ブログ
フォロー
KubernetesのためのLinuxスワップチューニング:徹底解説
Kubernetes NodeSwap機能は、間もなく安定版となる予定で、Linuxノードがスワップスペースを仮想メモリとして利用できるようになります。これにより、リソース利用率の向上と、物理RAMが枯渇した際のメモリ不足(OOM)による終了の削減を目指します。しかし、その効果は、vm.swappiness、vm.min_free_kbytes、vm.watermark_scale_factorといった特定のLinuxカーネルパラメータのチューニングにかかっています。vm.swappinessパラメータは、匿名メモリのスワップとファイルバックメモリの解放のどちらをカーネルが優先するかを制御します。vm.min_free_kbytesは安全バッファとして機能し、積極的なページ解放がいつ始まるかに影響を与えます。vm.watermark_scale_factorは、メモリ解放のウォーターマーク間のギャップを調整し、スワップウィンドウに影響します。テストによると、デフォルトのカーネルパラメータでは、メモリプレッシャー下でOOMによる終了やノードの再起動が発生する可能性があることが明らかになりました。vm.min_free_kbytesとvm.watermark_scale_factorを増やすことは、カーネルにスワップする時間をより多く与えることで、早期の追い出しやOOMによる終了を防ぐ上で重要であることが判明しました。swappinessを高くすると、I/O待機時間が大幅に増加する可能性がありますが、swappinessを低くすると、ファイルキャッシュのドロップが優先されます。これらのパラメータをKubeletのエビクション閾値と併せて適切にチューニングすることで、メモリプレッシャー管理のバランスの取れた戦略が構築されます。リスクとしては、スワップアクセスの遅延によるパフォーマンス低下や、メモリリークの隠蔽などが挙げられます。