Change:
<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --Have a legacy scheduler config, upgrade to v1beta2 since we are at v1beta2 now, scheduler failed to start with some unreadable raw data, accurate and readable error message. config scheduler config like what has been said above. Kubernetes version (use ): latest. Cloud provider or hardware configuration: OS (e.g: ): all Kernel (e.g. ): Install tools: Network plugin and version (if this is a network-related bug): Others: /sig scheduling /assign
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details

Discussion:
"VolumeBinding":               ValidateVolumeBindingArgs, } <del> seenPluginConfig := make(sets.String) for i := range profile.PluginConfig { pluginConfigPath := path.Child("pluginConfig").Index(i) name := profile.PluginConfig[i].Name args := profile.PluginConfig[i].Args if seenPluginConfig.Has(name) { errs = append(errs, field.Duplicate(pluginConfigPath, name)) } else { seenPluginConfig.Insert(name) } if validateFunc, ok := m[name]; ok { // type mismatch, no need to validate the `args`. if reflect.TypeOf(args) != reflect.ValueOf(validateFunc).Type().In(1) { errs = append(errs, field.Invalid(pluginConfigPath.Child("args"), args, "has to match plugin args")) return errs } in := []reflect.Value{reflect.ValueOf(pluginConfigPath.Child("args")), reflect.ValueOf(args)} res := reflect.ValueOf(validateFunc).Call(in) // It's possible that validation function return a Aggregate, just append here and it will be flattened at the end of CC validation. if res[0].Interface() != nil { errs = append(errs, res[0].Interface().(error)) } } } </del> if profile.Plugins != nil { stagesToPluginSet := map[string]config.PluginSet{ "queueSort":  profile.Plugins.QueueSort,

errs = append(errs, validateScorePluginSetForConflictPlugins( pluginsPath.Child("score"), apiVersion, profile)...) } <ins> seenPluginConfig := make(sets.String) for i := range profile.PluginConfig { pluginConfigPath := path.Child("pluginConfig").Index(i) name := profile.PluginConfig[i].Name args := profile.PluginConfig[i].Args if seenPluginConfig.Has(name) { errs = append(errs, field.Duplicate(pluginConfigPath, name)) } else { seenPluginConfig.Insert(name) } if removed, removedVersion := isPluginRemoved(apiVersion, name); removed { errs = append(errs, field.Invalid(pluginConfigPath, name, fmt.Sprintf("was removed in version %q (KubeSchedulerConfiguration is version %q)", removedVersion, apiVersion))) } else if validateFunc, ok := m[name]; ok { // type mismatch, no need to validate the `args`. if reflect.TypeOf(args) != reflect.ValueOf(validateFunc).Type().In(1) { errs = append(errs, field.Invalid(pluginConfigPath.Child("args"), args, "has to match plugin args")) } else { in := []reflect.Value{reflect.ValueOf(pluginConfigPath.Child("args")), reflect.ValueOf(args)} res := reflect.ValueOf(validateFunc).Call(in) // It's possible that validation function return a Aggregate, just append here and it will be flattened at the end of CC validation. if res[0].Interface() != nil { errs = append(errs, res[0].Interface().(error)) } } } } </ins> return errs }

goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesMostAllocated", Weight: 2}) goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "RequestedToCapacityRatio", Weight: 2}) <ins> deprecatedPluginsConfig := validConfig.DeepCopy() deprecatedPluginsConfig.Profiles[0].PluginConfig = append(deprecatedPluginsConfig.Profiles[0].PluginConfig, config.PluginConfig{ Name: "NodeResourcesLeastAllocated", Args: &config.NodeResourcesLeastAllocatedArgs{}, }) </ins> scenarios := map[string]struct { expectedToFail bool config         *config.KubeSchedulerConfiguration

expectedToFail: false, config:         goodConflictPlugins2, }, <ins> "bad-plugins-config": { expectedToFail: true, config:         deprecatedPluginsConfig, errorString:    "profiles[0].pluginConfig[1]: Invalid value: "NodeResourcesLeastAllocated": was removed in version "kubescheduler.config.k8s.io/v1beta2" (KubeSchedulerConfiguration is version "kubescheduler.config.k8s.io/v1beta2")", }, </ins> } for name, scenario := range scenarios {