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 not

View on GitHub (pinned to b882c60b40)

Solutions

  1. Specify the page size in the medium, e.g. 'HugePages-2Mi' or use the resource-based hugepage request on the volume.
  2. If the medium is intentionally bare HugePages, do not call HugePageSizeFromMedium - handle it as size-unspecified.
  3. 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

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


AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07). Data as JSON: /api/errors/895e35d761e86379. Report an issue: GitHub.