説明
実際に適用されるメモリ上限がないと、ワークロードがノードのメモリを過剰に消費する場合があります。メモリリークや異常動作がノード全体に影響するおそれがあります。
メモリ制限は、一つのワークロードによるリソースの独占を抑える基本的な対策です。コンテナー設定に加え、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 を監視してください。