Back to Checks
Prowlerprowler-provider-kubernetes
Pod containers have CPU requests set
core_cpu_requests_set
Service: coreSeverity: medium
OfficialBuilt-inVerified
Categories:resilience
Resource Type:KubernetesPod
Ensure CPU requests are set for containers to enable proper scheduling and resource guarantees.
Risk
Missing CPU requests can lead to scheduling and resource contention issues.
Run this check with Prowler
Run in Prowler CloudRun
prowler kubernetes --checks core_cpu_requests_setRecommendation
Define sensible CPU requests to enable efficient scheduling and fair resource allocation.
Remediation
CLI
kubectl set resources deployment/<name> -n <namespace> --containers=<container> --requests=cpu=100mNativeIaC
# Example: set cpu requests in container resources
resources:
requests:
cpu: "100m"Other
1Edit the Pod/Deployment manifest and set `resources.requests.cpu` for each container.
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_cpu_requests_set(Check):
"""Check whether regular pod containers have CPU requests configured."""
def execute(self) -> list[Check_Report_Kubernetes]:
"""Execute the Kubernetes pod CPU requests check.
Returns:
List of check reports for Kubernetes pods.
"""
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} regular containers have CPU requests configured."
)
for container in (pod.containers or {}).values():
resources = container.resources or {}
requests = (
resources.get("requests") if isinstance(resources, dict) else None
)
cpu = (
requests.get("cpu")
if requests and isinstance(requests, dict)
else None
)
if not cpu:
report.status = "FAIL"
report.status_extended = f"Pod {pod.name} container {container.name} does not have a CPU request configured."
break
findings.append(report)
return findings