{"record":{"id":"e61e1072aca4ecbe","repo":"kubernetes/kops","slug":"error-building-kubelet-config-v","errorCode":null,"errorMessage":"error building kubelet config: %v","messagePattern":"error building kubelet config: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kubelet.go","lineNumber":112,"sourceCode":"\n// KubeletBuilder installs kubelet\ntype KubeletBuilder struct {\n\t*NodeupModelContext\n}\n\nvar _ fi.NodeupModelBuilder = &KubeletBuilder{}\n\n// Build is responsible for building the kubelet configuration\nfunc (b *KubeletBuilder) Build(c *fi.NodeupModelBuilderContext) error {\n\terr := b.buildKubeletServingCertificate(c)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error building kubelet server cert: %v\", err)\n\t}\n\n\tctx := c.Context()\n\tkubeletConfig, err := b.buildKubeletConfigSpec(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error building kubelet config: %v\", err)\n\t}\n\n\t{\n\t\t// Set the provider ID to help speed node registration on large clusters\n\t\tvar providerID string\n\t\tif b.CloudProvider() == kops.CloudProviderAWS {\n\t\t\tconfig, err := awsconfig.LoadDefaultConfig(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error loading AWS config: %v\", err)\n\t\t\t}\n\t\t\tmetadata := imds.NewFromConfig(config)\n\t\t\tinstanceIdentity, err := metadata.GetInstanceIdentityDocument(ctx, &imds.GetInstanceIdentityDocumentInput{})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tproviderID = fmt.Sprintf(\"aws:///%s/%s\", instanceIdentity.AvailabilityZone, instanceIdentity.InstanceID)\n\t\t} else if b.CloudProvider() == kops.CloudProviderAzure {\n\t\t\tmetadata, err := azuremetadata.QueryComputeInstanceMetadata(ctx)","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kubelet.go#L94-L130","documentation":"KubeletBuilder.Build wraps failures from buildKubeletConfigSpec, which derives the effective kubelet configuration (InstanceGroup/cluster spec merged with feature gates, flags, etc.). Any error computing that spec aborts building the kubelet model.","triggerScenarios":"buildKubeletConfigSpec returns an error while merging cluster/instancegroup kubelet config — e.g. invalid kubelet config values in the cluster spec, unsupported fields, or missing context/cluster data.","commonSituations":"Malformed kops cluster spec (bad kubelet config block, invalid feature gates or eviction settings), instance groups referencing a kubelet config that cannot be resolved.","solutions":["Inspect the wrapped inner error to find which kubelet config field failed.","Validate the cluster spec with `kops replace --dry-run` / `kops get cluster -o yaml` review for invalid kubelet settings.","Fix or remove invalid kubelet config values in the cluster or InstanceGroup spec.","Re-run kops update cluster to regenerate the manifest, then retry nodeup."],"exampleFix":"// before (invalid kubelet spec)\nkubelet:\n  maxPods: not-a-number\n// after\nkubelet:\n  maxPods: 110","handlingStrategy":"validation","validationCode":"// validate kubelet spec fields before apply\nif c.Spec.Kubelet != nil && c.Spec.Kubelet.MaxPods != nil && *c.Spec.Kubelet.MaxPods <= 0 {\n    return errors.New(\"kubelet.maxPods must be positive\")\n}\n// kubectl dry-run\n// kops replace -f cluster.yaml --dry-run","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Dry-run kops replace/update after editing kubelet config blocks.","Only set kubelet fields supported by the target Kubernetes version.","Keep feature gates and eviction settings within documented values."],"tags":["nodeup","kubelet","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}