{"record":{"id":"c3dfdafcbd2c079c","repo":"kubernetes/kops","slug":"error-marshaling-pod-to-yaml-v-c3dfda","errorCode":null,"errorMessage":"error marshaling pod to yaml: %v","messagePattern":"error marshaling pod to yaml: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kube_scheduler.go","lineNumber":83,"sourceCode":"\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{\n\t\t\tPath:     wellknownpaths.KubeSchedulerKubeConfig,\n\t\t\tContents: kubeconfig,\n\t\t\tType:     nodetasks.FileType_File,\n\t\t\tMode:     s(\"0400\"),\n\t\t})","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kube_scheduler.go#L65-L101","documentation":"After buildPod succeeds, KubeSchedulerBuilder.Build converts the constructed v1.Pod into versioned YAML via k8scodecs.ToVersionedYaml to write /etc/kubernetes/manifests/kube-scheduler.manifest. If the codecs layer cannot serialize the pod (unexpected object shape or API scheme registration issue), the error is wrapped as \"error marshaling pod to yaml: %v\".","triggerScenarios":"KubeSchedulerBuilder.Build reaching k8scodecs.ToVersionedYaml(pod) with a pod object the scheme cannot version — e.g. pod fields set by buildPod that violate the v1.Pod schema, or a scheme registration problem in the linked Kubernetes libraries.","commonSituations":"Custom/patched kops builds with mismatched k8s.io/api versions; extremely unusual KubeSchedulerConfig values producing out-of-range resource quantities (e.g. bad CPU/memory limits propagated into the pod spec).","solutions":["Check the wrapped serialization error for the offending pod field","Verify KubeSchedulerConfig resource requests/limits (cpuRequest, memoryRequest, cpuLimit, memoryLimit) are valid quantities","Rebuild kops/nodeup with consistent k8s.io/api and scheme registration versions","Regenerate manifests via kops update cluster after fixing the config"],"exampleFix":"// before (cluster spec)\nkubeScheduler:\n  cpuLimit: \"0.5m\"   # invalid quantity\n// after\nkubeScheduler:\n  cpuLimit: \"500m\"","handlingStrategy":"validation","validationCode":"// Ensure scheduler resource fields are valid Kubernetes quantities before nodeup\nfor name, q := range map[string]string{\n\t\"cpuRequest\":    cfg.CPURequest,\n\t\"cpuLimit\":      cfg.CPULimit,\n\t\"memoryRequest\": cfg.MemoryRequest,\n\t\"memoryLimit\":   cfg.MemoryLimit,\n} {\n\tif q != \"\" {\n\t\tif _, err := resource.ParseQuantity(q); err != nil {\n\t\t\treturn fmt.Errorf(\"kubeScheduler.%s %q is not a valid quantity: %w\", name, q, err)\n\t\t}\n\t}\n}","typeGuard":null,"tryCatchPattern":"if err := nodeupBuild(cfg); err != nil {\n\tif strings.Contains(err.Error(), \"error marshaling pod to yaml\") {\n\t\tlog.Errorf(\"pod serialization failed; check scheduler config quantities/scheme versions: %v\", err)\n\t}\n\treturn err\n}","preventionTips":["Use only valid Kubernetes resource quantities in kubeScheduler config","Avoid patched kops builds with mismatched k8s.io/api dependency versions","Render manifests with --dry-run before applying to catch serialization issues"],"tags":["go","nodeup","kube-scheduler","yaml-marshaling"],"backgroundTag":"manifest-serialization-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"}