kubernetes/kops · error

volumeThroughput to volumeIops ratio must be lower than 0.25

Error message

volumeThroughput to volumeIops ratio must be lower than 0.25. For %s ratio is %.02f

What it means

Preflight validation in validateAWSVolume for gp3 volumes: AWS caps throughput at 0.25 MiB/s per provisioned IOPS. The computed volumeThroughput/volumeIops ratio exceeded 0.25, so the gp3 volume configuration is rejected locally before any AWS API call.

Source

Thrown at pkg/model/master_volumes.go:231

func validateAWSVolume(name, volumeType string, volumeSize, volumeIops, volumeThroughput int32) error {
	volumeIopsSizeRatio := float64(volumeIops) / float64(volumeSize)
	volumeThroughputIopsRatio := float64(volumeThroughput) / float64(volumeIops)
	switch ec2types.VolumeType(volumeType) {
	case ec2types.VolumeTypeIo1:
		if volumeIopsSizeRatio > 50.0 {
			return fmt.Errorf("volumeIops to volumeSize ratio must be lower than 50. For %s ratio is %.02f", name, volumeIopsSizeRatio)
		}
	case ec2types.VolumeTypeIo2:
		if volumeIopsSizeRatio > 500.0 {
			return fmt.Errorf("volumeIops to volumeSize ratio must be lower than 500. For %s ratio is %.02f", name, volumeIopsSizeRatio)
		}
	case ec2types.VolumeTypeGp3:
		if volumeIops > 3000 && volumeIopsSizeRatio > 500.0 {
			return fmt.Errorf("volumeIops to volumeSize ratio must be lower than 500. For %s ratio is %.02f", name, volumeIopsSizeRatio)
		}
		if volumeThroughputIopsRatio > 0.25 {
			return fmt.Errorf("volumeThroughput to volumeIops ratio must be lower than 0.25. For %s ratio is %.02f", name, volumeThroughputIopsRatio)
		}
	}
	return nil
}

func (b *MasterVolumeBuilder) addDOVolume(c *fi.CloudupModelBuilderContext, name string, volumeSize int32, zone string, etcd kops.EtcdClusterSpec, m kops.EtcdMemberSpec, allMembers []string) {
	// required that names start with a lower case and only contains letters, numbers and hyphens
	name = "kops-" + do.SafeClusterName(name)

	// DO has a 64 character limit for volume names
	if len(name) >= 64 {
		name = name[:64]
	}

	tags := make(map[string]string)
	tags[do.TagNameEtcdClusterPrefix+etcd.Name] = do.SafeClusterName(m.Name)
	tags[do.TagKubernetesClusterIndex] = do.SafeClusterName(m.Name)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Raise volumeIOPS so throughput/iops <= 0.25
  2. Lower the configured volume throughput
  3. Review etcdVolumeIOPS/throughput settings for the etcd member
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/model/master_volumes.go:231 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/d527ef4a02ddaf20. Report an issue: GitHub.