説明
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 の上限を明示します。この要求量で通常の負荷を処理できるか確認してください。