Back to Checks
Container memory requests are configured
core_memory_requests_set
Service: coreSeverity: medium
OfficialBuilt-inVerified
Categories:container-security
Resource Type:Pod
Kubernetes Pods are evaluated for containers without memory requests configured in resources.requests.memory, indicating the scheduler cannot guarantee memory allocation.
Risk
Without memory requests, the scheduler cannot make informed placement decisions, leading to:
- Overcommitted nodes that trigger OOM kills (availability)
- Unpredictable performance under load
- Inability to enforce ResourceQuotas effectively Missing requests weaken cluster stability and make capacity planning unreliable, increasing blast radius during incidents.
Run this check with Prowler
Run in Prowler CloudRun
prowler kubernetes --checks core_memory_requests_setRecommendation
Set memory requests on every container so the scheduler can guarantee memory allocation and place pods effectively.
- Base requests on observed steady-state usage; use VPA for data-driven sizing
- Enforce minimum requests via LimitRanges at the namespace level
- Combine with ResourceQuotas for defense in depth against overcommitment
Remediation
CLI
kubectl set resources deployment/<workload-name> -c <container-name> --requests=memory=<memory-request> -n <namespace>
# Example: kubectl set resources deployment/nginx -c nginx --requests=memory=64Mi -n defaultTerraform
resource "kubernetes_pod" "<example_resource_name>" {
metadata { name = "<example_resource_name>" }
spec {
container {
name = "<example_resource_name>"
image = "<IMAGE>"
resources {
requests = {
memory = "64Mi" # Critical: guarantees memory for the scheduler to make informed placement
}
}
}
}
}Other
1Open your Kubernetes UI (e.g., cloud provider console or Dashboard)
2Navigate to the failing workload (Deployment/StatefulSet/DaemonSet) or Pod and choose Edit YAML/Manifest
3Set resources.requests.memory for each affected container:
4- For controllers: spec.template.spec.containers[].resources.requests.memory
5- For standalone Pods: spec.containers[].resources.requests.memory
6Save changes (controllers will roll out new Pods). If it is a standalone Pod, delete and recreate it to apply the change
Check Code
from prowler.lib.check.models import Check, Check_Report_Kubernetes
from prowler.providers.kubernetes.services.core.core_client import core_client
class core_memory_requests_set(Check):
"""Ensure that memory requests are set on all containers."""
def execute(self) -> list[Check_Report_Kubernetes]:
"""Execute the check logic.
Returns:
A list of reports containing the result of the check.
"""
findings = []
for pod in core_client.pods.values():
report = Check_Report_Kubernetes(metadata=self.metadata(), resource=pod)
report.status = "PASS"
report.status_extended = (
f"Pod {pod.name} has memory requests set on all containers."
)
for container in (pod.containers or {}).values():
resources = container.resources or {}
requests = (
resources.get("requests") if isinstance(resources, dict) else None
)
memory = (
requests.get("memory")
if requests and isinstance(requests, dict)
else None
)
if not memory:
report.status = "FAIL"
report.status_extended = f"Pod {pod.name} does not have memory requests set on container {container.name}."
break
findings.append(report)
return findings