kubernetes/kops · error
volumeIops to volumeSize ratio must be lower than 50. For %s
Error message
volumeIops to volumeSize ratio must be lower than 50. For %s ratio is %.02f
What it means
A preflight validation inside validateAWSVolume: for io1 EBS volumes, AWS caps provisioned IOPS at 50x the volume size in GiB. The computed volumeIops/volumeSize ratio exceeded that limit, so the etcd/control-plane volume task is rejected before any AWS call is made.
Source
Thrown at pkg/model/master_volumes.go:220
case ec2types.VolumeTypeGp3:
t.VolumeThroughput = new(int32(volumeThroughput))
fallthrough
case ec2types.VolumeTypeIo1, ec2types.VolumeTypeIo2:
t.VolumeIops = new(int32(volumeIops))
}
c.AddTask(t)
return nil
}
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 hyphensView on GitHub (pinned to 4c8573c808)
Solutions
- Increase volumeSize so that iops/size <= 50
- Lower the etcdVolumeIOPS setting on the etcd cluster member
- Switch to io2 (500:1 ratio) or gp3 if higher IOPS density is needed
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pkg/model/master_volumes.go:220 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/305f62639310cf53.
Report an issue: GitHub.