コンテナーのメモリ要求量の確認

実際の必要量に合うメモリ要求で、スケジューリングとリソース計画を管理してください。

説明

Kubernetes はメモリの requests を Pod の配置判断に使います。実際の必要量より低いと、一つのノードに多くのワークロードが集まり、リソース計画が不正確になる場合があります。

メモリの limit だけを指定して request を省略すると、admission で別のデフォルト要求値が適用されない場合、limit が request にコピーされます。省略が常に要求量 0 を意味するわけではありません。作成された Pod の値を確認してください。

想定される影響

  • 要求量が低すぎると、ノードにワークロードが過剰配置される場合があります。
  • 必要量を過小評価すると、リソース競合や OOM のリスクが高まる場合があります。
  • 要求量が高すぎると容量を無駄にしたり、Pod を配置できなくなったりする場合があります。

対処方法

  • 測定した使用量に基づいて resources.requests.memory を設定し、定期的に調整してください。
  • request は使用量の上限ではないことを踏まえ、要求量と制限値を合わせて確認してください。
  • LimitRange などのデフォルト値が適用された後の要求量を確認し、負荷試験で適切か検証してください。

例

メモリ設定の抜粋です。stress イメージの実行引数と必要な CPU 要求は別途設定してください。100Mi と 200Mi は例です。

変更前

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

変更後

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

補足:

  • 変更前: メモリ上限が 200Mi のため、別のデフォルト要求値が適用されなければ request も 200Mi になります。
  • 変更後: 100Mi の要求と 200Mi の上限を明示します。この要求量で通常の負荷を処理できるか確認してください。

参考資料