kubernetes/kops · error
error loading NodeupConfig %q: %v
Error message
error loading NodeupConfig %q: %v
What it means
In VFS mode (no config server), Run() loads the instance group's NodeupConfig from <ConfigBase>/igconfig/<role>/<instance-group>/nodeupconfig.yaml. This error is thrown when that file cannot be read from the VFS backend — missing file, wrong path, or storage access failure.
Source
Thrown at upup/pkg/fi/nodeup/command.go:150
var nodeupConfig nodeup.Config
var nodeupConfigHash [32]byte
switch {
case nodeConfig != nil:
if err := utils.YamlUnmarshal([]byte(nodeConfig.NodeupConfig), &nodeupConfig); err != nil {
return fmt.Errorf("error parsing BootConfig config response: %v", err)
}
nodeupConfigHash = sha256.Sum256([]byte(nodeConfig.NodeupConfig))
if nodeupConfig.CAs == nil {
nodeupConfig.CAs = make(map[string]string)
}
nodeupConfig.CAs[fi.CertificateIDCA] = bootConfig.ConfigServer.CACertificates
case bootConfig.InstanceGroupName != "":
nodeupConfigLocation := configBase.Join("igconfig", bootConfig.InstanceGroupRole.ToLowerString(), bootConfig.InstanceGroupName, "nodeupconfig.yaml")
b, err := nodeupConfigLocation.ReadFile(ctx)
if err != nil {
return fmt.Errorf("error loading NodeupConfig %q: %v", nodeupConfigLocation, err)
}
if err = utils.YamlUnmarshal(b, &nodeupConfig); err != nil {
return fmt.Errorf("error parsing NodeupConfig %q: %v", nodeupConfigLocation, err)
}
nodeupConfigHash = sha256.Sum256(b)
default:
return fmt.Errorf("no instance group defined in nodeup config")
}
if bootConfig.NodeupConfigHash != "" {
if want, got := bootConfig.NodeupConfigHash, base64.StdEncoding.EncodeToString(nodeupConfigHash[:]); got != want {
return fmt.Errorf("nodeup config hash mismatch (was %q, expected %q)", got, want)
}
}
err = evaluateSpec(&nodeupConfig, bootConfig.CloudProvider, region)
if err != nil {View on GitHub (pinned to 4c8573c808)
Solutions
- Run 'kops update cluster --yes' to ensure igconfig/<role>/<group>/nodeupconfig.yaml exists in the state store.
- Verify bootConfig.InstanceGroupName matches an existing instance group ('kops get ig') and the role spelling is correct.
- Check the node's IAM role / service account has read access to the state-store bucket and prefix.
- Confirm --state-store / ConfigBase points at the same location kops used to publish the config.
- If the file was deleted, restore the state store from backup or recreate the cluster configuration.
Example fix
// before: node launched for a deleted instance group
BootConfig{InstanceGroupName: "nodes-old", ...} // igconfig/kubernetes.io/role/node/nodes-old/nodeupconfig.yaml missing
// after
BootConfig{InstanceGroupName: "nodes", ...} // matches existing igconfig Defensive patterns
Strategy: validation
Prevention
- Verify state-store contents and node IAM read access before scaling up
When it happens
Trigger: bootConfig.InstanceGroupName is set and the read of configBase.Join("igconfig", role, name, "nodeupconfig.yaml") fails: the object does not exist in the bucket, the bucket/path is wrong, or cloud-storage credentials/permissions deny the read.
Common situations: Instance group renamed or deleted in cluster spec but node still boots with the old name; state store bucket changed or contents deleted; IAM/SA credentials missing s3:GetObject/gs:objects.get on the state store; booting a node for an instance group whose config was never pushed ('kops update cluster' not run).
Related errors
- parsing path for kops-channels manifest %s: %w
- cannot parse ConfigBase %q: %v
- unsupported cloud provider for authenticator %q
- reading kops-channels manifest %s: %w
- error reading etcd manifest %s: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/43ca6ac177ef46a7.
Report an issue: GitHub.