kubernetes/kops · error
unexpected etcd label on volume %q: %s=%s
Error message
unexpected etcd label on volume %q: %s=%s
What it means
Decoding guard in findEtcdStatus: a disk label with the etcd-cluster prefix was found, but its value fails GCE label decoding (GCE label values have charset/length restrictions, so kOps encodes them). Indicates a hand-edited or corrupted label on an etcd volume.
Source
Thrown at upup/pkg/fi/cloudup/gce/status.go:106
match = false
}
}
if match {
disks = append(disks, d)
}
}
}
for _, disk := range disks {
etcdClusterName := ""
var etcdClusterSpec *etcd.EtcdClusterSpec
master := false
for k, v := range disk.Labels {
if strings.HasPrefix(k, GceLabelNameEtcdClusterPrefix) {
etcdClusterName = strings.TrimPrefix(k, GceLabelNameEtcdClusterPrefix)
value, err := DecodeGCELabel(v)
if err != nil {
return nil, fmt.Errorf("unexpected etcd label on volume %q: %s=%s", disk.Name, k, v)
}
spec, err := etcd.ParseEtcdClusterSpec(etcdClusterName, value)
if err != nil {
return nil, fmt.Errorf("error parsing etcd cluster label %q on volume %q: %v", value, disk.Name, err)
}
etcdClusterSpec = spec
} else if strings.HasPrefix(k, GceLabelNameRolePrefix) {
roleName := strings.TrimPrefix(k, GceLabelNameRolePrefix)
if roleName == "master" || roleName == "control-plane" {
master = true
}
}
}
if etcdClusterName == "" || etcdClusterSpec == nil || !master {
continue
}
status := statusMap[etcdClusterName]View on GitHub (pinned to 4c8573c808)
Solutions
- Inspect the disk's labels in the GCP console
- Restore the original kOps-managed label value
- Or delete the stale etcd disk if the cluster is being rebuilt
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at upup/pkg/fi/cloudup/gce/status.go:106 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/a42675a7906a1e3c.
Report an issue: GitHub.