Carbon-aware scheduling by default: first balance

Logotipo horizontal oficial de Kepler, el proyecto de la CNCF para medir consumo energético y huella de carbono de cargas de trabajo en Kubernetes, que en 2026 es pieza básica del stack carbon-aware activado por defecto en varias distribuciones y platformas gestionadas para guiar decisiones de scheduling según intensidad de carbono de la red eléctrica en cada región

Two years ago, carbon-aware scheduling was experimental and manually enabled by teams motivated by sustainability or regulatory pressure. In early 2026, with several Kubernetes distributions and managed platforms incorporating it as a default or very visible option, time to evaluate whether the promise holds in practice. The base hypothesis, that deciding where and when to execute loads according to grid carbon intensity reduces emissions without significantly penalizing performance, has had enough time to prove itself and generate real data. What that data says and where the cracks are is what needs reviewing.

What carbon-aware scheduling is in 2026

The fundamental idea is simple. Electricity carbon intensity (grams of CO2 per kilowatt-hour) varies significantly through the day and between regions, depending on which sources are generating at each moment. Grids with lots of wind or solar have high-cleanness periods when it’s windy or sunny, and high-dirtiness periods dominated by gas and coal. Moving elastic loads to cleaner regions or hours reduces emissions without changing the amount of work done.

The consolidated 2026 technical pattern combines several components. An energy consumption meter per load (Kepler for Kubernetes is the open reference), a real-time carbon intensity data source (Electricity Maps, WattTime, provider APIs), a scheduler integrating this info in its decisions (kube-scheduler with carbon-aware extensions, or platform schedulers like Karpenter with specific policies), and tracking metrics that allow verifying real impact.

Google Cloud, Azure, and AWS have integrated carbon-aware in their managed services during 2024 and 2025. Google Kubernetes Engine offers clusters with carbon-aware scheduler as option. Azure Sustainability Dashboard shows carbon intensity by region and allows automatic policies. AWS has similar since 2024 though with less media emphasis. The open ecosystem, with Kepler graduated in CNCF in late 2024 and Green Software Foundation contributing standards (Software Carbon Intensity, SCI), allows implementing the pattern also over own infrastructure.

Where it’s worked best

Cases where carbon-aware scheduling has brought real emission reductions share a common pattern: workloads tolerating temporal or geographic flexibility without degrading user experience. Nightly batch processing, model training, CI code compilation and testing, report generation and analytics, video rendering, and similar. These loads can be delayed some hours or moved between regions without anyone noticing.

In these scenarios, companies adopting carbon-aware seriously report real emission reductions between 15 and 30 percent depending on case. A concrete example I’ve seen is a daily personalization model training in an e-commerce company. The job runs several hours and has no schedule SLA. Automatically moving its execution to the cleanest window of the day (usually between afternoon and evening when solar still generates and demand drops) reduces job carbon intensity by about twenty percent versus running in the morning as before.

Another interesting case is CI jobs distributed between geographic regions. Some providers offer CI runners that execute the job in the available region with lowest carbon intensity at that moment. For a team with thousands of builds per month, this change adds up: if Stockholm is at maximum hydro and Dublin with strong wind, the job goes there instead of a coal-heavy mix region. Accumulated reductions over the year are measurable and additional operational cost is practically zero.

Where savings are marginal or nonexistent

The other side of the story is cases where carbon-aware scheduling brings very little or nothing. Online applications with active users can’t be moved geographically without adding latency, and can’t be delayed without degrading experience. Production APIs, web services facing real traffic, transactional databases: all this runs when needed, where the user is, and carbon-aware scheduling has no levers to move without affecting service.

In an analysis of a deployment I recently reviewed, more than eighty percent of total energy consumption corresponded to non-deferrable loads. Applying carbon-aware only to the remaining fraction, total cluster savings were less than five percent, a real figure but well below what provider marketing suggested. The honest reading is benefit is proportional to what fraction of your load is elastic, not to whether you enabled the feature.

There are also cases where carbon-aware can produce counterproductive results if applied without thinking. Moving loads to far regions with better mix can increase net emissions if inter-datacenter traffic grows notably; transfer also consumes energy. Delaying jobs to wait for clean windows can increase operational cost if requires keeping reserved resources or accumulates pressure in specific schedules. Optimization without careful measurement can come out worse than leaving the default scheduler.

The honest-measurement problem

A central challenge of carbon-aware scheduling is precisely measuring how much CO2 is really saved. The carbon intensity reported by APIs like Electricity Maps or WattTime is reasonable approximation but not perfect, with update delay, limited granularity (full region, not sub-center), and methodological differences between providers. Two tools measuring the same case can report 10 or 20 percent different figures.

Kepler in Kubernetes has improved a lot since its CNCF graduation, but still has limitations. Per-pod consumption is estimated from processor, memory, and disk metrics applying energy models that don’t always reflect new or specific hardware well. Measurements have known error up to 20 percent in mixed loads, and attribution ratios between processes sharing a machine are approximations. This doesn’t invalidate the tool, but does force interpreting its figures as indications, not exact truths.

The Software Carbon Intensity of Green Software Foundation is a useful standard for normalizing measurement and comparison between systems, but its real adoption remains limited. Less than 30 percent of deployments I’ve reviewed report SCI as metric, and fewer still set objectives based on this metric. The problem is as much cultural as technical: most teams have no clear incentives to optimize this metric versus more immediate ones like cost or latency.

A practical example with Karpenter

A pattern I’ve seen work well in 2026 combines Karpenter (Kubernetes node-based autoscaling) with carbon-aware policies. The idea is preferring regions with lower intensity for new node provisioning when the scenario allows, keeping latency restrictions for sensitive loads. A simplified policy fragment:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: batch-carbon-aware
spec:
  template:
    spec:
      requirements:
        - key: karpenter.k8s.aws/instance-category
          operator: In
          values: ["c", "m"]
        - key: topology.kubernetes.io/region
          operator: In
          values: ["eu-north-1", "eu-west-1", "eu-central-1"]
      taints:
        - key: batch
          effect: NoSchedule
  weight: 100
  providerRef:
    name: carbon-intensity-preference

The above policy, combined with a controller updating a weight based on carbon intensity by region and hour, dynamically moves Karpenter’s preference. Loads tolerating the “batch” taint are scheduled in the best-mix region at that moment. In a deployment I monitor, this policy applied to training and nightly processing reduced mean intensity in the environment by between 20 and 25 percent after three months.

When it pays

In early 2026, with carbon-aware scheduling no longer experimental and becoming a standard capability of mature platforms, the practical recommendation is measured. First, honestly identify what fraction of your load is really elastic in time or geography; if less than 20 percent is, total savings will be modest. Second, calculate implementation and measurement cost against expected benefit; for some teams effort exceeds potential savings.

Third, if you decide to adopt it, invest in honest measurement with Kepler, Software Carbon Intensity, or equivalent, and verify figures with real data instead of trusting what the platform promises by marketing. The intellectual integrity of reporting real savings and acknowledging limits is more valuable long-term than any inflated figure of avoided emissions.

Fourth, consider carbon-aware scheduling as one piece among several of a technical sustainability strategy. Efficient architecture, resource rightsizing, idle infrastructure shutdown, code optimization, runtime language choice, efficient hardware selection, and renewal toward modern hardware with better energy efficiency produce savings typically larger than carbon-aware alone. It’s not one or the other; it’s combining all fronts. In 2026, with the technology available and operational capability mature, not doing it is starting to be hard to justify, but doing it with honesty about limits and serious measurement is the only approach producing lasting, credible results.

Entradas relacionadas