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
- Inspect the disk's etcd tags in the Azure portal and correct the tag value format
- Re-apply the intended etcd cluster spec via kops rather than manual tag editing
- Confirm kOps version consistency between cluster creation and status discovery
- 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
- Never hand-edit etcd tags on Azure disks; manage them via kops
- Keep the kOps version that created the cluster when inspecting it
- Use consistent etcd cluster spec format across volumes
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
- unexpected form of resource path: %q
- invalid EtcdClusterSpec (expected two tokens): %q
- invalid EtcdClusterSpec (member not found in all nodes): %q
- parsing etcd backup-store %q: %w
- expected azureblob:// backup-store, got %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/07c5b340807c07ef.
Report an issue: GitHub.