kubernetes/kops · error

must specify a zone for instancegroup %q used by etcd %s/%s

Error message

must specify a zone for instancegroup %q used by etcd %s/%s

What it means

Raised during cloudup model build when the instance group backing an etcd cluster member resolves to zero zones. FindZonesForInstanceGroup inspects the cluster spec's subnets for the IG and etcd members require a concrete zone to place their persistent volume, so an IG with no matching subnets cannot be used for etcd.

Source

Thrown at pkg/model/master_volumes.go:87

			// EBS volume for each member of each etcd cluster
			prefix := m.Name + ".etcd-" + etcd.Name
			name := prefix + "." + b.ClusterName()

			igName := fi.ValueOf(m.InstanceGroup)
			if igName == "" {
				return fmt.Errorf("InstanceGroup not set on etcd %s/%s", m.Name, etcd.Name)
			}
			ig := b.FindInstanceGroup(igName)
			if ig == nil {
				return fmt.Errorf("InstanceGroup not found (for etcd %s/%s): %q", m.Name, etcd.Name, igName)
			}

			zones, err := model.FindZonesForInstanceGroup(b.Cluster, ig)
			if err != nil {
				return err
			}
			if len(zones) == 0 {
				return fmt.Errorf("must specify a zone for instancegroup %q used by etcd %s/%s", igName, m.Name, etcd.Name)
			}
			if len(zones) != 1 {
				return fmt.Errorf("must specify a unique zone for instancegroup %q used by etcd %s/%s", igName, m.Name, etcd.Name)
			}
			zone := zones[0]

			volumeSize := fi.ValueOf(m.VolumeSize)
			if volumeSize == 0 {
				volumeSize = DefaultEtcdVolumeSize
			}

			var allMembers []string
			for _, m := range etcd.Members {
				allMembers = append(allMembers, m.Name)
			}
			sort.Strings(allMembers)

			switch b.Cluster.GetCloudProvider() {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Add subnets to the instance group (or cluster spec) whose zones cover the etcd members
  2. Ensure the etcd instance group is listed in spec.etcdClusters[*].members[*].instanceGroup and has zones assigned
  3. Run `kops edit cluster` and verify the etcd members' instance groups map to subnets with zones
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/model/master_volumes.go:87 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/6dfdedad15e6bd5e. Report an issue: GitHub.