kubernetes/kops · error

error parsing etcd cluster tag %q on volume %q: %s

Error message

error parsing etcd cluster tag %q on volume %q: %s

What it means

Raised in findEtcdStatus when etcd.ParseEtcdClusterSpec cannot parse the value of a tag whose key starts with TagNameEtcdClusterPrefix on a master disk. The tag value encodes the etcd cluster spec (members, names); malformed values abort status discovery for the whole cluster.

Source

Thrown at upup/pkg/fi/cloudup/azure/status.go:75

		}

		var (
			etcdClusterName string
			etcdClusterSpec *etcd.EtcdClusterSpec
			master          bool
		)
		for k, v := range disk.Tags {
			if k == TagNameRolePrefix+TagRoleControlPlane || k == TagNameRolePrefix+TagRoleMaster {
				master = true
				continue
			}

			if strings.HasPrefix(k, TagNameEtcdClusterPrefix) {
				etcdClusterName = strings.TrimPrefix(k, TagNameEtcdClusterPrefix)
				var err error
				etcdClusterSpec, err = etcd.ParseEtcdClusterSpec(etcdClusterName, *v)
				if err != nil {
					return nil, fmt.Errorf("error parsing etcd cluster tag %q on volume %q: %s", *v, *disk.Name, err)
				}
			}
		}

		if etcdClusterName == "" || etcdClusterSpec == nil || !master {
			continue
		}

		status := statusMap[etcdClusterName]
		if status == nil {
			status = &kops.EtcdClusterStatus{
				Name: etcdClusterName,
			}
			statusMap[etcdClusterName] = status
		}
		status.Members = append(status.Members, &kops.EtcdMemberStatus{
			Name:     etcdClusterSpec.NodeName,
			VolumeID: *disk.Name,

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Inspect the disk's etcd tags in the Azure portal and correct the tag value format
  2. Re-apply the intended etcd cluster spec via kops rather than manual tag editing
  3. Confirm kOps version consistency between cluster creation and status discovery
  4. Skip or log-and-continue for unparseable tags if the disk is not an etcd master volume

Example fix

// before
tag: "a=1" // malformed etcd spec
// after
// correct etcd cluster spec format, e.g. "master-us-east-1a=1/1"
tag: "master-us-east-1a=1/1"
Defensive patterns

Strategy: validation

Validate before calling

for k, v := range disk.Tags {
	if strings.HasPrefix(k, TagNameEtcdClusterPrefix) {
		if _, err := etcd.ParseEtcdClusterSpec(strings.TrimPrefix(k, TagNameEtcdClusterPrefix), *v); err != nil {
			klog.Warningf("skipping disk %s: invalid etcd tag %q", *disk.Name, *v)
			continue
		}
	}
}

Try / catch

spec, err := findEtcdStatus(disks)
if err != nil {
	return fmt.Errorf("etcd status discovery failed; check etcd tags on disks: %w", err)
}

Prevention

When it happens

Trigger: A disk tagged k8s.io/etcd/<clusterName> has a value that fails ParseEtcdClusterSpec — e.g., wrong member count syntax, empty value, or hand-edited/legacy tag format.

Common situations: Tags manually edited in the Azure portal; clusters created by older kOps versions with a spec format the current parser rejects; copy-paste tag typos when migrating disks.

Related errors


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