kubernetes/kubernetes · warning
medium: %s doesn't have size information
Error message
medium: %s doesn't have size information
What it means
Thrown by HugePageSizeFromMedium() when the medium is exactly v1.StorageMediumHugePages ('HugePages') with no size suffix. The bare 'HugePages' medium requests hugepages without specifying a page size, so there is no size to extract; callers must request a sized medium ('HugePages-<size>') to get a quantity.
Source
Thrown at pkg/apis/core/v1/helper/helpers.go:122
return fmt.Sprintf("%d%s", size, hugePageSizeUnitList[idx]), nil
}
// IsHugePageMedium returns true if the volume medium is in 'HugePages[-size]' format
func IsHugePageMedium(medium v1.StorageMedium) bool {
if medium == v1.StorageMediumHugePages {
return true
}
return strings.HasPrefix(string(medium), string(v1.StorageMediumHugePagesPrefix))
}
// HugePageSizeFromMedium returns the page size for the specified huge page medium.
// If the specified input is not a valid huge page medium an error is returned.
func HugePageSizeFromMedium(medium v1.StorageMedium) (resource.Quantity, error) {
if !IsHugePageMedium(medium) {
return resource.Quantity{}, fmt.Errorf("medium: %s is not a hugepage medium", medium)
}
if medium == v1.StorageMediumHugePages {
return resource.Quantity{}, fmt.Errorf("medium: %s doesn't have size information", medium)
}
pageSize := strings.TrimPrefix(string(medium), string(v1.StorageMediumHugePagesPrefix))
return resource.ParseQuantity(pageSize)
}
// IsOvercommitAllowed returns true if the resource is in the default
// namespace and is not hugepages.
func IsOvercommitAllowed(name v1.ResourceName) bool {
return IsNativeResource(name) &&
!IsHugePageResourceName(name)
}
// IsAttachableVolumeResourceName returns true when the resource name is prefixed in attachable volume
func IsAttachableVolumeResourceName(name v1.ResourceName) bool {
return strings.HasPrefix(string(name), v1.ResourceAttachableVolumesPrefix)
}
// IsServiceIPSet aims to check if the service's ClusterIP is set or notView on GitHub (pinned to b882c60b40)
Solutions
- Specify the page size in the medium, e.g. 'HugePages-2Mi' or use the resource-based hugepage request on the volume.
- If the medium is intentionally bare HugePages, do not call HugePageSizeFromMedium - handle it as size-unspecified.
- Update the manifest to the modern hugepage volume source that uses the resource name.
Example fix
# before
volumes:
- name: hp
emptyDir:
medium: HugePages
# after
volumes:
- name: hp
emptyDir:
medium: HugePages
sizeLimit: 2Gi Defensive patterns
Strategy: validation
Validate before calling
func mediumHasSize(medium v1.StorageMedium) bool {
return v1helper.IsHugePageMedium(medium) && medium != v1.StorageMediumHugePages
} Type guard
func mediumHasSize(medium v1.StorageMedium) bool {
return v1helper.IsHugePageMedium(medium) && medium != v1.StorageMediumHugePages
} Prevention
- Specify the page size in the medium ('HugePages-2Mi') or use the sizeLimit field.
- Do not call HugePageSizeFromMedium on a bare 'HugePages' medium.
- Update legacy manifests to the modern sized hugepage volume source.
When it happens
Trigger: An emptyDir volume with medium: HugePages (no size); HugePageSizeFromMedium is called and IsHugePageMedium returns true but the medium lacks the '-<size>' suffix.
Common situations: Volume spec using the bare HugePages medium without the page-size suffix; kubelet code assuming all hugepage media carry size info; legacy manifests predating sized hugepage volumes.
Related errors
- medium: %s is not a hugepage medium
- resource name: %s is an invalid hugepage name
- resource name: %s is an invalid hugepage name
- size: %d%s must be guaranteed to divisible into the largest
- DRA driver name is empty
AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07).
Data as JSON: /api/errors/895e35d761e86379.
Report an issue: GitHub.