{"record":{"id":"a006f47e9dce9313","repo":"kubernetes/kops","slug":"error-building-kube-scheduler-pod-v","errorCode":null,"errorMessage":"error building kube-scheduler pod: %v","messagePattern":"error building kube-scheduler pod: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kube_scheduler.go","lineNumber":78,"sourceCode":"\nvar _ fi.NodeupModelBuilder = &KubeSchedulerBuilder{}\n\n// Build is responsible for building the manifest for the kube-scheduler\nfunc (b *KubeSchedulerBuilder) Build(c *fi.NodeupModelBuilderContext) error {\n\tif !b.IsMaster {\n\t\treturn nil\n\t}\n\n\tkubeScheduler := b.NodeupConfig.ControlPlaneConfig.KubeScheduler\n\n\tif err := b.writeServerCertificate(c, &kubeScheduler); err != nil {\n\t\treturn err\n\t}\n\n\t{\n\t\tpod, err := b.buildPod(&kubeScheduler)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error building kube-scheduler pod: %v\", err)\n\t\t}\n\n\t\tmanifest, err := k8scodecs.ToVersionedYaml(pod)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error marshaling pod to yaml: %v\", err)\n\t\t}\n\n\t\tc.AddTask(&nodetasks.File{\n\t\t\tPath:     \"/etc/kubernetes/manifests/kube-scheduler.manifest\",\n\t\t\tContents: fi.NewBytesResource(manifest),\n\t\t\tType:     nodetasks.FileType_File,\n\t\t})\n\t}\n\n\t{\n\t\tkubeconfig := b.BuildIssuedKubeconfig(\"kube-scheduler\", nodetasks.PKIXName{CommonName: rbac.KubeScheduler}, c)\n\n\t\tc.AddTask(&nodetasks.File{","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kube_scheduler.go#L60-L96","documentation":"KubeSchedulerBuilder.Build assembles the kube-scheduler static pod via b.buildPod; any failure there (flag building, path resolution) is wrapped as \"error building kube-scheduler pod: %v\". The nodeup model run aborts and the kube-scheduler manifest is never written, so node bootstrapping for control-plane nodes fails.","triggerScenarios":"Invoking nodeup on a master/control-plane instance with a KubeSchedulerConfig that buildPod cannot process — typically KubeSchedulerBuilder.Build -> buildPod -> flagbuilder.BuildFlagsList erroring on a config field.","commonSituations":"Cluster specs with custom scheduler config (e.g. invalid schedulerConfig fields), kops version mismatches between the state store spec and the nodeup binary, templated manifests rendered in CI with incomplete config.","solutions":["Read the wrapped cause to find the failing part of buildPod (most often the flags step, see error 678)","Fix the KubeSchedulerConfig in the cluster spec and re-run kops update cluster","Ensure the nodeup binary version matches the kops version that created the cluster spec","Run kops replace/rolling-update after fixing so the corrected manifest is applied"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"err := nodeupBuild(bootstrapConfig)\nif err != nil {\n\tif strings.Contains(err.Error(), \"error building kube-scheduler pod\") {\n\t\tlog.Errorf(\"kube-scheduler pod build failed; inspect wrapped cause: %v\", err)\n\t\treturn fmt.Errorf(\"control-plane bootstrap failed: %w\", err)\n\t}\n\treturn err\n}","preventionTips":["Validate KubeSchedulerConfig fields with kops edit/validate before running nodeup","Match nodeup binary version to the kops cluster-spec version","Test control-plane bootstrap in a staging cluster before production rolling updates"],"tags":["go","nodeup","kube-scheduler"],"backgroundTag":"flag-build-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}