コンテナーのメモリ制限設定の確認

ワークロードに合うメモリ上限を設定し、実際の適用値を確認してください。

説明

実際に適用されるメモリ上限がないと、ワークロードがノードのメモリを過剰に消費する場合があります。メモリリークや異常動作がノード全体に影響するおそれがあります。

メモリ制限は、一つのワークロードによるリソースの独占を抑える基本的な対策です。コンテナー設定に加え、LimitRange のデフォルト値や対応する Pod レベルのリソース設定も確認してください。

想定される影響

  • 一つのコンテナーの過剰なメモリ使用がノードの安定性に影響する場合があります。
  • メモリ不足で別の Pod が終了したり、性能が低下したりするおそれがあります。
  • 障害がアプリケーションからノード全体へ広がる場合があります。

対処方法

  • 各コンテナーの resources.limits.memory と実際に適用される上限を確認してください。
  • アプリケーションに合う上限を選び、定期的に調整してください。低すぎると OOM による終了が発生する場合があります。
  • 要求量と制限値を合わせて確認し、スケジューリングと安定性を調整してください。

例

メモリ設定を比較する例です。stress イメージの実際の実行引数と必要な CPU 要求は別途設定し、100Mi と 200Mi は使用量に合わせて調整してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-1
spec:
  containers:
    - name: memory-demo-ctr
      image: polinux/stress
      resources:
        requests:
          cpu: "0.5"

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-safe
spec:
  containers:
    - name: memory-demo-ctr
      image: polinux/stress
      resources:
        limits:
          memory: "200Mi"
        requests:
          memory: "100Mi"

補足:

  • 変更前: このマニフェストにはメモリ上限がありません。クラスターが適用するデフォルト値も確認してください。
  • 変更後: 200Mi の上限と 100Mi の要求を指定します。上限超過でプロセスが終了する場合があるため、使用量と OOM を監視してください。

参考資料