• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

oracle / karpenter-provider-oci / 34515475349
83%

Build:
DEFAULT BRANCH: main
Ran 10 Sep 2026 06:40PM UTC
Jobs 1
Files 63
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Sep 2026 06:37PM UTC coverage: 79.91% (+0.05%) from 79.865%
34515475349

push

github

web-flow
fix: model OCI VM memory overhead in instance type capacity (#73)

OCI reserves memory below the guest, so a VM shape advertised as 32 GB
presents roughly 30.89 GiB of MemTotal to Linux. KPO modelled capacity as
the declared figure, so Karpenter over-estimated what a node could hold,
launched a node the pending pod could not fit on, and - having no feedback
loop - repeated that launch indefinitely. #69 reported a NodePool going from
0 to 50+ nodes in a few hours.

Subtract a configurable overhead from each VM shape's modelled capacity:

    overheadMiB = max(base + perGB * declaredGiB, percent * declaredMiB)

Defaults are 600 MiB base and 19 MiB/GiB. These clear every measurement
reported on #7 (A1/E4/E5/Standard3, 8-128 GB) by at least 71 MiB. They are
deliberately not the tightest fit: the tightest lower bound over the same
points clears the closest of them by only ~9 MiB, too little to survive an
image build or shape family nobody has measured. The extra headroom costs
~0.15 GiB on a 128 GB shape.

Bare metal shapes are exempt and keep their declared memory: the overhead
models a hypervisor, and there is none beneath a BM instance. Those shapes
follow a different model, which is not covered here.

A percentage form is also accepted and combined with max(), so setting it
can only make the estimate more conservative. Setting all three values to 0
restores the previous behaviour.

The overhead applies to capacity rather than InstanceType.Overhead because
it is not reserved memory in the kubelet's sense - the guest never sees it.
Core's InstanceTypeOverhead has slots only for KubeReserved, SystemReserved
and EvictionThreshold.

The failure modes are not symmetric: over-estimating causes an unbounded
launch loop, under-estimating wastes a little memory. The requirement is a
safe number, not an exact one, and the regression test enforces that by
requiring headroom rather than mere non-exceedance. Declared memory is
floored rather than rounded, since flex... (continued)

74 of 77 new or added lines in 4 files covered. (96.1%)

9 existing lines in 2 files now uncovered.

5151 of 6446 relevant lines covered (79.91%)

0.92 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
93.94
pkg/providers/instancetype/vm_memory_overhead.go
1
79.38
-0.1% pkg/providers/instancetype/provider.go

Coverage Regressions

Lines Coverage ∆ File
7
83.58
-2.61% pkg/providers/image/provider.go
2
83.33
-8.33% pkg/utils/refresher.go
Jobs
ID Job ID Ran Files Coverage
1 34515475349.1 10 Sep 2026 06:40PM UTC 63
79.91
GitHub Action Run
Source Files on build 34515475349
  • Tree
  • List 63
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 553ea283 on github
  • Prev Build on main (#33912009124)
  • Next Build on main (#34591301077)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc