Back to Checks
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 Cloud
Run
prowler kubernetes --checks core_cpu_requests_set

Recommendation

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=100m

NativeIaC

# 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