diff --git a/cmd/kube-scheduler/app/options/configfile.go b/cmd/kube-scheduler/app/options/configfile.go index 384e86fb480e..eda49fcfed9b 100644 --- a/cmd/kube-scheduler/app/options/configfile.go +++ b/cmd/kube-scheduler/app/options/configfile.go @@ -27,7 +27,6 @@ import ( "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" - configv1beta1 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" configv1beta2 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2" ) @@ -67,8 +66,6 @@ func encodeConfig(cfg *config.KubeSchedulerConfiguration) (*bytes.Buffer, error) var encoder runtime.Encoder switch cfg.TypeMeta.APIVersion { - case configv1beta1.SchemeGroupVersion.String(): - encoder = scheme.Codecs.EncoderForVersion(info.Serializer, configv1beta1.SchemeGroupVersion) case configv1beta2.SchemeGroupVersion.String(): encoder = scheme.Codecs.EncoderForVersion(info.Serializer, configv1beta2.SchemeGroupVersion) default: diff --git a/cmd/kube-scheduler/app/options/options_test.go b/cmd/kube-scheduler/app/options/options_test.go index 0aca83edf7d3..5a8b696f3ec4 100644 --- a/cmd/kube-scheduler/app/options/options_test.go +++ b/cmd/kube-scheduler/app/options/options_test.go @@ -35,11 +35,9 @@ import ( apiserveroptions "k8s.io/apiserver/pkg/server/options" componentbaseconfig "k8s.io/component-base/config" "k8s.io/component-base/logs" - "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kube-scheduler/config/v1beta2" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/latest" - configtesting "k8s.io/kubernetes/pkg/scheduler/apis/config/testing" "k8s.io/kubernetes/pkg/scheduler/apis/config/testing/defaults" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" ) @@ -120,17 +118,6 @@ leaderElection: t.Fatal(err) } - v1beta1VersionConfig := filepath.Join(tmpDir, "scheduler_v1beta1_api_version.yaml") - if err := ioutil.WriteFile(v1beta1VersionConfig, []byte(fmt.Sprintf(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -clientConnection: - kubeconfig: "%s" -leaderElection: - leaderElect: true`, configKubeconfig)), os.FileMode(0600)); err != nil { - t.Fatal(err) - } - unknownVersionConfig := filepath.Join(tmpDir, "scheduler_invalid_wrong_api_version.yaml") if err := ioutil.WriteFile(unknownVersionConfig, []byte(fmt.Sprintf(` apiVersion: kubescheduler.config.k8s.io/unknown @@ -231,38 +218,6 @@ profiles: t.Fatal(err) } - // plugin config - v1beta1PluginConfigFile := filepath.Join(tmpDir, "v1beta1_plugin.yaml") - if err := ioutil.WriteFile(v1beta1PluginConfigFile, []byte(fmt.Sprintf(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -clientConnection: - kubeconfig: "%s" -profiles: -- plugins: - reserve: - enabled: - - name: foo - - name: bar - disabled: - - name: VolumeBinding - preBind: - enabled: - - name: foo - disabled: - - name: VolumeBinding - pluginConfig: - - name: ServiceAffinity - args: - affinityLabels: [] - antiAffinityLabelsPreference: [] - - name: foo - args: - bar: baz -`, configKubeconfig)), os.FileMode(0600)); err != nil { - t.Fatal(err) - } - // multiple profiles config multiProfilesConfig := filepath.Join(tmpDir, "multi-profiles.yaml") if err := ioutil.WriteFile(multiProfilesConfig, []byte(fmt.Sprintf(` @@ -290,33 +245,6 @@ profiles: t.Fatal(err) } - // multiple profiles config - v1beta1MultiProfilesConfig := filepath.Join(tmpDir, "v1beta1_multi-profiles.yaml") - if err := ioutil.WriteFile(v1beta1MultiProfilesConfig, []byte(fmt.Sprintf(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -clientConnection: - kubeconfig: "%s" -profiles: -- schedulerName: "foo-profile" - plugins: - reserve: - enabled: - - name: foo - - name: VolumeBinding - disabled: - - name: VolumeBinding -- schedulerName: "bar-profile" - plugins: - preBind: - disabled: - - name: VolumeBinding - pluginConfig: - - name: foo -`, configKubeconfig)), os.FileMode(0600)); err != nil { - t.Fatal(err) - } - // Insulate this test from picking up in-cluster config when run inside a pod // We can't assume we have permissions to write to /var/run/secrets/... from a unit test to mock in-cluster config for testing originalHost := os.Getenv("KUBERNETES_SERVICE_HOST") @@ -411,77 +339,6 @@ profiles: }, }, }, - { - name: "v1beta1 config file", - options: &Options{ - ConfigFile: v1beta1VersionConfig, - ComponentConfig: func() kubeschedulerconfig.KubeSchedulerConfiguration { - cfg := configtesting.V1beta1ToInternalWithDefaults(t, v1beta1.KubeSchedulerConfiguration{}) - return *cfg - }(), - SecureServing: (&apiserveroptions.SecureServingOptions{ - ServerCert: apiserveroptions.GeneratableKeyCert{ - CertDirectory: "/a/b/c", - PairName: "kube-scheduler", - }, - HTTP2MaxStreamsPerConnection: 47, - }).WithLoopback(), - Authentication: &apiserveroptions.DelegatingAuthenticationOptions{ - CacheTTL: 10 * time.Second, - ClientCert: apiserveroptions.ClientCertAuthenticationOptions{}, - RequestHeader: apiserveroptions.RequestHeaderAuthenticationOptions{ - UsernameHeaders: []string{"x-remote-user"}, - GroupHeaders: []string{"x-remote-group"}, - ExtraHeaderPrefixes: []string{"x-remote-extra-"}, - }, - RemoteKubeConfigFileOptional: true, - }, - Authorization: &apiserveroptions.DelegatingAuthorizationOptions{ - AllowCacheTTL: 10 * time.Second, - DenyCacheTTL: 10 * time.Second, - RemoteKubeConfigFileOptional: true, - AlwaysAllowPaths: []string{"/healthz", "/readyz", "/livez"}, // note: this does not match /healthz/ or /healthz/* - AlwaysAllowGroups: []string{"system:masters"}, - }, - Logs: logs.NewOptions(), - }, - expectedUsername: "config", - expectedConfig: kubeschedulerconfig.KubeSchedulerConfiguration{ - TypeMeta: metav1.TypeMeta{ - APIVersion: v1beta1.SchemeGroupVersion.String(), - }, - Parallelism: 16, - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: true, - EnableContentionProfiling: true, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: true, - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - Kubeconfig: configKubeconfig, - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: defaultPercentageOfNodesToScore, - PodInitialBackoffSeconds: defaultPodInitialBackoffSeconds, - PodMaxBackoffSeconds: defaultPodMaxBackoffSeconds, - Profiles: []kubeschedulerconfig.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: defaults.PluginsV1beta1, - PluginConfig: defaults.PluginConfigsV1beta1, - }, - }, - }, - }, { name: "config file in componentconfig/v1alpha1", options: &Options{ @@ -769,133 +626,6 @@ profiles: }, }, }, - { - name: "v1beta1 plugin config", - options: &Options{ - ConfigFile: v1beta1PluginConfigFile, - Logs: logs.NewOptions(), - }, - expectedUsername: "config", - expectedConfig: kubeschedulerconfig.KubeSchedulerConfiguration{ - TypeMeta: metav1.TypeMeta{ - APIVersion: v1beta1.SchemeGroupVersion.String(), - }, - Parallelism: 16, - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: true, - EnableContentionProfiling: true, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: true, - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - Kubeconfig: configKubeconfig, - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: defaultPercentageOfNodesToScore, - PodInitialBackoffSeconds: defaultPodInitialBackoffSeconds, - PodMaxBackoffSeconds: defaultPodMaxBackoffSeconds, - Profiles: []kubeschedulerconfig.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: &kubeschedulerconfig.Plugins{ - QueueSort: defaults.PluginsV1beta1.QueueSort, - PreFilter: defaults.PluginsV1beta1.PreFilter, - Filter: defaults.PluginsV1beta1.Filter, - PostFilter: defaults.PluginsV1beta1.PostFilter, - PreScore: defaults.PluginsV1beta1.PreScore, - Score: defaults.PluginsV1beta1.Score, - Reserve: kubeschedulerconfig.PluginSet{ - Enabled: []kubeschedulerconfig.Plugin{ - {Name: "foo"}, - {Name: "bar"}, - }, - }, - PreBind: kubeschedulerconfig.PluginSet{ - Enabled: []kubeschedulerconfig.Plugin{ - {Name: "foo"}, - }, - }, - Bind: defaults.PluginsV1beta1.Bind, - }, - PluginConfig: []kubeschedulerconfig.PluginConfig{ - { - Name: "ServiceAffinity", - Args: &kubeschedulerconfig.ServiceAffinityArgs{ - AffinityLabels: []string{}, - AntiAffinityLabelsPreference: []string{}, - }, - }, - { - Name: "foo", - Args: &runtime.Unknown{ - Raw: []byte(`{"bar":"baz"}`), - ContentType: "application/json", - }, - }, - { - Name: "DefaultPreemption", - Args: &kubeschedulerconfig.DefaultPreemptionArgs{ - MinCandidateNodesPercentage: 10, - MinCandidateNodesAbsolute: 100, - }, - }, - { - Name: "InterPodAffinity", - Args: &kubeschedulerconfig.InterPodAffinityArgs{ - HardPodAffinityWeight: 1, - }, - }, - { - Name: "NodeAffinity", - Args: &kubeschedulerconfig.NodeAffinityArgs{}, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: &kubeschedulerconfig.NodeResourcesBalancedAllocationArgs{ - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesFit", - Args: &kubeschedulerconfig.NodeResourcesFitArgs{ - ScoringStrategy: &kubeschedulerconfig.ScoringStrategy{ - Type: kubeschedulerconfig.LeastAllocated, - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: &kubeschedulerconfig.NodeResourcesLeastAllocatedArgs{ - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "PodTopologySpread", - Args: &kubeschedulerconfig.PodTopologySpreadArgs{ - DefaultingType: kubeschedulerconfig.SystemDefaulting, - }, - }, - { - Name: "VolumeBinding", - Args: &kubeschedulerconfig.VolumeBindingArgs{ - BindTimeoutSeconds: 600, - }, - }, - }, - }, - }, - }, - }, { name: "multiple profiles", options: &Options{ @@ -1016,132 +746,6 @@ profiles: }, }, }, - { - name: "v1beta1 multiple profiles", - options: &Options{ - ConfigFile: v1beta1MultiProfilesConfig, - Logs: logs.NewOptions(), - }, - expectedUsername: "config", - expectedConfig: kubeschedulerconfig.KubeSchedulerConfiguration{ - TypeMeta: metav1.TypeMeta{ - APIVersion: v1beta1.SchemeGroupVersion.String(), - }, - Parallelism: 16, - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: true, - EnableContentionProfiling: true, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: true, - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - Kubeconfig: configKubeconfig, - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: defaultPercentageOfNodesToScore, - PodInitialBackoffSeconds: defaultPodInitialBackoffSeconds, - PodMaxBackoffSeconds: defaultPodMaxBackoffSeconds, - Profiles: []kubeschedulerconfig.KubeSchedulerProfile{ - { - SchedulerName: "foo-profile", - Plugins: &kubeschedulerconfig.Plugins{ - QueueSort: defaults.PluginsV1beta1.QueueSort, - PreFilter: defaults.PluginsV1beta1.PreFilter, - Filter: defaults.PluginsV1beta1.Filter, - PostFilter: defaults.PluginsV1beta1.PostFilter, - PreScore: defaults.PluginsV1beta1.PreScore, - Score: defaults.PluginsV1beta1.Score, - Bind: defaults.PluginsV1beta1.Bind, - PreBind: defaults.PluginsV1beta1.PreBind, - Reserve: kubeschedulerconfig.PluginSet{ - Enabled: []kubeschedulerconfig.Plugin{ - {Name: "foo"}, - {Name: names.VolumeBinding}, - }, - }, - }, - PluginConfig: defaults.PluginConfigsV1beta1, - }, - { - SchedulerName: "bar-profile", - Plugins: &kubeschedulerconfig.Plugins{ - QueueSort: defaults.PluginsV1beta1.QueueSort, - PreFilter: defaults.PluginsV1beta1.PreFilter, - Filter: defaults.PluginsV1beta1.Filter, - PostFilter: defaults.PluginsV1beta1.PostFilter, - PreScore: defaults.PluginsV1beta1.PreScore, - Score: defaults.PluginsV1beta1.Score, - Bind: defaults.PluginsV1beta1.Bind, - Reserve: defaults.PluginsV1beta1.Reserve, - }, - PluginConfig: []kubeschedulerconfig.PluginConfig{ - { - Name: "foo", - }, - { - Name: "DefaultPreemption", - Args: &kubeschedulerconfig.DefaultPreemptionArgs{ - MinCandidateNodesPercentage: 10, - MinCandidateNodesAbsolute: 100, - }, - }, - { - Name: "InterPodAffinity", - Args: &kubeschedulerconfig.InterPodAffinityArgs{ - HardPodAffinityWeight: 1, - }, - }, - { - Name: "NodeAffinity", - Args: &kubeschedulerconfig.NodeAffinityArgs{}, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: &kubeschedulerconfig.NodeResourcesBalancedAllocationArgs{ - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesFit", - Args: &kubeschedulerconfig.NodeResourcesFitArgs{ - ScoringStrategy: &kubeschedulerconfig.ScoringStrategy{ - Type: kubeschedulerconfig.LeastAllocated, - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: &kubeschedulerconfig.NodeResourcesLeastAllocatedArgs{ - Resources: []kubeschedulerconfig.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "PodTopologySpread", - Args: &kubeschedulerconfig.PodTopologySpreadArgs{ - DefaultingType: kubeschedulerconfig.SystemDefaulting, - }, - }, - { - Name: "VolumeBinding", - Args: &kubeschedulerconfig.VolumeBindingArgs{ - BindTimeoutSeconds: 600, - }, - }, - }, - }, - }, - }, - }, { name: "Attempting to set Component Config Profiles and Policy config", options: &Options{ diff --git a/cmd/kube-scheduler/app/server_test.go b/cmd/kube-scheduler/app/server_test.go index 3d6307d0bf6d..0b0219420261 100644 --- a/cmd/kube-scheduler/app/server_test.go +++ b/cmd/kube-scheduler/app/server_test.go @@ -75,7 +75,7 @@ users: // plugin config pluginConfigFile := filepath.Join(tmpDir, "plugin.yaml") if err := ioutil.WriteFile(pluginConfigFile, []byte(fmt.Sprintf(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 +apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration clientConnection: kubeconfig: "%s" @@ -112,7 +112,7 @@ profiles: // multiple profiles config multiProfilesConfig := filepath.Join(tmpDir, "multi-profiles.yaml") if err := ioutil.WriteFile(multiProfilesConfig, []byte(fmt.Sprintf(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 +apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration clientConnection: kubeconfig: "%s" diff --git a/hack/local-up-cluster.sh b/hack/local-up-cluster.sh index cf82418f0cf5..abe85bb29fc5 100755 --- a/hack/local-up-cluster.sh +++ b/hack/local-up-cluster.sh @@ -932,7 +932,7 @@ function start_kubescheduler { SCHEDULER_LOG=${LOG_DIR}/kube-scheduler.log cat < /tmp/kube-scheduler.yaml -apiVersion: kubescheduler.config.k8s.io/v1beta1 +apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration clientConnection: kubeconfig: ${CERT_DIR}/scheduler.kubeconfig diff --git a/pkg/scheduler/apis/config/scheme/scheme.go b/pkg/scheduler/apis/config/scheme/scheme.go index 0b30657395eb..99806b7e9bfa 100644 --- a/pkg/scheduler/apis/config/scheme/scheme.go +++ b/pkg/scheduler/apis/config/scheme/scheme.go @@ -22,7 +22,6 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" config "k8s.io/kubernetes/pkg/scheduler/apis/config" configv1 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1" - configv1beta1 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" configv1beta2 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2" ) @@ -42,7 +41,6 @@ func init() { func AddToScheme(scheme *runtime.Scheme) { utilruntime.Must(config.AddToScheme(scheme)) utilruntime.Must(configv1.AddToScheme(scheme)) - utilruntime.Must(configv1beta1.AddToScheme(scheme)) utilruntime.Must(configv1beta2.AddToScheme(scheme)) - utilruntime.Must(scheme.SetVersionPriority(configv1beta2.SchemeGroupVersion, configv1beta1.SchemeGroupVersion)) + utilruntime.Must(scheme.SetVersionPriority(configv1beta2.SchemeGroupVersion)) } diff --git a/pkg/scheduler/apis/config/scheme/scheme_test.go b/pkg/scheduler/apis/config/scheme/scheme_test.go index 0903dc1f8c7d..5a70eb6262dc 100644 --- a/pkg/scheduler/apis/config/scheme/scheme_test.go +++ b/pkg/scheduler/apis/config/scheme/scheme_test.go @@ -24,7 +24,6 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kube-scheduler/config/v1beta2" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/testing/defaults" @@ -41,375 +40,6 @@ func TestCodecsDecodePluginConfig(t *testing.T) { wantErr string wantProfiles []config.KubeSchedulerProfile }{ - //v1beta1 tests - { - name: "v1beta1 all plugin args in default profile", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: DefaultPreemption - args: - minCandidateNodesPercentage: 50 - minCandidateNodesAbsolute: 500 - - name: InterPodAffinity - args: - hardPodAffinityWeight: 5 - - name: NodeLabel - args: - presentLabels: ["foo"] - - name: NodeResourcesFit - args: - ignoredResources: ["foo"] - - name: RequestedToCapacityRatio - args: - shape: - - utilization: 1 - - name: PodTopologySpread - args: - defaultConstraints: - - maxSkew: 1 - topologyKey: zone - whenUnsatisfiable: ScheduleAnyway - - name: ServiceAffinity - args: - affinityLabels: ["bar"] - - name: NodeResourcesLeastAllocated - args: - resources: - - name: cpu - weight: 2 - - name: unknown - weight: 1 - - name: NodeResourcesMostAllocated - args: - resources: - - name: memory - weight: 1 - - name: NodeResourcesBalancedAllocation - args: - resources: - - name: cpu # default weight(1) will be set. - - name: memory # weight 0 will be replaced by 1. - weight: 0 - - name: scalar0 - weight: 1 - - name: scalar1 # default weight(1) will be set for scalar1 - - name: scalar2 # weight 0 will be replaced by 1. - weight: 0 - - name: scalar3 - weight: 2 - - name: VolumeBinding - args: - bindTimeoutSeconds: 300 - - name: NodeAffinity - args: - addedAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: foo - operator: In - values: ["bar"] -`), - wantProfiles: []config.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: defaults.PluginsV1beta1, - PluginConfig: []config.PluginConfig{ - { - Name: "DefaultPreemption", - Args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 50, MinCandidateNodesAbsolute: 500}, - }, - { - Name: "InterPodAffinity", - Args: &config.InterPodAffinityArgs{HardPodAffinityWeight: 5}, - }, - { - Name: "NodeLabel", - Args: &config.NodeLabelArgs{PresentLabels: []string{"foo"}}, - }, - { - Name: "NodeResourcesFit", - Args: &config.NodeResourcesFitArgs{ - IgnoredResources: []string{"foo"}, - ScoringStrategy: &config.ScoringStrategy{ - Type: config.LeastAllocated, - Resources: []config.ResourceSpec{ - {Name: "cpu", Weight: 1}, - {Name: "memory", Weight: 1}, - }, - }, - }, - }, - { - Name: "RequestedToCapacityRatio", - Args: &config.RequestedToCapacityRatioArgs{ - Shape: []config.UtilizationShapePoint{{Utilization: 1}}, - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "PodTopologySpread", - Args: &config.PodTopologySpreadArgs{ - DefaultConstraints: []corev1.TopologySpreadConstraint{ - {MaxSkew: 1, TopologyKey: "zone", WhenUnsatisfiable: corev1.ScheduleAnyway}, - }, - DefaultingType: config.ListDefaulting, - }, - }, - { - Name: "ServiceAffinity", - Args: &config.ServiceAffinityArgs{ - AffinityLabels: []string{"bar"}, - }, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: &config.NodeResourcesLeastAllocatedArgs{ - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 2}, {Name: "unknown", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesMostAllocated", - Args: &config.NodeResourcesMostAllocatedArgs{ - Resources: []config.ResourceSpec{{Name: "memory", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: &config.NodeResourcesBalancedAllocationArgs{ - Resources: []config.ResourceSpec{ - {Name: "cpu", Weight: 1}, - {Name: "memory", Weight: 1}, - {Name: "scalar0", Weight: 1}, - {Name: "scalar1", Weight: 1}, - {Name: "scalar2", Weight: 1}, - {Name: "scalar3", Weight: 2}}, - }, - }, - { - Name: "VolumeBinding", - Args: &config.VolumeBindingArgs{ - BindTimeoutSeconds: 300, - }, - }, - { - Name: "NodeAffinity", - Args: &config.NodeAffinityArgs{ - AddedAffinity: &corev1.NodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ - NodeSelectorTerms: []corev1.NodeSelectorTerm{ - { - MatchExpressions: []corev1.NodeSelectorRequirement{ - { - Key: "foo", - Operator: corev1.NodeSelectorOpIn, - Values: []string{"bar"}, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - { - name: "v1beta1 plugins can include version and kind", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: NodeLabel - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: NodeLabelArgs - presentLabels: ["bars"] -`), - wantProfiles: []config.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: defaults.PluginsV1beta1, - PluginConfig: append([]config.PluginConfig{ - { - Name: "NodeLabel", - Args: &config.NodeLabelArgs{PresentLabels: []string{"bars"}}, - }, - }, defaults.PluginConfigsV1beta1...), - }, - }, - }, - { - name: "plugin group and kind should match the type", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: NodeLabel - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: InterPodAffinityArgs -`), - wantErr: `decoding .profiles[0].pluginConfig[0]: args for plugin NodeLabel were not of type NodeLabelArgs.kubescheduler.config.k8s.io, got InterPodAffinityArgs.kubescheduler.config.k8s.io`, - }, - { - name: "v1beta1 RequestedToCapacityRatioArgs shape encoding is strict", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: RequestedToCapacityRatio - args: - shape: - - Utilization: 1 - Score: 2 -`), - wantErr: `decoding .profiles[0].pluginConfig[0]: decoding args for plugin RequestedToCapacityRatio: strict decoder error for {"shape":[{"Score":2,"Utilization":1}]}: v1beta1.RequestedToCapacityRatioArgs.Shape: []v1beta1.UtilizationShapePoint: v1beta1.UtilizationShapePoint.ReadObject: found unknown field: Score, error found in #10 byte of ...|:[{"Score":2,"Utiliz|..., bigger context ...|{"shape":[{"Score":2,"Utilization":1}]}|...`, - }, - { - name: "v1beta1 RequestedToCapacityRatioArgs resources encoding is strict", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: RequestedToCapacityRatio - args: - shape: - - utilization: 1 - score: 2 - resources: - - Name: 1 - Weight: 2 -`), - wantErr: `decoding .profiles[0].pluginConfig[0]: decoding args for plugin RequestedToCapacityRatio: strict decoder error for {"resources":[{"Name":1,"Weight":2}],"shape":[{"score":2,"utilization":1}]}: v1beta1.RequestedToCapacityRatioArgs.Shape: []v1beta1.UtilizationShapePoint: Resources: []v1beta1.ResourceSpec: v1beta1.ResourceSpec.ReadObject: found unknown field: Name, error found in #10 byte of ...|":[{"Name":1,"Weight|..., bigger context ...|{"resources":[{"Name":1,"Weight":2}],"shape":[{"score":2,"utilization":|...`, - }, - { - name: "out-of-tree plugin args", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: OutOfTreePlugin - args: - foo: bar -`), - wantProfiles: []config.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: defaults.PluginsV1beta1, - PluginConfig: append([]config.PluginConfig{ - { - Name: "OutOfTreePlugin", - Args: &runtime.Unknown{ - ContentType: "application/json", - Raw: []byte(`{"foo":"bar"}`), - }, - }, - }, defaults.PluginConfigsV1beta1...), - }, - }, - }, - { - name: "empty and no plugin args v1beta1", - data: []byte(` -apiVersion: kubescheduler.config.k8s.io/v1beta1 -kind: KubeSchedulerConfiguration -profiles: -- pluginConfig: - - name: DefaultPreemption - args: - - name: InterPodAffinity - args: - - name: NodeResourcesFit - - name: OutOfTreePlugin - args: - - name: NodeResourcesLeastAllocated - args: - - name: NodeResourcesMostAllocated - args: - - name: NodeResourcesBalancedAllocation - args: - - name: VolumeBinding - args: - - name: PodTopologySpread - - name: NodeAffinity -`), - wantProfiles: []config.KubeSchedulerProfile{ - { - SchedulerName: "default-scheduler", - Plugins: defaults.PluginsV1beta1, - PluginConfig: []config.PluginConfig{ - { - Name: "DefaultPreemption", - Args: &config.DefaultPreemptionArgs{MinCandidateNodesPercentage: 10, MinCandidateNodesAbsolute: 100}, - }, - { - Name: "InterPodAffinity", - Args: &config.InterPodAffinityArgs{ - HardPodAffinityWeight: 1, - }, - }, - { - Name: "NodeResourcesFit", - Args: &config.NodeResourcesFitArgs{ - ScoringStrategy: &config.ScoringStrategy{ - Type: config.LeastAllocated, - Resources: []config.ResourceSpec{ - {Name: "cpu", Weight: 1}, - {Name: "memory", Weight: 1}, - }, - }, - }, - }, - {Name: "OutOfTreePlugin"}, - { - Name: "NodeResourcesLeastAllocated", - Args: &config.NodeResourcesLeastAllocatedArgs{ - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesMostAllocated", - Args: &config.NodeResourcesMostAllocatedArgs{ - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: &config.NodeResourcesBalancedAllocationArgs{ - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }, - { - Name: "VolumeBinding", - Args: &config.VolumeBindingArgs{ - BindTimeoutSeconds: 600, - }, - }, - { - Name: "PodTopologySpread", - Args: &config.PodTopologySpreadArgs{ - DefaultingType: config.SystemDefaulting, - }, - }, - { - Name: "NodeAffinity", - Args: &config.NodeAffinityArgs{}, - }, - }, - }, - }, - }, // v1beta2 tests { name: "v1beta2 all plugin args in default profile", @@ -783,265 +413,6 @@ func TestCodecsEncodePluginConfig(t *testing.T) { version schema.GroupVersion want string }{ - //v1beta1 tests - { - name: "v1beta1 in-tree and out-of-tree plugins", - version: v1beta1.SchemeGroupVersion, - obj: &v1beta1.KubeSchedulerConfiguration{ - Profiles: []v1beta1.KubeSchedulerProfile{ - { - PluginConfig: []v1beta1.PluginConfig{ - { - Name: "InterPodAffinity", - Args: runtime.RawExtension{ - Object: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(5), - }, - }, - }, - { - Name: "VolumeBinding", - Args: runtime.RawExtension{ - Object: &v1beta1.VolumeBindingArgs{ - BindTimeoutSeconds: pointer.Int64Ptr(300), - Shape: []v1beta1.UtilizationShapePoint{ - { - Utilization: 0, - Score: 0, - }, - { - Utilization: 100, - Score: 10, - }, - }, - }, - }, - }, - { - Name: "RequestedToCapacityRatio", - Args: runtime.RawExtension{ - Object: &v1beta1.RequestedToCapacityRatioArgs{ - Shape: []v1beta1.UtilizationShapePoint{ - {Utilization: 1, Score: 2}, - }, - Resources: []v1beta1.ResourceSpec{ - {Name: "cpu", Weight: 2}, - }, - }, - }, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: runtime.RawExtension{ - Object: &v1beta1.NodeResourcesLeastAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "mem", Weight: 2}, - }, - }, - }, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: runtime.RawExtension{ - Object: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "mem", Weight: 1}, - }, - }, - }, - }, - { - Name: "PodTopologySpread", - Args: runtime.RawExtension{ - Object: &v1beta1.PodTopologySpreadArgs{ - DefaultConstraints: []corev1.TopologySpreadConstraint{}, - }, - }, - }, - { - Name: "OutOfTreePlugin", - Args: runtime.RawExtension{ - Raw: []byte(`{"foo":"bar"}`), - }, - }, - }, - }, - }, - }, - want: `apiVersion: kubescheduler.config.k8s.io/v1beta1 -clientConnection: - acceptContentTypes: "" - burst: 0 - contentType: "" - kubeconfig: "" - qps: 0 -kind: KubeSchedulerConfiguration -leaderElection: - leaderElect: null - leaseDuration: 0s - renewDeadline: 0s - resourceLock: "" - resourceName: "" - resourceNamespace: "" - retryPeriod: 0s -profiles: -- pluginConfig: - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - hardPodAffinityWeight: 5 - kind: InterPodAffinityArgs - name: InterPodAffinity - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - bindTimeoutSeconds: 300 - kind: VolumeBindingArgs - shape: - - score: 0 - utilization: 0 - - score: 10 - utilization: 100 - name: VolumeBinding - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: RequestedToCapacityRatioArgs - resources: - - name: cpu - weight: 2 - shape: - - score: 2 - utilization: 1 - name: RequestedToCapacityRatio - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: NodeResourcesLeastAllocatedArgs - resources: - - name: mem - weight: 2 - name: NodeResourcesLeastAllocated - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: NodeResourcesBalancedAllocationArgs - resources: - - name: mem - weight: 1 - name: NodeResourcesBalancedAllocation - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: PodTopologySpreadArgs - name: PodTopologySpread - - args: - foo: bar - name: OutOfTreePlugin -`, - }, - { - name: "v1beta1 in-tree and out-of-tree plugins from internal", - version: v1beta1.SchemeGroupVersion, - obj: &config.KubeSchedulerConfiguration{ - Parallelism: 8, - Profiles: []config.KubeSchedulerProfile{ - { - PluginConfig: []config.PluginConfig{ - { - Name: "InterPodAffinity", - Args: &config.InterPodAffinityArgs{ - HardPodAffinityWeight: 5, - }, - }, - { - Name: "NodeResourcesMostAllocated", - Args: &config.NodeResourcesMostAllocatedArgs{ - Resources: []config.ResourceSpec{{Name: "cpu", Weight: 1}}, - }, - }, - { - Name: "VolumeBinding", - Args: &config.VolumeBindingArgs{ - BindTimeoutSeconds: 300, - Shape: []config.UtilizationShapePoint{ - { - Utilization: 0, - Score: 0, - }, - { - Utilization: 100, - Score: 10, - }, - }, - }, - }, - { - Name: "PodTopologySpread", - Args: &config.PodTopologySpreadArgs{}, - }, - { - Name: "OutOfTreePlugin", - Args: &runtime.Unknown{ - Raw: []byte(`{"foo":"bar"}`), - }, - }, - }, - }, - }, - }, - want: `apiVersion: kubescheduler.config.k8s.io/v1beta1 -clientConnection: - acceptContentTypes: "" - burst: 0 - contentType: "" - kubeconfig: "" - qps: 0 -enableContentionProfiling: false -enableProfiling: false -healthzBindAddress: "" -kind: KubeSchedulerConfiguration -leaderElection: - leaderElect: false - leaseDuration: 0s - renewDeadline: 0s - resourceLock: "" - resourceName: "" - resourceNamespace: "" - retryPeriod: 0s -metricsBindAddress: "" -parallelism: 8 -percentageOfNodesToScore: 0 -podInitialBackoffSeconds: 0 -podMaxBackoffSeconds: 0 -profiles: -- pluginConfig: - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - hardPodAffinityWeight: 5 - kind: InterPodAffinityArgs - name: InterPodAffinity - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: NodeResourcesMostAllocatedArgs - resources: - - name: cpu - weight: 1 - name: NodeResourcesMostAllocated - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - bindTimeoutSeconds: 300 - kind: VolumeBindingArgs - shape: - - score: 0 - utilization: 0 - - score: 10 - utilization: 100 - name: VolumeBinding - - args: - apiVersion: kubescheduler.config.k8s.io/v1beta1 - kind: PodTopologySpreadArgs - name: PodTopologySpread - - args: - foo: bar - name: OutOfTreePlugin - schedulerName: "" -`, - }, //v1beta2 tests { name: "v1beta2 in-tree and out-of-tree plugins", diff --git a/pkg/scheduler/apis/config/testing/config.go b/pkg/scheduler/apis/config/testing/config.go index 0c3cddf7bba6..6b23b8a8a7c6 100644 --- a/pkg/scheduler/apis/config/testing/config.go +++ b/pkg/scheduler/apis/config/testing/config.go @@ -20,24 +20,11 @@ import ( "testing" "k8s.io/component-base/config/v1alpha1" - "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kube-scheduler/config/v1beta2" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" ) -// V1beta1ToInternalWithDefaults creates a v1beta1 default configuration. -func V1beta1ToInternalWithDefaults(t *testing.T, versionedCfg v1beta1.KubeSchedulerConfiguration) *config.KubeSchedulerConfiguration { - versionedCfg.DebuggingConfiguration = *v1alpha1.NewRecommendedDebuggingConfiguration() - - scheme.Scheme.Default(&versionedCfg) - cfg := config.KubeSchedulerConfiguration{} - if err := scheme.Scheme.Convert(&versionedCfg, &cfg, nil); err != nil { - t.Fatal(err) - } - return &cfg -} - // V1beta2ToInternalWithDefaults creates a v1beta2 default configuration. func V1beta2ToInternalWithDefaults(t *testing.T, versionedCfg v1beta2.KubeSchedulerConfiguration) *config.KubeSchedulerConfiguration { versionedCfg.DebuggingConfiguration = *v1alpha1.NewRecommendedDebuggingConfiguration() diff --git a/pkg/scheduler/apis/config/v1beta1/conversion.go b/pkg/scheduler/apis/config/v1beta1/conversion.go deleted file mode 100644 index bca2ab56fedb..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/conversion.go +++ /dev/null @@ -1,199 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "fmt" - "sync" - - "k8s.io/apimachinery/pkg/conversion" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kube-scheduler/config/v1beta1" - "k8s.io/kubernetes/pkg/scheduler/apis/config" -) - -var ( - // pluginArgConversionScheme is a scheme with internal and v1beta1 registered, - // used for defaulting/converting typed PluginConfig Args. - // Access via getPluginArgConversionScheme() - pluginArgConversionScheme *runtime.Scheme - initPluginArgConversionScheme sync.Once -) - -func getPluginArgConversionScheme() *runtime.Scheme { - initPluginArgConversionScheme.Do(func() { - // set up the scheme used for plugin arg conversion - pluginArgConversionScheme = runtime.NewScheme() - utilruntime.Must(AddToScheme(pluginArgConversionScheme)) - utilruntime.Must(config.AddToScheme(pluginArgConversionScheme)) - }) - return pluginArgConversionScheme -} - -func Convert_v1beta1_Plugins_To_config_Plugins(in *v1beta1.Plugins, out *config.Plugins, s conversion.Scope) error { - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.QueueSort, &out.QueueSort, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.PreFilter, &out.PreFilter, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.Filter, &out.Filter, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.PostFilter, &out.PostFilter, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.PreScore, &out.PreScore, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.Score, &out.Score, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.Reserve, &out.Reserve, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.Permit, &out.Permit, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.PreBind, &out.PreBind, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.Bind, &out.Bind, s); err != nil { - return err - } - if err := Convert_v1beta1_PluginSet_To_config_PluginSet(in.PostBind, &out.PostBind, s); err != nil { - return err - } - return nil -} - -func Convert_v1beta1_PluginSet_To_config_PluginSet(in *v1beta1.PluginSet, out *config.PluginSet, s conversion.Scope) error { - if in == nil { - return nil - } - return autoConvert_v1beta1_PluginSet_To_config_PluginSet(in, out, s) -} - -func Convert_config_Plugins_To_v1beta1_Plugins(in *config.Plugins, out *v1beta1.Plugins, s conversion.Scope) error { - out.QueueSort = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.QueueSort, out.QueueSort, s); err != nil { - return err - } - out.PreFilter = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.PreFilter, out.PreFilter, s); err != nil { - return err - } - out.Filter = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.Filter, out.Filter, s); err != nil { - return err - } - out.PostFilter = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.PostFilter, out.PostFilter, s); err != nil { - return err - } - out.PreScore = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.PreScore, out.PreScore, s); err != nil { - return err - } - out.Score = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.Score, out.Score, s); err != nil { - return err - } - out.Reserve = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.Reserve, out.Reserve, s); err != nil { - return err - } - out.Permit = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.Permit, out.Permit, s); err != nil { - return err - } - out.PreBind = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.PreBind, out.PreBind, s); err != nil { - return err - } - out.Bind = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.Bind, out.Bind, s); err != nil { - return err - } - out.PostBind = new(v1beta1.PluginSet) - if err := Convert_config_PluginSet_To_v1beta1_PluginSet(&in.PostBind, out.PostBind, s); err != nil { - return err - } - return nil -} - -func Convert_v1beta1_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta1.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := autoConvert_v1beta1_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in, out, s); err != nil { - return err - } - return convertToInternalPluginConfigArgs(out) -} - -// convertToInternalPluginConfigArgs converts PluginConfig#Args into internal -// types using a scheme, after applying defaults. -func convertToInternalPluginConfigArgs(out *config.KubeSchedulerConfiguration) error { - scheme := getPluginArgConversionScheme() - for i := range out.Profiles { - prof := &out.Profiles[i] - for j := range prof.PluginConfig { - args := prof.PluginConfig[j].Args - if args == nil { - continue - } - if _, isUnknown := args.(*runtime.Unknown); isUnknown { - continue - } - internalArgs, err := scheme.ConvertToVersion(args, config.SchemeGroupVersion) - if err != nil { - return fmt.Errorf("converting .Profiles[%d].PluginConfig[%d].Args into internal type: %w", i, j, err) - } - prof.PluginConfig[j].Args = internalArgs - } - } - return nil -} - -func Convert_config_KubeSchedulerConfiguration_To_v1beta1_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta1.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := autoConvert_config_KubeSchedulerConfiguration_To_v1beta1_KubeSchedulerConfiguration(in, out, s); err != nil { - return err - } - return convertToExternalPluginConfigArgs(out) -} - -// convertToExternalPluginConfigArgs converts PluginConfig#Args into -// external (versioned) types using a scheme. -func convertToExternalPluginConfigArgs(out *v1beta1.KubeSchedulerConfiguration) error { - scheme := getPluginArgConversionScheme() - for i := range out.Profiles { - for j := range out.Profiles[i].PluginConfig { - args := out.Profiles[i].PluginConfig[j].Args - if args.Object == nil { - continue - } - if _, isUnknown := args.Object.(*runtime.Unknown); isUnknown { - continue - } - externalArgs, err := scheme.ConvertToVersion(args.Object, SchemeGroupVersion) - if err != nil { - return err - } - out.Profiles[i].PluginConfig[j].Args.Object = externalArgs - } - } - return nil -} diff --git a/pkg/scheduler/apis/config/v1beta1/default_plugins.go b/pkg/scheduler/apis/config/v1beta1/default_plugins.go deleted file mode 100644 index 9813720202b7..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/default_plugins.go +++ /dev/null @@ -1,180 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "k8s.io/apimachinery/pkg/util/sets" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/klog/v2" - "k8s.io/kube-scheduler/config/v1beta1" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" - "k8s.io/utils/pointer" -) - -// getDefaultPlugins returns the default set of plugins. -func getDefaultPlugins() *v1beta1.Plugins { - plugins := &v1beta1.Plugins{ - QueueSort: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.PrioritySort}, - }, - }, - PreFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesFit}, - {Name: names.NodePorts}, - {Name: names.VolumeRestrictions}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - {Name: names.VolumeBinding}, - {Name: names.NodeAffinity}, - }, - }, - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - }, - }, - PostFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultPreemption}, - }, - }, - PreScore: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.InterPodAffinity}, - {Name: names.PodTopologySpread}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - }, - }, - Score: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeResourcesLeastAllocated, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodePreferAvoidPods, Weight: pointer.Int32Ptr(10000)}, - // Weight is doubled because: - // - This is a score coming from user preference. - // - It makes its signal comparable to NodeResourcesLeastAllocated. - {Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)}, - {Name: names.TaintToleration, Weight: pointer.Int32Ptr(1)}, - }, - }, - Reserve: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - PreBind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - Bind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultBinder}, - }, - }, - } - applyFeatureGates(plugins) - - return plugins -} - -func applyFeatureGates(config *v1beta1.Plugins) { - if utilfeature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) { - config.Score.Enabled = append(config.Score.Enabled, v1beta1.Plugin{Name: names.VolumeBinding, Weight: pointer.Int32Ptr(1)}) - } - - if !utilfeature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - // When feature is enabled, the default spreading is done by - // PodTopologySpread plugin, which is enabled by default. - klog.InfoS("Registering SelectorSpread plugin") - s := v1beta1.Plugin{Name: names.SelectorSpread} - config.PreScore.Enabled = append(config.PreScore.Enabled, s) - s.Weight = pointer.Int32Ptr(1) - config.Score.Enabled = append(config.Score.Enabled, s) - } -} - -// mergePlugins merges the custom set into the given default one, handling disabled sets. -func mergePlugins(defaultPlugins, customPlugins *v1beta1.Plugins) *v1beta1.Plugins { - if customPlugins == nil { - return defaultPlugins - } - - defaultPlugins.QueueSort = mergePluginSet(defaultPlugins.QueueSort, customPlugins.QueueSort) - defaultPlugins.PreFilter = mergePluginSet(defaultPlugins.PreFilter, customPlugins.PreFilter) - defaultPlugins.Filter = mergePluginSet(defaultPlugins.Filter, customPlugins.Filter) - defaultPlugins.PostFilter = mergePluginSet(defaultPlugins.PostFilter, customPlugins.PostFilter) - defaultPlugins.PreScore = mergePluginSet(defaultPlugins.PreScore, customPlugins.PreScore) - defaultPlugins.Score = mergePluginSet(defaultPlugins.Score, customPlugins.Score) - defaultPlugins.Reserve = mergePluginSet(defaultPlugins.Reserve, customPlugins.Reserve) - defaultPlugins.Permit = mergePluginSet(defaultPlugins.Permit, customPlugins.Permit) - defaultPlugins.PreBind = mergePluginSet(defaultPlugins.PreBind, customPlugins.PreBind) - defaultPlugins.Bind = mergePluginSet(defaultPlugins.Bind, customPlugins.Bind) - defaultPlugins.PostBind = mergePluginSet(defaultPlugins.PostBind, customPlugins.PostBind) - return defaultPlugins -} - -func mergePluginSet(defaultPluginSet, customPluginSet *v1beta1.PluginSet) *v1beta1.PluginSet { - disabledPlugins := sets.NewString() - if customPluginSet != nil { - for _, disabledPlugin := range customPluginSet.Disabled { - disabledPlugins.Insert(disabledPlugin.Name) - } - } - - var enabledPlugins []v1beta1.Plugin - if defaultPluginSet != nil && !disabledPlugins.Has("*") { - for _, defaultEnabledPlugin := range defaultPluginSet.Enabled { - if disabledPlugins.Has(defaultEnabledPlugin.Name) { - continue - } - - enabledPlugins = append(enabledPlugins, defaultEnabledPlugin) - } - } - - if customPluginSet != nil { - enabledPlugins = append(enabledPlugins, customPluginSet.Enabled...) - } - - if len(enabledPlugins) == 0 { - return nil - } - - return &v1beta1.PluginSet{Enabled: enabledPlugins} -} diff --git a/pkg/scheduler/apis/config/v1beta1/default_plugins_test.go b/pkg/scheduler/apis/config/v1beta1/default_plugins_test.go deleted file mode 100644 index 10932ffd0565..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/default_plugins_test.go +++ /dev/null @@ -1,376 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "testing" - - "github.com/google/go-cmp/cmp" - "k8s.io/apiserver/pkg/util/feature" - "k8s.io/component-base/featuregate" - featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kube-scheduler/config/v1beta1" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" - "k8s.io/utils/pointer" -) - -func TestApplyFeatureGates(t *testing.T) { - tests := []struct { - name string - features map[featuregate.Feature]bool - wantConfig *v1beta1.Plugins - }{ - { - name: "Feature gates disabled", - wantConfig: &v1beta1.Plugins{ - QueueSort: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.PrioritySort}, - }, - }, - PreFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesFit}, - {Name: names.NodePorts}, - {Name: names.VolumeRestrictions}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - {Name: names.VolumeBinding}, - {Name: names.NodeAffinity}, - }, - }, - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - }, - }, - PostFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultPreemption}, - }, - }, - PreScore: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.InterPodAffinity}, - {Name: names.PodTopologySpread}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - }, - }, - Score: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeResourcesLeastAllocated, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodePreferAvoidPods, Weight: pointer.Int32Ptr(10000)}, - {Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)}, - {Name: names.TaintToleration, Weight: pointer.Int32Ptr(1)}, - }, - }, - Reserve: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - PreBind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - Bind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultBinder}, - }, - }, - }, - }, - { - name: "DefaultPodTopologySpread disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - wantConfig: &v1beta1.Plugins{ - QueueSort: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.PrioritySort}, - }, - }, - PreFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesFit}, - {Name: names.NodePorts}, - {Name: names.VolumeRestrictions}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - {Name: names.VolumeBinding}, - {Name: names.NodeAffinity}, - }, - }, - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - }, - }, - PostFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultPreemption}, - }, - }, - PreScore: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.InterPodAffinity}, - {Name: names.PodTopologySpread}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.SelectorSpread}, - }, - }, - Score: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeResourcesLeastAllocated, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodePreferAvoidPods, Weight: pointer.Int32Ptr(10000)}, - {Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)}, - {Name: names.TaintToleration, Weight: pointer.Int32Ptr(1)}, - {Name: names.SelectorSpread, Weight: pointer.Int32Ptr(1)}, - }, - }, - Reserve: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - PreBind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - Bind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultBinder}, - }, - }, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - for k, v := range test.features { - defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, k, v)() - } - - gotConfig := getDefaultPlugins() - if diff := cmp.Diff(test.wantConfig, gotConfig); diff != "" { - t.Errorf("unexpected config diff (-want, +got): %s", diff) - } - }) - } -} - -func TestMergePlugins(t *testing.T) { - tests := []struct { - name string - customPlugins *v1beta1.Plugins - defaultPlugins *v1beta1.Plugins - expectedPlugins *v1beta1.Plugins - }{ - { - name: "AppendCustomPlugin", - customPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "CustomPlugin"}, - }, - }, - }, - defaultPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - expectedPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - {Name: "CustomPlugin"}, - }, - }, - }, - }, - { - name: "InsertAfterDefaultPlugins2", - customPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "CustomPlugin"}, - {Name: "DefaultPlugin2"}, - }, - Disabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin2"}, - }, - }, - }, - defaultPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - expectedPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "CustomPlugin"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - }, - { - name: "InsertBeforeAllPlugins", - customPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "CustomPlugin"}, - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - Disabled: []v1beta1.Plugin{ - {Name: "*"}, - }, - }, - }, - defaultPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - expectedPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "CustomPlugin"}, - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - }, - { - name: "ReorderDefaultPlugins", - customPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin2"}, - {Name: "DefaultPlugin1"}, - }, - Disabled: []v1beta1.Plugin{ - {Name: "*"}, - }, - }, - }, - defaultPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - expectedPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin2"}, - {Name: "DefaultPlugin1"}, - }, - }, - }, - }, - { - name: "ApplyNilCustomPlugin", - customPlugins: nil, - defaultPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - expectedPlugins: &v1beta1.Plugins{ - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "DefaultPlugin1"}, - {Name: "DefaultPlugin2"}, - }, - }, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - test.defaultPlugins = mergePlugins(test.defaultPlugins, test.customPlugins) - if d := cmp.Diff(test.expectedPlugins, test.defaultPlugins); d != "" { - t.Fatalf("plugins mismatch (-want +got):\n%s", d) - } - }) - } -} diff --git a/pkg/scheduler/apis/config/v1beta1/defaults.go b/pkg/scheduler/apis/config/v1beta1/defaults.go deleted file mode 100644 index bf0719b27018..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/defaults.go +++ /dev/null @@ -1,291 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/util/feature" - componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" - "k8s.io/kube-scheduler/config/v1beta1" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/utils/pointer" -) - -var defaultResourceSpec = []v1beta1.ResourceSpec{ - {Name: string(corev1.ResourceCPU), Weight: 1}, - {Name: string(corev1.ResourceMemory), Weight: 1}, -} - -func addDefaultingFuncs(scheme *runtime.Scheme) error { - return RegisterDefaults(scheme) -} - -func pluginsNames(p *v1beta1.Plugins) []string { - if p == nil { - return nil - } - extensions := []*v1beta1.PluginSet{ - p.PreFilter, - p.Filter, - p.PostFilter, - p.Reserve, - p.PreScore, - p.Score, - p.PreBind, - p.Bind, - p.PostBind, - p.Permit, - p.QueueSort, - } - n := sets.NewString() - for _, e := range extensions { - if e != nil { - for _, pg := range e.Enabled { - n.Insert(pg.Name) - } - } - } - return n.List() -} - -func setDefaults_KubeSchedulerProfile(prof *v1beta1.KubeSchedulerProfile) { - // Set default plugins. - prof.Plugins = mergePlugins(getDefaultPlugins(), prof.Plugins) - - // Set default plugin configs. - scheme := getPluginArgConversionScheme() - existingConfigs := sets.NewString() - for j := range prof.PluginConfig { - existingConfigs.Insert(prof.PluginConfig[j].Name) - args := prof.PluginConfig[j].Args.Object - if _, isUnknown := args.(*runtime.Unknown); isUnknown { - continue - } - scheme.Default(args) - } - - // Append default configs for plugins that didn't have one explicitly set. - for _, name := range pluginsNames(prof.Plugins) { - if existingConfigs.Has(name) { - continue - } - gvk := v1beta1.SchemeGroupVersion.WithKind(name + "Args") - args, err := scheme.New(gvk) - if err != nil { - // This plugin is out-of-tree or doesn't require configuration. - continue - } - scheme.Default(args) - args.GetObjectKind().SetGroupVersionKind(gvk) - prof.PluginConfig = append(prof.PluginConfig, v1beta1.PluginConfig{ - Name: name, - Args: runtime.RawExtension{Object: args}, - }) - } -} - -// SetDefaults_KubeSchedulerConfiguration sets additional defaults -func SetDefaults_KubeSchedulerConfiguration(obj *v1beta1.KubeSchedulerConfiguration) { - if obj.Parallelism == nil { - obj.Parallelism = pointer.Int32Ptr(16) - } - - if len(obj.Profiles) == 0 { - obj.Profiles = append(obj.Profiles, v1beta1.KubeSchedulerProfile{}) - } - // Only apply a default scheduler name when there is a single profile. - // Validation will ensure that every profile has a non-empty unique name. - if len(obj.Profiles) == 1 && obj.Profiles[0].SchedulerName == nil { - obj.Profiles[0].SchedulerName = pointer.StringPtr(corev1.DefaultSchedulerName) - } - - // Add the default set of plugins and apply the configuration. - for i := range obj.Profiles { - prof := &obj.Profiles[i] - setDefaults_KubeSchedulerProfile(prof) - } - - if obj.PercentageOfNodesToScore == nil { - percentageOfNodesToScore := int32(config.DefaultPercentageOfNodesToScore) - obj.PercentageOfNodesToScore = &percentageOfNodesToScore - } - - if len(obj.LeaderElection.ResourceLock) == 0 { - // Use lease-based leader election to reduce cost. - // We migrated for EndpointsLease lock in 1.17 and starting in 1.20 we - // migrated to Lease lock. - obj.LeaderElection.ResourceLock = "leases" - } - if len(obj.LeaderElection.ResourceNamespace) == 0 { - obj.LeaderElection.ResourceNamespace = v1beta1.SchedulerDefaultLockObjectNamespace - } - if len(obj.LeaderElection.ResourceName) == 0 { - obj.LeaderElection.ResourceName = v1beta1.SchedulerDefaultLockObjectName - } - - if len(obj.ClientConnection.ContentType) == 0 { - obj.ClientConnection.ContentType = "application/vnd.kubernetes.protobuf" - } - // Scheduler has an opinion about QPS/Burst, setting specific defaults for itself, instead of generic settings. - if obj.ClientConnection.QPS == 0.0 { - obj.ClientConnection.QPS = 50.0 - } - if obj.ClientConnection.Burst == 0 { - obj.ClientConnection.Burst = 100 - } - - // Use the default LeaderElectionConfiguration options - componentbaseconfigv1alpha1.RecommendedDefaultLeaderElectionConfiguration(&obj.LeaderElection) - - if obj.PodInitialBackoffSeconds == nil { - val := int64(1) - obj.PodInitialBackoffSeconds = &val - } - - if obj.PodMaxBackoffSeconds == nil { - val := int64(10) - obj.PodMaxBackoffSeconds = &val - } - - // Enable profiling by default in the scheduler - if obj.EnableProfiling == nil { - enableProfiling := true - obj.EnableProfiling = &enableProfiling - } - - // Enable contention profiling by default if profiling is enabled - if *obj.EnableProfiling && obj.EnableContentionProfiling == nil { - enableContentionProfiling := true - obj.EnableContentionProfiling = &enableContentionProfiling - } -} - -func SetDefaults_DefaultPreemptionArgs(obj *v1beta1.DefaultPreemptionArgs) { - if obj.MinCandidateNodesPercentage == nil { - obj.MinCandidateNodesPercentage = pointer.Int32Ptr(10) - } - if obj.MinCandidateNodesAbsolute == nil { - obj.MinCandidateNodesAbsolute = pointer.Int32Ptr(100) - } -} - -func SetDefaults_InterPodAffinityArgs(obj *v1beta1.InterPodAffinityArgs) { - // Note that an object is created manually in cmd/kube-scheduler/app/options/deprecated.go - // DeprecatedOptions#ApplyTo. - // Update that object if a new default field is added here. - if obj.HardPodAffinityWeight == nil { - obj.HardPodAffinityWeight = pointer.Int32Ptr(1) - } -} - -func SetDefaults_NodeResourcesLeastAllocatedArgs(obj *v1beta1.NodeResourcesLeastAllocatedArgs) { - if len(obj.Resources) == 0 { - // If no resources specified, used the default set. - obj.Resources = append(obj.Resources, defaultResourceSpec...) - } -} - -func SetDefaults_NodeResourcesMostAllocatedArgs(obj *v1beta1.NodeResourcesMostAllocatedArgs) { - if len(obj.Resources) == 0 { - // If no resources specified, used the default set. - obj.Resources = append(obj.Resources, defaultResourceSpec...) - } -} - -func SetDefaults_RequestedToCapacityRatioArgs(obj *v1beta1.RequestedToCapacityRatioArgs) { - if len(obj.Resources) == 0 { - // If no resources specified, used the default set. - obj.Resources = append(obj.Resources, defaultResourceSpec...) - } - - // If resource weight is 0, use default weight(1) instead. - for i := range obj.Resources { - if obj.Resources[i].Weight == 0 { - obj.Resources[i].Weight = 1 - } - } -} - -func SetDefaults_VolumeBindingArgs(obj *v1beta1.VolumeBindingArgs) { - if obj.BindTimeoutSeconds == nil { - obj.BindTimeoutSeconds = pointer.Int64Ptr(600) - } - if len(obj.Shape) == 0 && feature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) { - obj.Shape = []v1beta1.UtilizationShapePoint{ - { - Utilization: 0, - Score: 0, - }, - { - Utilization: 100, - Score: int32(config.MaxCustomPriorityScore), - }, - } - } -} - -func SetDefaults_NodeResourcesBalancedAllocationArgs(obj *v1beta1.NodeResourcesBalancedAllocationArgs) { - if len(obj.Resources) == 0 { - obj.Resources = append(obj.Resources, - v1beta1.ResourceSpec{Name: string(corev1.ResourceCPU), Weight: 1}, - v1beta1.ResourceSpec{Name: string(corev1.ResourceMemory), Weight: 1}, - ) - } - // If the weight is not set or it is explicitly set to 0, then apply the default weight(1) instead. - for i := range obj.Resources { - if obj.Resources[i].Weight == 0 { - obj.Resources[i].Weight = 1 - } - } -} - -func SetDefaults_PodTopologySpreadArgs(obj *v1beta1.PodTopologySpreadArgs) { - if feature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - if obj.DefaultingType == "" { - if len(obj.DefaultConstraints) != 0 { - obj.DefaultingType = v1beta1.ListDefaulting - } else { - obj.DefaultingType = v1beta1.SystemDefaulting - } - } - return - } - if obj.DefaultingType == "" { - obj.DefaultingType = v1beta1.ListDefaulting - } -} - -func SetDefaults_NodeResourcesFitArgs(obj *v1beta1.NodeResourcesFitArgs) { - if obj.ScoringStrategy == nil { - obj.ScoringStrategy = &v1beta1.ScoringStrategy{ - Type: v1beta1.ScoringStrategyType(config.LeastAllocated), - Resources: defaultResourceSpec, - } - } - if len(obj.ScoringStrategy.Resources) == 0 { - // If no resources specified, use the default set. - obj.ScoringStrategy.Resources = append(obj.ScoringStrategy.Resources, defaultResourceSpec...) - } - for i := range obj.ScoringStrategy.Resources { - if obj.ScoringStrategy.Resources[i].Weight == 0 { - obj.ScoringStrategy.Resources[i].Weight = 1 - } - } -} diff --git a/pkg/scheduler/apis/config/v1beta1/defaults_test.go b/pkg/scheduler/apis/config/v1beta1/defaults_test.go deleted file mode 100644 index f5147c2d9c78..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/defaults_test.go +++ /dev/null @@ -1,727 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "testing" - "time" - - "github.com/google/go-cmp/cmp" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/util/feature" - componentbaseconfig "k8s.io/component-base/config/v1alpha1" - "k8s.io/component-base/featuregate" - featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kube-scheduler/config/v1beta1" - "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" - "k8s.io/utils/pointer" -) - -var pluginConfigs = []v1beta1.PluginConfig{ - { - Name: "DefaultPreemption", - Args: runtime.RawExtension{ - Object: &v1beta1.DefaultPreemptionArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "DefaultPreemptionArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - MinCandidateNodesPercentage: pointer.Int32Ptr(10), - MinCandidateNodesAbsolute: pointer.Int32Ptr(100), - }}, - }, - { - Name: "InterPodAffinity", - Args: runtime.RawExtension{ - Object: &v1beta1.InterPodAffinityArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "InterPodAffinityArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - HardPodAffinityWeight: pointer.Int32Ptr(1), - }}, - }, - { - Name: "NodeAffinity", - Args: runtime.RawExtension{Object: &v1beta1.NodeAffinityArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeAffinityArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - }}, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesBalancedAllocationArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesBalancedAllocationArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }}, - }, - { - Name: "NodeResourcesFit", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesFitArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesFitArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - ScoringStrategy: &v1beta1.ScoringStrategy{ - Type: v1beta1.LeastAllocated, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }}, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesLeastAllocatedArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesLeastAllocatedArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }}, - }, - { - Name: "PodTopologySpread", - Args: runtime.RawExtension{Object: &v1beta1.PodTopologySpreadArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "PodTopologySpreadArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - DefaultingType: v1beta1.SystemDefaulting, - }}, - }, - { - Name: "VolumeBinding", - Args: runtime.RawExtension{Object: &v1beta1.VolumeBindingArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "VolumeBindingArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - BindTimeoutSeconds: pointer.Int64Ptr(600), - }}, - }, -} - -func TestSchedulerDefaults(t *testing.T) { - enable := true - tests := []struct { - name string - config *v1beta1.KubeSchedulerConfiguration - expected *v1beta1.KubeSchedulerConfiguration - }{ - { - name: "empty config", - config: &v1beta1.KubeSchedulerConfiguration{}, - expected: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(16), - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: &enable, - EnableContentionProfiling: &enable, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: pointer.BoolPtr(true), - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: pointer.Int32Ptr(0), - PodInitialBackoffSeconds: pointer.Int64Ptr(1), - PodMaxBackoffSeconds: pointer.Int64Ptr(10), - Profiles: []v1beta1.KubeSchedulerProfile{ - { - SchedulerName: pointer.StringPtr("default-scheduler"), - Plugins: getDefaultPlugins(), - PluginConfig: pluginConfigs, - }, - }, - }, - }, - { - name: "no scheduler name", - config: &v1beta1.KubeSchedulerConfiguration{ - Profiles: []v1beta1.KubeSchedulerProfile{{}}, - }, - expected: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(16), - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: &enable, - EnableContentionProfiling: &enable, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: pointer.BoolPtr(true), - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: pointer.Int32Ptr(0), - PodInitialBackoffSeconds: pointer.Int64Ptr(1), - PodMaxBackoffSeconds: pointer.Int64Ptr(10), - Profiles: []v1beta1.KubeSchedulerProfile{ - { - SchedulerName: pointer.StringPtr("default-scheduler"), - Plugins: getDefaultPlugins(), - PluginConfig: pluginConfigs, - }, - }, - }, - }, - { - name: "two profiles", - config: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(16), - Profiles: []v1beta1.KubeSchedulerProfile{ - { - PluginConfig: []v1beta1.PluginConfig{ - {Name: "FooPlugin"}, - }, - }, - { - SchedulerName: pointer.StringPtr("custom-scheduler"), - Plugins: &v1beta1.Plugins{ - Bind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: "BarPlugin"}, - }, - }, - }, - }, - }, - }, - expected: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(16), - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: &enable, - EnableContentionProfiling: &enable, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: pointer.BoolPtr(true), - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: pointer.Int32Ptr(0), - PodInitialBackoffSeconds: pointer.Int64Ptr(1), - PodMaxBackoffSeconds: pointer.Int64Ptr(10), - Profiles: []v1beta1.KubeSchedulerProfile{ - { - Plugins: getDefaultPlugins(), - PluginConfig: []v1beta1.PluginConfig{ - {Name: "FooPlugin"}, - { - Name: "DefaultPreemption", - Args: runtime.RawExtension{ - Object: &v1beta1.DefaultPreemptionArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "DefaultPreemptionArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - MinCandidateNodesPercentage: pointer.Int32Ptr(10), - MinCandidateNodesAbsolute: pointer.Int32Ptr(100), - }}, - }, - { - Name: "InterPodAffinity", - Args: runtime.RawExtension{ - Object: &v1beta1.InterPodAffinityArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "InterPodAffinityArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - HardPodAffinityWeight: pointer.Int32Ptr(1), - }}, - }, - { - Name: "NodeAffinity", - Args: runtime.RawExtension{Object: &v1beta1.NodeAffinityArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeAffinityArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - }}, - }, - { - Name: "NodeResourcesBalancedAllocation", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesBalancedAllocationArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesBalancedAllocationArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }}, - }, - { - Name: "NodeResourcesFit", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesFitArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesFitArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - ScoringStrategy: &v1beta1.ScoringStrategy{ - Type: v1beta1.LeastAllocated, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }, - }}, - }, - { - Name: "NodeResourcesLeastAllocated", - Args: runtime.RawExtension{Object: &v1beta1.NodeResourcesLeastAllocatedArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "NodeResourcesLeastAllocatedArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - Resources: []v1beta1.ResourceSpec{{Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}}, - }}, - }, - { - Name: "PodTopologySpread", - Args: runtime.RawExtension{Object: &v1beta1.PodTopologySpreadArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "PodTopologySpreadArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - DefaultingType: v1beta1.SystemDefaulting, - }}, - }, - { - Name: "VolumeBinding", - Args: runtime.RawExtension{Object: &v1beta1.VolumeBindingArgs{ - TypeMeta: metav1.TypeMeta{ - Kind: "VolumeBindingArgs", - APIVersion: "kubescheduler.config.k8s.io/v1beta1", - }, - BindTimeoutSeconds: pointer.Int64Ptr(600), - }}, - }, - }, - }, - { - SchedulerName: pointer.StringPtr("custom-scheduler"), - Plugins: &v1beta1.Plugins{ - QueueSort: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.PrioritySort}, - }, - }, - PreFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesFit}, - {Name: names.NodePorts}, - {Name: names.VolumeRestrictions}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - {Name: names.VolumeBinding}, - {Name: names.NodeAffinity}, - }, - }, - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - }, - }, - PostFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultPreemption}, - }, - }, - PreScore: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.InterPodAffinity}, - {Name: names.PodTopologySpread}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - }, - }, - Score: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeResourcesLeastAllocated, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodePreferAvoidPods, Weight: pointer.Int32Ptr(10000)}, - {Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)}, - {Name: names.TaintToleration, Weight: pointer.Int32Ptr(1)}, - }, - }, - Reserve: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - PreBind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - Bind: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: names.DefaultBinder}, - {Name: "BarPlugin"}, - }, - }, - }, - PluginConfig: pluginConfigs, - }, - }, - }, - }, - { - name: "set non default parallelism", - config: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(8), - }, - expected: &v1beta1.KubeSchedulerConfiguration{ - Parallelism: pointer.Int32Ptr(8), - DebuggingConfiguration: componentbaseconfig.DebuggingConfiguration{ - EnableProfiling: &enable, - EnableContentionProfiling: &enable, - }, - LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - LeaderElect: pointer.BoolPtr(true), - LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, - RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, - RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "leases", - ResourceNamespace: "kube-system", - ResourceName: "kube-scheduler", - }, - ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ - QPS: 50, - Burst: 100, - ContentType: "application/vnd.kubernetes.protobuf", - }, - PercentageOfNodesToScore: pointer.Int32Ptr(0), - PodInitialBackoffSeconds: pointer.Int64Ptr(1), - PodMaxBackoffSeconds: pointer.Int64Ptr(10), - Profiles: []v1beta1.KubeSchedulerProfile{ - { - SchedulerName: pointer.StringPtr("default-scheduler"), - Plugins: getDefaultPlugins(), - PluginConfig: pluginConfigs, - }, - }, - }, - }, - } - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - SetDefaults_KubeSchedulerConfiguration(tc.config) - if diff := cmp.Diff(tc.expected, tc.config); diff != "" { - t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff) - } - }) - } -} - -func TestPluginArgsDefaults(t *testing.T) { - tests := []struct { - name string - features map[featuregate.Feature]bool - in runtime.Object - want runtime.Object - }{ - { - name: "DefaultPreemptionArgs empty", - in: &v1beta1.DefaultPreemptionArgs{}, - want: &v1beta1.DefaultPreemptionArgs{ - MinCandidateNodesPercentage: pointer.Int32Ptr(10), - MinCandidateNodesAbsolute: pointer.Int32Ptr(100), - }, - }, - { - name: "DefaultPreemptionArgs with value", - in: &v1beta1.DefaultPreemptionArgs{ - MinCandidateNodesPercentage: pointer.Int32Ptr(50), - }, - want: &v1beta1.DefaultPreemptionArgs{ - MinCandidateNodesPercentage: pointer.Int32Ptr(50), - MinCandidateNodesAbsolute: pointer.Int32Ptr(100), - }, - }, - { - name: "InterPodAffinityArgs empty", - in: &v1beta1.InterPodAffinityArgs{}, - want: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(1), - }, - }, - { - name: "InterPodAffinityArgs explicit 0", - in: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(0), - }, - want: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(0), - }, - }, - { - name: "InterPodAffinityArgs with value", - in: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(5), - }, - want: &v1beta1.InterPodAffinityArgs{ - HardPodAffinityWeight: pointer.Int32Ptr(5), - }, - }, - { - name: "NodeResourcesLeastAllocatedArgs resources empty", - in: &v1beta1.NodeResourcesLeastAllocatedArgs{}, - want: &v1beta1.NodeResourcesLeastAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "cpu", Weight: 1}, - {Name: "memory", Weight: 1}, - }, - }, - }, - { - name: "NodeResourcesLeastAllocatedArgs resources with value", - in: &v1beta1.NodeResourcesLeastAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "resource", Weight: 2}, - }, - }, - want: &v1beta1.NodeResourcesLeastAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "resource", Weight: 2}, - }, - }, - }, - { - name: "NodeResourcesMostAllocatedArgs resources empty", - in: &v1beta1.NodeResourcesMostAllocatedArgs{}, - want: &v1beta1.NodeResourcesMostAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "cpu", Weight: 1}, - {Name: "memory", Weight: 1}, - }, - }, - }, - { - name: "NodeResourcesMostAllocatedArgs resources with value", - in: &v1beta1.NodeResourcesMostAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "resource", Weight: 2}, - }, - }, - want: &v1beta1.NodeResourcesMostAllocatedArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "resource", Weight: 2}, - }, - }, - }, - { - name: "NodeResourcesBalancedAllocationArgs resources empty", - in: &v1beta1.NodeResourcesBalancedAllocationArgs{}, - want: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "cpu", Weight: 1}, {Name: "memory", Weight: 1}, - }, - }, - }, - { - name: "NodeResourcesBalancedAllocationArgs with scalar resource", - in: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - want: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - }, - { - name: "NodeResourcesBalancedAllocationArgs with mixed resources", - in: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: string(v1.ResourceCPU), Weight: 1}, - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - want: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: string(v1.ResourceCPU), Weight: 1}, - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - }, - { - name: "NodeResourcesBalancedAllocationArgs have resource no weight", - in: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: string(v1.ResourceCPU)}, - {Name: "scalar.io/scalar0"}, - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - want: &v1beta1.NodeResourcesBalancedAllocationArgs{ - Resources: []v1beta1.ResourceSpec{ - {Name: string(v1.ResourceCPU), Weight: 1}, - {Name: "scalar.io/scalar0", Weight: 1}, - {Name: "scalar.io/scalar1", Weight: 1}, - }, - }, - }, - { - name: "PodTopologySpreadArgs resources empty", - in: &v1beta1.PodTopologySpreadArgs{}, - want: &v1beta1.PodTopologySpreadArgs{ - DefaultingType: v1beta1.SystemDefaulting, - }, - }, - { - name: "PodTopologySpreadArgs resources with value", - in: &v1beta1.PodTopologySpreadArgs{ - DefaultConstraints: []v1.TopologySpreadConstraint{ - { - TopologyKey: "planet", - WhenUnsatisfiable: v1.DoNotSchedule, - MaxSkew: 2, - }, - }, - }, - want: &v1beta1.PodTopologySpreadArgs{ - DefaultConstraints: []v1.TopologySpreadConstraint{ - { - TopologyKey: "planet", - WhenUnsatisfiable: v1.DoNotSchedule, - MaxSkew: 2, - }, - }, - // TODO(#94008): Make SystemDefaulting in v1beta2. - DefaultingType: v1beta1.ListDefaulting, - }, - }, - { - name: "PodTopologySpreadArgs empty, DefaultPodTopologySpread feature disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - in: &v1beta1.PodTopologySpreadArgs{}, - want: &v1beta1.PodTopologySpreadArgs{ - DefaultingType: v1beta1.ListDefaulting, - }, - }, - { - name: "NodeResourcesFitArgs not set", - in: &v1beta1.NodeResourcesFitArgs{}, - want: &v1beta1.NodeResourcesFitArgs{ - ScoringStrategy: &v1beta1.ScoringStrategy{ - Type: v1beta1.LeastAllocated, - Resources: defaultResourceSpec, - }, - }, - }, - { - name: "NodeResourcesFitArgs Resources empty", - in: &v1beta1.NodeResourcesFitArgs{ - ScoringStrategy: &v1beta1.ScoringStrategy{ - Type: v1beta1.MostAllocated, - }, - }, - want: &v1beta1.NodeResourcesFitArgs{ - ScoringStrategy: &v1beta1.ScoringStrategy{ - Type: v1beta1.MostAllocated, - Resources: defaultResourceSpec, - }, - }, - }, - { - name: "VolumeBindingArgs empty, VolumeCapacityPriority disabled", - features: map[featuregate.Feature]bool{ - features.VolumeCapacityPriority: false, - }, - in: &v1beta1.VolumeBindingArgs{}, - want: &v1beta1.VolumeBindingArgs{ - BindTimeoutSeconds: pointer.Int64Ptr(600), - }, - }, - { - name: "VolumeBindingArgs empty, VolumeCapacityPriority enabled", - features: map[featuregate.Feature]bool{ - features.VolumeCapacityPriority: true, - }, - in: &v1beta1.VolumeBindingArgs{}, - want: &v1beta1.VolumeBindingArgs{ - BindTimeoutSeconds: pointer.Int64Ptr(600), - Shape: []v1beta1.UtilizationShapePoint{ - {Utilization: 0, Score: 0}, - {Utilization: 100, Score: 10}, - }, - }, - }, - } - for _, tc := range tests { - scheme := runtime.NewScheme() - utilruntime.Must(AddToScheme(scheme)) - t.Run(tc.name, func(t *testing.T) { - for k, v := range tc.features { - defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, k, v)() - } - scheme.Default(tc.in) - if diff := cmp.Diff(tc.in, tc.want); diff != "" { - t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff) - } - }) - } -} diff --git a/pkg/scheduler/apis/config/v1beta1/doc.go b/pkg/scheduler/apis/config/v1beta1/doc.go deleted file mode 100644 index ec6ae58b1328..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/doc.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:conversion-gen=k8s.io/kubernetes/pkg/scheduler/apis/config -// +k8s:conversion-gen-external-types=k8s.io/kube-scheduler/config/v1beta1 -// +k8s:defaulter-gen=TypeMeta -// +k8s:defaulter-gen-input=k8s.io/kube-scheduler/config/v1beta1 -// +groupName=kubescheduler.config.k8s.io - -package v1beta1 // import "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" diff --git a/pkg/scheduler/apis/config/v1beta1/register.go b/pkg/scheduler/apis/config/v1beta1/register.go deleted file mode 100644 index fa00e5e2a9c5..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/register.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "k8s.io/kube-scheduler/config/v1beta1" -) - -// GroupName is the group name used in this package -const GroupName = v1beta1.GroupName - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = v1beta1.SchemeGroupVersion - -var ( - // localSchemeBuilder extends the SchemeBuilder instance with the external types. In this package, - // defaulting and conversion init funcs are registered as well. - localSchemeBuilder = &v1beta1.SchemeBuilder - // AddToScheme is a global function that registers this API group & version to a scheme - AddToScheme = localSchemeBuilder.AddToScheme -) - -func init() { - // We only register manually written functions here. The registration of the - // generated functions takes place in the generated files. The separation - // makes the code compile even when the generated files are missing. - localSchemeBuilder.Register(addDefaultingFuncs) -} diff --git a/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go b/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go deleted file mode 100644 index 692a2cd42b95..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/zz_generated.conversion.go +++ /dev/null @@ -1,970 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by conversion-gen. DO NOT EDIT. - -package v1beta1 - -import ( - unsafe "unsafe" - - corev1 "k8s.io/api/core/v1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - conversion "k8s.io/apimachinery/pkg/conversion" - runtime "k8s.io/apimachinery/pkg/runtime" - v1alpha1 "k8s.io/component-base/config/v1alpha1" - configv1 "k8s.io/kube-scheduler/config/v1" - v1beta1 "k8s.io/kube-scheduler/config/v1beta1" - config "k8s.io/kubernetes/pkg/scheduler/apis/config" -) - -func init() { - localSchemeBuilder.Register(RegisterConversions) -} - -// RegisterConversions adds conversion functions to the given scheme. -// Public to allow building arbitrary schemes. -func RegisterConversions(s *runtime.Scheme) error { - if err := s.AddGeneratedConversionFunc((*v1beta1.DefaultPreemptionArgs)(nil), (*config.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(a.(*v1beta1.DefaultPreemptionArgs), b.(*config.DefaultPreemptionArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.DefaultPreemptionArgs)(nil), (*v1beta1.DefaultPreemptionArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_DefaultPreemptionArgs_To_v1beta1_DefaultPreemptionArgs(a.(*config.DefaultPreemptionArgs), b.(*v1beta1.DefaultPreemptionArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.Extender)(nil), (*config.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_Extender_To_config_Extender(a.(*v1beta1.Extender), b.(*config.Extender), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.Extender)(nil), (*v1beta1.Extender)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Extender_To_v1beta1_Extender(a.(*config.Extender), b.(*v1beta1.Extender), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.InterPodAffinityArgs)(nil), (*config.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_InterPodAffinityArgs_To_config_InterPodAffinityArgs(a.(*v1beta1.InterPodAffinityArgs), b.(*config.InterPodAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.InterPodAffinityArgs)(nil), (*v1beta1.InterPodAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_InterPodAffinityArgs_To_v1beta1_InterPodAffinityArgs(a.(*config.InterPodAffinityArgs), b.(*v1beta1.InterPodAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.KubeSchedulerProfile)(nil), (*config.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile(a.(*v1beta1.KubeSchedulerProfile), b.(*config.KubeSchedulerProfile), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.KubeSchedulerProfile)(nil), (*v1beta1.KubeSchedulerProfile)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile(a.(*config.KubeSchedulerProfile), b.(*v1beta1.KubeSchedulerProfile), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeAffinityArgs)(nil), (*config.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeAffinityArgs_To_config_NodeAffinityArgs(a.(*v1beta1.NodeAffinityArgs), b.(*config.NodeAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeAffinityArgs)(nil), (*v1beta1.NodeAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeAffinityArgs_To_v1beta1_NodeAffinityArgs(a.(*config.NodeAffinityArgs), b.(*v1beta1.NodeAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeLabelArgs)(nil), (*config.NodeLabelArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeLabelArgs_To_config_NodeLabelArgs(a.(*v1beta1.NodeLabelArgs), b.(*config.NodeLabelArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeLabelArgs)(nil), (*v1beta1.NodeLabelArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeLabelArgs_To_v1beta1_NodeLabelArgs(a.(*config.NodeLabelArgs), b.(*v1beta1.NodeLabelArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeResourcesBalancedAllocationArgs)(nil), (*config.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(a.(*v1beta1.NodeResourcesBalancedAllocationArgs), b.(*config.NodeResourcesBalancedAllocationArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesBalancedAllocationArgs)(nil), (*v1beta1.NodeResourcesBalancedAllocationArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta1_NodeResourcesBalancedAllocationArgs(a.(*config.NodeResourcesBalancedAllocationArgs), b.(*v1beta1.NodeResourcesBalancedAllocationArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeResourcesFitArgs)(nil), (*config.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(a.(*v1beta1.NodeResourcesFitArgs), b.(*config.NodeResourcesFitArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesFitArgs)(nil), (*v1beta1.NodeResourcesFitArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesFitArgs_To_v1beta1_NodeResourcesFitArgs(a.(*config.NodeResourcesFitArgs), b.(*v1beta1.NodeResourcesFitArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeResourcesLeastAllocatedArgs)(nil), (*config.NodeResourcesLeastAllocatedArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeResourcesLeastAllocatedArgs_To_config_NodeResourcesLeastAllocatedArgs(a.(*v1beta1.NodeResourcesLeastAllocatedArgs), b.(*config.NodeResourcesLeastAllocatedArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesLeastAllocatedArgs)(nil), (*v1beta1.NodeResourcesLeastAllocatedArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesLeastAllocatedArgs_To_v1beta1_NodeResourcesLeastAllocatedArgs(a.(*config.NodeResourcesLeastAllocatedArgs), b.(*v1beta1.NodeResourcesLeastAllocatedArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.NodeResourcesMostAllocatedArgs)(nil), (*config.NodeResourcesMostAllocatedArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_NodeResourcesMostAllocatedArgs_To_config_NodeResourcesMostAllocatedArgs(a.(*v1beta1.NodeResourcesMostAllocatedArgs), b.(*config.NodeResourcesMostAllocatedArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.NodeResourcesMostAllocatedArgs)(nil), (*v1beta1.NodeResourcesMostAllocatedArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_NodeResourcesMostAllocatedArgs_To_v1beta1_NodeResourcesMostAllocatedArgs(a.(*config.NodeResourcesMostAllocatedArgs), b.(*v1beta1.NodeResourcesMostAllocatedArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.Plugin)(nil), (*config.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_Plugin_To_config_Plugin(a.(*v1beta1.Plugin), b.(*config.Plugin), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.Plugin)(nil), (*v1beta1.Plugin)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Plugin_To_v1beta1_Plugin(a.(*config.Plugin), b.(*v1beta1.Plugin), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.PluginConfig)(nil), (*config.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_PluginConfig_To_config_PluginConfig(a.(*v1beta1.PluginConfig), b.(*config.PluginConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PluginConfig)(nil), (*v1beta1.PluginConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PluginConfig_To_v1beta1_PluginConfig(a.(*config.PluginConfig), b.(*v1beta1.PluginConfig), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PluginSet)(nil), (*v1beta1.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PluginSet_To_v1beta1_PluginSet(a.(*config.PluginSet), b.(*v1beta1.PluginSet), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta1.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.PodTopologySpreadArgs)(nil), (*v1beta1.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_PodTopologySpreadArgs_To_v1beta1_PodTopologySpreadArgs(a.(*config.PodTopologySpreadArgs), b.(*v1beta1.PodTopologySpreadArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.RequestedToCapacityRatioArgs)(nil), (*config.RequestedToCapacityRatioArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_RequestedToCapacityRatioArgs_To_config_RequestedToCapacityRatioArgs(a.(*v1beta1.RequestedToCapacityRatioArgs), b.(*config.RequestedToCapacityRatioArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.RequestedToCapacityRatioArgs)(nil), (*v1beta1.RequestedToCapacityRatioArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_RequestedToCapacityRatioArgs_To_v1beta1_RequestedToCapacityRatioArgs(a.(*config.RequestedToCapacityRatioArgs), b.(*v1beta1.RequestedToCapacityRatioArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.RequestedToCapacityRatioParam)(nil), (*config.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(a.(*v1beta1.RequestedToCapacityRatioParam), b.(*config.RequestedToCapacityRatioParam), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.RequestedToCapacityRatioParam)(nil), (*v1beta1.RequestedToCapacityRatioParam)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_RequestedToCapacityRatioParam_To_v1beta1_RequestedToCapacityRatioParam(a.(*config.RequestedToCapacityRatioParam), b.(*v1beta1.RequestedToCapacityRatioParam), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.ResourceSpec)(nil), (*config.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ResourceSpec_To_config_ResourceSpec(a.(*v1beta1.ResourceSpec), b.(*config.ResourceSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ResourceSpec)(nil), (*v1beta1.ResourceSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ResourceSpec_To_v1beta1_ResourceSpec(a.(*config.ResourceSpec), b.(*v1beta1.ResourceSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.ScoringStrategy)(nil), (*config.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ScoringStrategy_To_config_ScoringStrategy(a.(*v1beta1.ScoringStrategy), b.(*config.ScoringStrategy), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ScoringStrategy)(nil), (*v1beta1.ScoringStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ScoringStrategy_To_v1beta1_ScoringStrategy(a.(*config.ScoringStrategy), b.(*v1beta1.ScoringStrategy), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.ServiceAffinityArgs)(nil), (*config.ServiceAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ServiceAffinityArgs_To_config_ServiceAffinityArgs(a.(*v1beta1.ServiceAffinityArgs), b.(*config.ServiceAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.ServiceAffinityArgs)(nil), (*v1beta1.ServiceAffinityArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_ServiceAffinityArgs_To_v1beta1_ServiceAffinityArgs(a.(*config.ServiceAffinityArgs), b.(*v1beta1.ServiceAffinityArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.UtilizationShapePoint)(nil), (*config.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_UtilizationShapePoint_To_config_UtilizationShapePoint(a.(*v1beta1.UtilizationShapePoint), b.(*config.UtilizationShapePoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.UtilizationShapePoint)(nil), (*v1beta1.UtilizationShapePoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_UtilizationShapePoint_To_v1beta1_UtilizationShapePoint(a.(*config.UtilizationShapePoint), b.(*v1beta1.UtilizationShapePoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta1.VolumeBindingArgs)(nil), (*config.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_VolumeBindingArgs_To_config_VolumeBindingArgs(a.(*v1beta1.VolumeBindingArgs), b.(*config.VolumeBindingArgs), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*config.VolumeBindingArgs)(nil), (*v1beta1.VolumeBindingArgs)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_VolumeBindingArgs_To_v1beta1_VolumeBindingArgs(a.(*config.VolumeBindingArgs), b.(*v1beta1.VolumeBindingArgs), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.KubeSchedulerConfiguration)(nil), (*v1beta1.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_KubeSchedulerConfiguration_To_v1beta1_KubeSchedulerConfiguration(a.(*config.KubeSchedulerConfiguration), b.(*v1beta1.KubeSchedulerConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*config.Plugins)(nil), (*v1beta1.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_config_Plugins_To_v1beta1_Plugins(a.(*config.Plugins), b.(*v1beta1.Plugins), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*v1beta1.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta1.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*v1beta1.PluginSet)(nil), (*config.PluginSet)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_PluginSet_To_config_PluginSet(a.(*v1beta1.PluginSet), b.(*config.PluginSet), scope) - }); err != nil { - return err - } - if err := s.AddConversionFunc((*v1beta1.Plugins)(nil), (*config.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_Plugins_To_config_Plugins(a.(*v1beta1.Plugins), b.(*config.Plugins), scope) - }); err != nil { - return err - } - return nil -} - -func autoConvert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta1.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int32_To_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs is an autogenerated conversion function. -func Convert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in *v1beta1.DefaultPreemptionArgs, out *config.DefaultPreemptionArgs, s conversion.Scope) error { - return autoConvert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(in, out, s) -} - -func autoConvert_config_DefaultPreemptionArgs_To_v1beta1_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta1.DefaultPreemptionArgs, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage, s); err != nil { - return err - } - if err := v1.Convert_int32_To_Pointer_int32(&in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute, s); err != nil { - return err - } - return nil -} - -// Convert_config_DefaultPreemptionArgs_To_v1beta1_DefaultPreemptionArgs is an autogenerated conversion function. -func Convert_config_DefaultPreemptionArgs_To_v1beta1_DefaultPreemptionArgs(in *config.DefaultPreemptionArgs, out *v1beta1.DefaultPreemptionArgs, s conversion.Scope) error { - return autoConvert_config_DefaultPreemptionArgs_To_v1beta1_DefaultPreemptionArgs(in, out, s) -} - -func autoConvert_v1beta1_Extender_To_config_Extender(in *v1beta1.Extender, out *config.Extender, s conversion.Scope) error { - out.URLPrefix = in.URLPrefix - out.FilterVerb = in.FilterVerb - out.PreemptVerb = in.PreemptVerb - out.PrioritizeVerb = in.PrioritizeVerb - out.Weight = in.Weight - out.BindVerb = in.BindVerb - out.EnableHTTPS = in.EnableHTTPS - out.TLSConfig = (*config.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig)) - out.HTTPTimeout = in.HTTPTimeout - out.NodeCacheCapable = in.NodeCacheCapable - out.ManagedResources = *(*[]config.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources)) - out.Ignorable = in.Ignorable - return nil -} - -// Convert_v1beta1_Extender_To_config_Extender is an autogenerated conversion function. -func Convert_v1beta1_Extender_To_config_Extender(in *v1beta1.Extender, out *config.Extender, s conversion.Scope) error { - return autoConvert_v1beta1_Extender_To_config_Extender(in, out, s) -} - -func autoConvert_config_Extender_To_v1beta1_Extender(in *config.Extender, out *v1beta1.Extender, s conversion.Scope) error { - out.URLPrefix = in.URLPrefix - out.FilterVerb = in.FilterVerb - out.PreemptVerb = in.PreemptVerb - out.PrioritizeVerb = in.PrioritizeVerb - out.Weight = in.Weight - out.BindVerb = in.BindVerb - out.EnableHTTPS = in.EnableHTTPS - out.TLSConfig = (*configv1.ExtenderTLSConfig)(unsafe.Pointer(in.TLSConfig)) - out.HTTPTimeout = in.HTTPTimeout - out.NodeCacheCapable = in.NodeCacheCapable - out.ManagedResources = *(*[]configv1.ExtenderManagedResource)(unsafe.Pointer(&in.ManagedResources)) - out.Ignorable = in.Ignorable - return nil -} - -// Convert_config_Extender_To_v1beta1_Extender is an autogenerated conversion function. -func Convert_config_Extender_To_v1beta1_Extender(in *config.Extender, out *v1beta1.Extender, s conversion.Scope) error { - return autoConvert_config_Extender_To_v1beta1_Extender(in, out, s) -} - -func autoConvert_v1beta1_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta1.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta1_InterPodAffinityArgs_To_config_InterPodAffinityArgs is an autogenerated conversion function. -func Convert_v1beta1_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in *v1beta1.InterPodAffinityArgs, out *config.InterPodAffinityArgs, s conversion.Scope) error { - return autoConvert_v1beta1_InterPodAffinityArgs_To_config_InterPodAffinityArgs(in, out, s) -} - -func autoConvert_config_InterPodAffinityArgs_To_v1beta1_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta1.InterPodAffinityArgs, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.HardPodAffinityWeight, &out.HardPodAffinityWeight, s); err != nil { - return err - } - return nil -} - -// Convert_config_InterPodAffinityArgs_To_v1beta1_InterPodAffinityArgs is an autogenerated conversion function. -func Convert_config_InterPodAffinityArgs_To_v1beta1_InterPodAffinityArgs(in *config.InterPodAffinityArgs, out *v1beta1.InterPodAffinityArgs, s conversion.Scope) error { - return autoConvert_config_InterPodAffinityArgs_To_v1beta1_InterPodAffinityArgs(in, out, s) -} - -func autoConvert_v1beta1_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(in *v1beta1.KubeSchedulerConfiguration, out *config.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := v1.Convert_Pointer_int32_To_int32(&in.Parallelism, &out.Parallelism, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_LeaderElectionConfiguration_To_config_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { - return err - } - if err := v1.Convert_Pointer_string_To_string(&in.HealthzBindAddress, &out.HealthzBindAddress, s); err != nil { - return err - } - if err := v1.Convert_Pointer_string_To_string(&in.MetricsBindAddress, &out.MetricsBindAddress, s); err != nil { - return err - } - if err := v1alpha1.Convert_v1alpha1_DebuggingConfiguration_To_config_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int32_To_int32(&in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int64_To_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil { - return err - } - if err := v1.Convert_Pointer_int64_To_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil { - return err - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]config.KubeSchedulerProfile, len(*in)) - for i := range *in { - if err := Convert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Profiles = nil - } - out.Extenders = *(*[]config.Extender)(unsafe.Pointer(&in.Extenders)) - return nil -} - -func autoConvert_config_KubeSchedulerConfiguration_To_v1beta1_KubeSchedulerConfiguration(in *config.KubeSchedulerConfiguration, out *v1beta1.KubeSchedulerConfiguration, s conversion.Scope) error { - if err := v1.Convert_int32_To_Pointer_int32(&in.Parallelism, &out.Parallelism, s); err != nil { - return err - } - if err := v1alpha1.Convert_config_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - if err := v1alpha1.Convert_config_ClientConnectionConfiguration_To_v1alpha1_ClientConnectionConfiguration(&in.ClientConnection, &out.ClientConnection, s); err != nil { - return err - } - if err := v1.Convert_string_To_Pointer_string(&in.HealthzBindAddress, &out.HealthzBindAddress, s); err != nil { - return err - } - if err := v1.Convert_string_To_Pointer_string(&in.MetricsBindAddress, &out.MetricsBindAddress, s); err != nil { - return err - } - if err := v1alpha1.Convert_config_DebuggingConfiguration_To_v1alpha1_DebuggingConfiguration(&in.DebuggingConfiguration, &out.DebuggingConfiguration, s); err != nil { - return err - } - if err := v1.Convert_int32_To_Pointer_int32(&in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore, s); err != nil { - return err - } - if err := v1.Convert_int64_To_Pointer_int64(&in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds, s); err != nil { - return err - } - if err := v1.Convert_int64_To_Pointer_int64(&in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds, s); err != nil { - return err - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]v1beta1.KubeSchedulerProfile, len(*in)) - for i := range *in { - if err := Convert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Profiles = nil - } - out.Extenders = *(*[]v1beta1.Extender)(unsafe.Pointer(&in.Extenders)) - return nil -} - -func autoConvert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta1.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error { - if err := v1.Convert_Pointer_string_To_string(&in.SchedulerName, &out.SchedulerName, s); err != nil { - return err - } - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(config.Plugins) - if err := Convert_v1beta1_Plugins_To_config_Plugins(*in, *out, s); err != nil { - return err - } - } else { - out.Plugins = nil - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]config.PluginConfig, len(*in)) - for i := range *in { - if err := Convert_v1beta1_PluginConfig_To_config_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.PluginConfig = nil - } - return nil -} - -// Convert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile is an autogenerated conversion function. -func Convert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in *v1beta1.KubeSchedulerProfile, out *config.KubeSchedulerProfile, s conversion.Scope) error { - return autoConvert_v1beta1_KubeSchedulerProfile_To_config_KubeSchedulerProfile(in, out, s) -} - -func autoConvert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta1.KubeSchedulerProfile, s conversion.Scope) error { - if err := v1.Convert_string_To_Pointer_string(&in.SchedulerName, &out.SchedulerName, s); err != nil { - return err - } - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(v1beta1.Plugins) - if err := Convert_config_Plugins_To_v1beta1_Plugins(*in, *out, s); err != nil { - return err - } - } else { - out.Plugins = nil - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]v1beta1.PluginConfig, len(*in)) - for i := range *in { - if err := Convert_config_PluginConfig_To_v1beta1_PluginConfig(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.PluginConfig = nil - } - return nil -} - -// Convert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile is an autogenerated conversion function. -func Convert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta1.KubeSchedulerProfile, s conversion.Scope) error { - return autoConvert_config_KubeSchedulerProfile_To_v1beta1_KubeSchedulerProfile(in, out, s) -} - -func autoConvert_v1beta1_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta1.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error { - out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity)) - return nil -} - -// Convert_v1beta1_NodeAffinityArgs_To_config_NodeAffinityArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeAffinityArgs_To_config_NodeAffinityArgs(in *v1beta1.NodeAffinityArgs, out *config.NodeAffinityArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeAffinityArgs_To_config_NodeAffinityArgs(in, out, s) -} - -func autoConvert_config_NodeAffinityArgs_To_v1beta1_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta1.NodeAffinityArgs, s conversion.Scope) error { - out.AddedAffinity = (*corev1.NodeAffinity)(unsafe.Pointer(in.AddedAffinity)) - return nil -} - -// Convert_config_NodeAffinityArgs_To_v1beta1_NodeAffinityArgs is an autogenerated conversion function. -func Convert_config_NodeAffinityArgs_To_v1beta1_NodeAffinityArgs(in *config.NodeAffinityArgs, out *v1beta1.NodeAffinityArgs, s conversion.Scope) error { - return autoConvert_config_NodeAffinityArgs_To_v1beta1_NodeAffinityArgs(in, out, s) -} - -func autoConvert_v1beta1_NodeLabelArgs_To_config_NodeLabelArgs(in *v1beta1.NodeLabelArgs, out *config.NodeLabelArgs, s conversion.Scope) error { - out.PresentLabels = *(*[]string)(unsafe.Pointer(&in.PresentLabels)) - out.AbsentLabels = *(*[]string)(unsafe.Pointer(&in.AbsentLabels)) - out.PresentLabelsPreference = *(*[]string)(unsafe.Pointer(&in.PresentLabelsPreference)) - out.AbsentLabelsPreference = *(*[]string)(unsafe.Pointer(&in.AbsentLabelsPreference)) - return nil -} - -// Convert_v1beta1_NodeLabelArgs_To_config_NodeLabelArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeLabelArgs_To_config_NodeLabelArgs(in *v1beta1.NodeLabelArgs, out *config.NodeLabelArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeLabelArgs_To_config_NodeLabelArgs(in, out, s) -} - -func autoConvert_config_NodeLabelArgs_To_v1beta1_NodeLabelArgs(in *config.NodeLabelArgs, out *v1beta1.NodeLabelArgs, s conversion.Scope) error { - out.PresentLabels = *(*[]string)(unsafe.Pointer(&in.PresentLabels)) - out.AbsentLabels = *(*[]string)(unsafe.Pointer(&in.AbsentLabels)) - out.PresentLabelsPreference = *(*[]string)(unsafe.Pointer(&in.PresentLabelsPreference)) - out.AbsentLabelsPreference = *(*[]string)(unsafe.Pointer(&in.AbsentLabelsPreference)) - return nil -} - -// Convert_config_NodeLabelArgs_To_v1beta1_NodeLabelArgs is an autogenerated conversion function. -func Convert_config_NodeLabelArgs_To_v1beta1_NodeLabelArgs(in *config.NodeLabelArgs, out *v1beta1.NodeLabelArgs, s conversion.Scope) error { - return autoConvert_config_NodeLabelArgs_To_v1beta1_NodeLabelArgs(in, out, s) -} - -func autoConvert_v1beta1_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta1.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_v1beta1_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in *v1beta1.NodeResourcesBalancedAllocationArgs, out *config.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeResourcesBalancedAllocationArgs_To_config_NodeResourcesBalancedAllocationArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta1_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta1.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - out.Resources = *(*[]v1beta1.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta1_NodeResourcesBalancedAllocationArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesBalancedAllocationArgs_To_v1beta1_NodeResourcesBalancedAllocationArgs(in *config.NodeResourcesBalancedAllocationArgs, out *v1beta1.NodeResourcesBalancedAllocationArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesBalancedAllocationArgs_To_v1beta1_NodeResourcesBalancedAllocationArgs(in, out, s) -} - -func autoConvert_v1beta1_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta1.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error { - out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources)) - out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups)) - out.ScoringStrategy = (*config.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy)) - return nil -} - -// Convert_v1beta1_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in *v1beta1.NodeResourcesFitArgs, out *config.NodeResourcesFitArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeResourcesFitArgs_To_config_NodeResourcesFitArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesFitArgs_To_v1beta1_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta1.NodeResourcesFitArgs, s conversion.Scope) error { - out.IgnoredResources = *(*[]string)(unsafe.Pointer(&in.IgnoredResources)) - out.IgnoredResourceGroups = *(*[]string)(unsafe.Pointer(&in.IgnoredResourceGroups)) - out.ScoringStrategy = (*v1beta1.ScoringStrategy)(unsafe.Pointer(in.ScoringStrategy)) - return nil -} - -// Convert_config_NodeResourcesFitArgs_To_v1beta1_NodeResourcesFitArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesFitArgs_To_v1beta1_NodeResourcesFitArgs(in *config.NodeResourcesFitArgs, out *v1beta1.NodeResourcesFitArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesFitArgs_To_v1beta1_NodeResourcesFitArgs(in, out, s) -} - -func autoConvert_v1beta1_NodeResourcesLeastAllocatedArgs_To_config_NodeResourcesLeastAllocatedArgs(in *v1beta1.NodeResourcesLeastAllocatedArgs, out *config.NodeResourcesLeastAllocatedArgs, s conversion.Scope) error { - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_v1beta1_NodeResourcesLeastAllocatedArgs_To_config_NodeResourcesLeastAllocatedArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeResourcesLeastAllocatedArgs_To_config_NodeResourcesLeastAllocatedArgs(in *v1beta1.NodeResourcesLeastAllocatedArgs, out *config.NodeResourcesLeastAllocatedArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeResourcesLeastAllocatedArgs_To_config_NodeResourcesLeastAllocatedArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesLeastAllocatedArgs_To_v1beta1_NodeResourcesLeastAllocatedArgs(in *config.NodeResourcesLeastAllocatedArgs, out *v1beta1.NodeResourcesLeastAllocatedArgs, s conversion.Scope) error { - out.Resources = *(*[]v1beta1.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_config_NodeResourcesLeastAllocatedArgs_To_v1beta1_NodeResourcesLeastAllocatedArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesLeastAllocatedArgs_To_v1beta1_NodeResourcesLeastAllocatedArgs(in *config.NodeResourcesLeastAllocatedArgs, out *v1beta1.NodeResourcesLeastAllocatedArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesLeastAllocatedArgs_To_v1beta1_NodeResourcesLeastAllocatedArgs(in, out, s) -} - -func autoConvert_v1beta1_NodeResourcesMostAllocatedArgs_To_config_NodeResourcesMostAllocatedArgs(in *v1beta1.NodeResourcesMostAllocatedArgs, out *config.NodeResourcesMostAllocatedArgs, s conversion.Scope) error { - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_v1beta1_NodeResourcesMostAllocatedArgs_To_config_NodeResourcesMostAllocatedArgs is an autogenerated conversion function. -func Convert_v1beta1_NodeResourcesMostAllocatedArgs_To_config_NodeResourcesMostAllocatedArgs(in *v1beta1.NodeResourcesMostAllocatedArgs, out *config.NodeResourcesMostAllocatedArgs, s conversion.Scope) error { - return autoConvert_v1beta1_NodeResourcesMostAllocatedArgs_To_config_NodeResourcesMostAllocatedArgs(in, out, s) -} - -func autoConvert_config_NodeResourcesMostAllocatedArgs_To_v1beta1_NodeResourcesMostAllocatedArgs(in *config.NodeResourcesMostAllocatedArgs, out *v1beta1.NodeResourcesMostAllocatedArgs, s conversion.Scope) error { - out.Resources = *(*[]v1beta1.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_config_NodeResourcesMostAllocatedArgs_To_v1beta1_NodeResourcesMostAllocatedArgs is an autogenerated conversion function. -func Convert_config_NodeResourcesMostAllocatedArgs_To_v1beta1_NodeResourcesMostAllocatedArgs(in *config.NodeResourcesMostAllocatedArgs, out *v1beta1.NodeResourcesMostAllocatedArgs, s conversion.Scope) error { - return autoConvert_config_NodeResourcesMostAllocatedArgs_To_v1beta1_NodeResourcesMostAllocatedArgs(in, out, s) -} - -func autoConvert_v1beta1_Plugin_To_config_Plugin(in *v1beta1.Plugin, out *config.Plugin, s conversion.Scope) error { - out.Name = in.Name - if err := v1.Convert_Pointer_int32_To_int32(&in.Weight, &out.Weight, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta1_Plugin_To_config_Plugin is an autogenerated conversion function. -func Convert_v1beta1_Plugin_To_config_Plugin(in *v1beta1.Plugin, out *config.Plugin, s conversion.Scope) error { - return autoConvert_v1beta1_Plugin_To_config_Plugin(in, out, s) -} - -func autoConvert_config_Plugin_To_v1beta1_Plugin(in *config.Plugin, out *v1beta1.Plugin, s conversion.Scope) error { - out.Name = in.Name - if err := v1.Convert_int32_To_Pointer_int32(&in.Weight, &out.Weight, s); err != nil { - return err - } - return nil -} - -// Convert_config_Plugin_To_v1beta1_Plugin is an autogenerated conversion function. -func Convert_config_Plugin_To_v1beta1_Plugin(in *config.Plugin, out *v1beta1.Plugin, s conversion.Scope) error { - return autoConvert_config_Plugin_To_v1beta1_Plugin(in, out, s) -} - -func autoConvert_v1beta1_PluginConfig_To_config_PluginConfig(in *v1beta1.PluginConfig, out *config.PluginConfig, s conversion.Scope) error { - out.Name = in.Name - if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&in.Args, &out.Args, s); err != nil { - return err - } - return nil -} - -// Convert_v1beta1_PluginConfig_To_config_PluginConfig is an autogenerated conversion function. -func Convert_v1beta1_PluginConfig_To_config_PluginConfig(in *v1beta1.PluginConfig, out *config.PluginConfig, s conversion.Scope) error { - return autoConvert_v1beta1_PluginConfig_To_config_PluginConfig(in, out, s) -} - -func autoConvert_config_PluginConfig_To_v1beta1_PluginConfig(in *config.PluginConfig, out *v1beta1.PluginConfig, s conversion.Scope) error { - out.Name = in.Name - if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&in.Args, &out.Args, s); err != nil { - return err - } - return nil -} - -// Convert_config_PluginConfig_To_v1beta1_PluginConfig is an autogenerated conversion function. -func Convert_config_PluginConfig_To_v1beta1_PluginConfig(in *config.PluginConfig, out *v1beta1.PluginConfig, s conversion.Scope) error { - return autoConvert_config_PluginConfig_To_v1beta1_PluginConfig(in, out, s) -} - -func autoConvert_v1beta1_PluginSet_To_config_PluginSet(in *v1beta1.PluginSet, out *config.PluginSet, s conversion.Scope) error { - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]config.Plugin, len(*in)) - for i := range *in { - if err := Convert_v1beta1_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Enabled = nil - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]config.Plugin, len(*in)) - for i := range *in { - if err := Convert_v1beta1_Plugin_To_config_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Disabled = nil - } - return nil -} - -func autoConvert_config_PluginSet_To_v1beta1_PluginSet(in *config.PluginSet, out *v1beta1.PluginSet, s conversion.Scope) error { - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]v1beta1.Plugin, len(*in)) - for i := range *in { - if err := Convert_config_Plugin_To_v1beta1_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Enabled = nil - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]v1beta1.Plugin, len(*in)) - for i := range *in { - if err := Convert_config_Plugin_To_v1beta1_Plugin(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Disabled = nil - } - return nil -} - -// Convert_config_PluginSet_To_v1beta1_PluginSet is an autogenerated conversion function. -func Convert_config_PluginSet_To_v1beta1_PluginSet(in *config.PluginSet, out *v1beta1.PluginSet, s conversion.Scope) error { - return autoConvert_config_PluginSet_To_v1beta1_PluginSet(in, out, s) -} - -func autoConvert_v1beta1_Plugins_To_config_Plugins(in *v1beta1.Plugins, out *config.Plugins, s conversion.Scope) error { - // WARNING: in.QueueSort requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.PreFilter requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.Filter requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.PostFilter requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.PreScore requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.Score requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.Reserve requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.Permit requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.PreBind requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.Bind requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - // WARNING: in.PostBind requires manual conversion: inconvertible types (*k8s.io/kube-scheduler/config/v1beta1.PluginSet vs k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet) - return nil -} - -func autoConvert_config_Plugins_To_v1beta1_Plugins(in *config.Plugins, out *v1beta1.Plugins, s conversion.Scope) error { - // WARNING: in.QueueSort requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.PreFilter requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.Filter requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.PostFilter requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.PreScore requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.Score requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.Reserve requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.Permit requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.PreBind requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.Bind requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - // WARNING: in.PostBind requires manual conversion: inconvertible types (k8s.io/kubernetes/pkg/scheduler/apis/config.PluginSet vs *k8s.io/kube-scheduler/config/v1beta1.PluginSet) - return nil -} - -func autoConvert_v1beta1_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta1.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error { - out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints)) - out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType) - return nil -} - -// Convert_v1beta1_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs is an autogenerated conversion function. -func Convert_v1beta1_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta1.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error { - return autoConvert_v1beta1_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in, out, s) -} - -func autoConvert_config_PodTopologySpreadArgs_To_v1beta1_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta1.PodTopologySpreadArgs, s conversion.Scope) error { - out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints)) - out.DefaultingType = v1beta1.PodTopologySpreadConstraintsDefaulting(in.DefaultingType) - return nil -} - -// Convert_config_PodTopologySpreadArgs_To_v1beta1_PodTopologySpreadArgs is an autogenerated conversion function. -func Convert_config_PodTopologySpreadArgs_To_v1beta1_PodTopologySpreadArgs(in *config.PodTopologySpreadArgs, out *v1beta1.PodTopologySpreadArgs, s conversion.Scope) error { - return autoConvert_config_PodTopologySpreadArgs_To_v1beta1_PodTopologySpreadArgs(in, out, s) -} - -func autoConvert_v1beta1_RequestedToCapacityRatioArgs_To_config_RequestedToCapacityRatioArgs(in *v1beta1.RequestedToCapacityRatioArgs, out *config.RequestedToCapacityRatioArgs, s conversion.Scope) error { - out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_v1beta1_RequestedToCapacityRatioArgs_To_config_RequestedToCapacityRatioArgs is an autogenerated conversion function. -func Convert_v1beta1_RequestedToCapacityRatioArgs_To_config_RequestedToCapacityRatioArgs(in *v1beta1.RequestedToCapacityRatioArgs, out *config.RequestedToCapacityRatioArgs, s conversion.Scope) error { - return autoConvert_v1beta1_RequestedToCapacityRatioArgs_To_config_RequestedToCapacityRatioArgs(in, out, s) -} - -func autoConvert_config_RequestedToCapacityRatioArgs_To_v1beta1_RequestedToCapacityRatioArgs(in *config.RequestedToCapacityRatioArgs, out *v1beta1.RequestedToCapacityRatioArgs, s conversion.Scope) error { - out.Shape = *(*[]v1beta1.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - out.Resources = *(*[]v1beta1.ResourceSpec)(unsafe.Pointer(&in.Resources)) - return nil -} - -// Convert_config_RequestedToCapacityRatioArgs_To_v1beta1_RequestedToCapacityRatioArgs is an autogenerated conversion function. -func Convert_config_RequestedToCapacityRatioArgs_To_v1beta1_RequestedToCapacityRatioArgs(in *config.RequestedToCapacityRatioArgs, out *v1beta1.RequestedToCapacityRatioArgs, s conversion.Scope) error { - return autoConvert_config_RequestedToCapacityRatioArgs_To_v1beta1_RequestedToCapacityRatioArgs(in, out, s) -} - -func autoConvert_v1beta1_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta1.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error { - out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_v1beta1_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam is an autogenerated conversion function. -func Convert_v1beta1_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in *v1beta1.RequestedToCapacityRatioParam, out *config.RequestedToCapacityRatioParam, s conversion.Scope) error { - return autoConvert_v1beta1_RequestedToCapacityRatioParam_To_config_RequestedToCapacityRatioParam(in, out, s) -} - -func autoConvert_config_RequestedToCapacityRatioParam_To_v1beta1_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta1.RequestedToCapacityRatioParam, s conversion.Scope) error { - out.Shape = *(*[]v1beta1.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_config_RequestedToCapacityRatioParam_To_v1beta1_RequestedToCapacityRatioParam is an autogenerated conversion function. -func Convert_config_RequestedToCapacityRatioParam_To_v1beta1_RequestedToCapacityRatioParam(in *config.RequestedToCapacityRatioParam, out *v1beta1.RequestedToCapacityRatioParam, s conversion.Scope) error { - return autoConvert_config_RequestedToCapacityRatioParam_To_v1beta1_RequestedToCapacityRatioParam(in, out, s) -} - -func autoConvert_v1beta1_ResourceSpec_To_config_ResourceSpec(in *v1beta1.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error { - out.Name = in.Name - out.Weight = in.Weight - return nil -} - -// Convert_v1beta1_ResourceSpec_To_config_ResourceSpec is an autogenerated conversion function. -func Convert_v1beta1_ResourceSpec_To_config_ResourceSpec(in *v1beta1.ResourceSpec, out *config.ResourceSpec, s conversion.Scope) error { - return autoConvert_v1beta1_ResourceSpec_To_config_ResourceSpec(in, out, s) -} - -func autoConvert_config_ResourceSpec_To_v1beta1_ResourceSpec(in *config.ResourceSpec, out *v1beta1.ResourceSpec, s conversion.Scope) error { - out.Name = in.Name - out.Weight = in.Weight - return nil -} - -// Convert_config_ResourceSpec_To_v1beta1_ResourceSpec is an autogenerated conversion function. -func Convert_config_ResourceSpec_To_v1beta1_ResourceSpec(in *config.ResourceSpec, out *v1beta1.ResourceSpec, s conversion.Scope) error { - return autoConvert_config_ResourceSpec_To_v1beta1_ResourceSpec(in, out, s) -} - -func autoConvert_v1beta1_ScoringStrategy_To_config_ScoringStrategy(in *v1beta1.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error { - out.Type = config.ScoringStrategyType(in.Type) - out.Resources = *(*[]config.ResourceSpec)(unsafe.Pointer(&in.Resources)) - out.RequestedToCapacityRatio = (*config.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio)) - return nil -} - -// Convert_v1beta1_ScoringStrategy_To_config_ScoringStrategy is an autogenerated conversion function. -func Convert_v1beta1_ScoringStrategy_To_config_ScoringStrategy(in *v1beta1.ScoringStrategy, out *config.ScoringStrategy, s conversion.Scope) error { - return autoConvert_v1beta1_ScoringStrategy_To_config_ScoringStrategy(in, out, s) -} - -func autoConvert_config_ScoringStrategy_To_v1beta1_ScoringStrategy(in *config.ScoringStrategy, out *v1beta1.ScoringStrategy, s conversion.Scope) error { - out.Type = v1beta1.ScoringStrategyType(in.Type) - out.Resources = *(*[]v1beta1.ResourceSpec)(unsafe.Pointer(&in.Resources)) - out.RequestedToCapacityRatio = (*v1beta1.RequestedToCapacityRatioParam)(unsafe.Pointer(in.RequestedToCapacityRatio)) - return nil -} - -// Convert_config_ScoringStrategy_To_v1beta1_ScoringStrategy is an autogenerated conversion function. -func Convert_config_ScoringStrategy_To_v1beta1_ScoringStrategy(in *config.ScoringStrategy, out *v1beta1.ScoringStrategy, s conversion.Scope) error { - return autoConvert_config_ScoringStrategy_To_v1beta1_ScoringStrategy(in, out, s) -} - -func autoConvert_v1beta1_ServiceAffinityArgs_To_config_ServiceAffinityArgs(in *v1beta1.ServiceAffinityArgs, out *config.ServiceAffinityArgs, s conversion.Scope) error { - out.AffinityLabels = *(*[]string)(unsafe.Pointer(&in.AffinityLabels)) - out.AntiAffinityLabelsPreference = *(*[]string)(unsafe.Pointer(&in.AntiAffinityLabelsPreference)) - return nil -} - -// Convert_v1beta1_ServiceAffinityArgs_To_config_ServiceAffinityArgs is an autogenerated conversion function. -func Convert_v1beta1_ServiceAffinityArgs_To_config_ServiceAffinityArgs(in *v1beta1.ServiceAffinityArgs, out *config.ServiceAffinityArgs, s conversion.Scope) error { - return autoConvert_v1beta1_ServiceAffinityArgs_To_config_ServiceAffinityArgs(in, out, s) -} - -func autoConvert_config_ServiceAffinityArgs_To_v1beta1_ServiceAffinityArgs(in *config.ServiceAffinityArgs, out *v1beta1.ServiceAffinityArgs, s conversion.Scope) error { - out.AffinityLabels = *(*[]string)(unsafe.Pointer(&in.AffinityLabels)) - out.AntiAffinityLabelsPreference = *(*[]string)(unsafe.Pointer(&in.AntiAffinityLabelsPreference)) - return nil -} - -// Convert_config_ServiceAffinityArgs_To_v1beta1_ServiceAffinityArgs is an autogenerated conversion function. -func Convert_config_ServiceAffinityArgs_To_v1beta1_ServiceAffinityArgs(in *config.ServiceAffinityArgs, out *v1beta1.ServiceAffinityArgs, s conversion.Scope) error { - return autoConvert_config_ServiceAffinityArgs_To_v1beta1_ServiceAffinityArgs(in, out, s) -} - -func autoConvert_v1beta1_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta1.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error { - out.Utilization = in.Utilization - out.Score = in.Score - return nil -} - -// Convert_v1beta1_UtilizationShapePoint_To_config_UtilizationShapePoint is an autogenerated conversion function. -func Convert_v1beta1_UtilizationShapePoint_To_config_UtilizationShapePoint(in *v1beta1.UtilizationShapePoint, out *config.UtilizationShapePoint, s conversion.Scope) error { - return autoConvert_v1beta1_UtilizationShapePoint_To_config_UtilizationShapePoint(in, out, s) -} - -func autoConvert_config_UtilizationShapePoint_To_v1beta1_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta1.UtilizationShapePoint, s conversion.Scope) error { - out.Utilization = in.Utilization - out.Score = in.Score - return nil -} - -// Convert_config_UtilizationShapePoint_To_v1beta1_UtilizationShapePoint is an autogenerated conversion function. -func Convert_config_UtilizationShapePoint_To_v1beta1_UtilizationShapePoint(in *config.UtilizationShapePoint, out *v1beta1.UtilizationShapePoint, s conversion.Scope) error { - return autoConvert_config_UtilizationShapePoint_To_v1beta1_UtilizationShapePoint(in, out, s) -} - -func autoConvert_v1beta1_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta1.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error { - if err := v1.Convert_Pointer_int64_To_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil { - return err - } - out.Shape = *(*[]config.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_v1beta1_VolumeBindingArgs_To_config_VolumeBindingArgs is an autogenerated conversion function. -func Convert_v1beta1_VolumeBindingArgs_To_config_VolumeBindingArgs(in *v1beta1.VolumeBindingArgs, out *config.VolumeBindingArgs, s conversion.Scope) error { - return autoConvert_v1beta1_VolumeBindingArgs_To_config_VolumeBindingArgs(in, out, s) -} - -func autoConvert_config_VolumeBindingArgs_To_v1beta1_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta1.VolumeBindingArgs, s conversion.Scope) error { - if err := v1.Convert_int64_To_Pointer_int64(&in.BindTimeoutSeconds, &out.BindTimeoutSeconds, s); err != nil { - return err - } - out.Shape = *(*[]v1beta1.UtilizationShapePoint)(unsafe.Pointer(&in.Shape)) - return nil -} - -// Convert_config_VolumeBindingArgs_To_v1beta1_VolumeBindingArgs is an autogenerated conversion function. -func Convert_config_VolumeBindingArgs_To_v1beta1_VolumeBindingArgs(in *config.VolumeBindingArgs, out *v1beta1.VolumeBindingArgs, s conversion.Scope) error { - return autoConvert_config_VolumeBindingArgs_To_v1beta1_VolumeBindingArgs(in, out, s) -} diff --git a/pkg/scheduler/apis/config/v1beta1/zz_generated.deepcopy.go b/pkg/scheduler/apis/config/v1beta1/zz_generated.deepcopy.go deleted file mode 100644 index a47bc95e8a7d..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/zz_generated.deepcopy.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1beta1 diff --git a/pkg/scheduler/apis/config/v1beta1/zz_generated.defaults.go b/pkg/scheduler/apis/config/v1beta1/zz_generated.defaults.go deleted file mode 100644 index c605842954f1..000000000000 --- a/pkg/scheduler/apis/config/v1beta1/zz_generated.defaults.go +++ /dev/null @@ -1,94 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by defaulter-gen. DO NOT EDIT. - -package v1beta1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" - v1beta1 "k8s.io/kube-scheduler/config/v1beta1" -) - -// RegisterDefaults adds defaulters functions to the given scheme. -// Public to allow building arbitrary schemes. -// All generated defaulters are covering - they call all nested defaulters. -func RegisterDefaults(scheme *runtime.Scheme) error { - scheme.AddTypeDefaultingFunc(&v1beta1.DefaultPreemptionArgs{}, func(obj interface{}) { SetObjectDefaults_DefaultPreemptionArgs(obj.(*v1beta1.DefaultPreemptionArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta1.InterPodAffinityArgs{}, func(obj interface{}) { SetObjectDefaults_InterPodAffinityArgs(obj.(*v1beta1.InterPodAffinityArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta1.KubeSchedulerConfiguration{}, func(obj interface{}) { - SetObjectDefaults_KubeSchedulerConfiguration(obj.(*v1beta1.KubeSchedulerConfiguration)) - }) - scheme.AddTypeDefaultingFunc(&v1beta1.NodeResourcesBalancedAllocationArgs{}, func(obj interface{}) { - SetObjectDefaults_NodeResourcesBalancedAllocationArgs(obj.(*v1beta1.NodeResourcesBalancedAllocationArgs)) - }) - scheme.AddTypeDefaultingFunc(&v1beta1.NodeResourcesFitArgs{}, func(obj interface{}) { SetObjectDefaults_NodeResourcesFitArgs(obj.(*v1beta1.NodeResourcesFitArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta1.NodeResourcesLeastAllocatedArgs{}, func(obj interface{}) { - SetObjectDefaults_NodeResourcesLeastAllocatedArgs(obj.(*v1beta1.NodeResourcesLeastAllocatedArgs)) - }) - scheme.AddTypeDefaultingFunc(&v1beta1.NodeResourcesMostAllocatedArgs{}, func(obj interface{}) { - SetObjectDefaults_NodeResourcesMostAllocatedArgs(obj.(*v1beta1.NodeResourcesMostAllocatedArgs)) - }) - scheme.AddTypeDefaultingFunc(&v1beta1.PodTopologySpreadArgs{}, func(obj interface{}) { SetObjectDefaults_PodTopologySpreadArgs(obj.(*v1beta1.PodTopologySpreadArgs)) }) - scheme.AddTypeDefaultingFunc(&v1beta1.RequestedToCapacityRatioArgs{}, func(obj interface{}) { - SetObjectDefaults_RequestedToCapacityRatioArgs(obj.(*v1beta1.RequestedToCapacityRatioArgs)) - }) - scheme.AddTypeDefaultingFunc(&v1beta1.VolumeBindingArgs{}, func(obj interface{}) { SetObjectDefaults_VolumeBindingArgs(obj.(*v1beta1.VolumeBindingArgs)) }) - return nil -} - -func SetObjectDefaults_DefaultPreemptionArgs(in *v1beta1.DefaultPreemptionArgs) { - SetDefaults_DefaultPreemptionArgs(in) -} - -func SetObjectDefaults_InterPodAffinityArgs(in *v1beta1.InterPodAffinityArgs) { - SetDefaults_InterPodAffinityArgs(in) -} - -func SetObjectDefaults_KubeSchedulerConfiguration(in *v1beta1.KubeSchedulerConfiguration) { - SetDefaults_KubeSchedulerConfiguration(in) -} - -func SetObjectDefaults_NodeResourcesBalancedAllocationArgs(in *v1beta1.NodeResourcesBalancedAllocationArgs) { - SetDefaults_NodeResourcesBalancedAllocationArgs(in) -} - -func SetObjectDefaults_NodeResourcesFitArgs(in *v1beta1.NodeResourcesFitArgs) { - SetDefaults_NodeResourcesFitArgs(in) -} - -func SetObjectDefaults_NodeResourcesLeastAllocatedArgs(in *v1beta1.NodeResourcesLeastAllocatedArgs) { - SetDefaults_NodeResourcesLeastAllocatedArgs(in) -} - -func SetObjectDefaults_NodeResourcesMostAllocatedArgs(in *v1beta1.NodeResourcesMostAllocatedArgs) { - SetDefaults_NodeResourcesMostAllocatedArgs(in) -} - -func SetObjectDefaults_PodTopologySpreadArgs(in *v1beta1.PodTopologySpreadArgs) { - SetDefaults_PodTopologySpreadArgs(in) -} - -func SetObjectDefaults_RequestedToCapacityRatioArgs(in *v1beta1.RequestedToCapacityRatioArgs) { - SetDefaults_RequestedToCapacityRatioArgs(in) -} - -func SetObjectDefaults_VolumeBindingArgs(in *v1beta1.VolumeBindingArgs) { - SetDefaults_VolumeBindingArgs(in) -} diff --git a/pkg/scheduler/apis/config/validation/validation.go b/pkg/scheduler/apis/config/validation/validation.go index 7644b40fe043..bb0a3b4fd0ad 100644 --- a/pkg/scheduler/apis/config/validation/validation.go +++ b/pkg/scheduler/apis/config/validation/validation.go @@ -33,7 +33,6 @@ import ( componentbasevalidation "k8s.io/component-base/config/validation" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2" ) @@ -126,10 +125,6 @@ type removedPlugins struct { // Remember to add an entry to that list when creating a new component config // version (even if the list of removed plugins is empty). var removedPluginsByVersion = []removedPlugins{ - { - schemeGroupVersion: v1beta1.SchemeGroupVersion.String(), - plugins: []string{}, - }, { schemeGroupVersion: v1beta2.SchemeGroupVersion.String(), plugins: []string{ @@ -143,39 +138,6 @@ var removedPluginsByVersion = []removedPlugins{ }, } -// conflictScorePluginsByVersion maintains a map of conflict plugins in each version. -// Remember to add an entry to that list when creating a new component config -// version (even if the list of conflict plugins is empty). -var conflictScorePluginsByVersion = map[string]map[string]sets.String{ - v1beta1.SchemeGroupVersion.String(): { - "NodeResourcesFit": sets.NewString( - "NodeResourcesLeastAllocated", - "NodeResourcesMostAllocated", - "RequestedToCapacityRatio"), - }, - v1beta2.SchemeGroupVersion.String(): nil, -} - -// isScorePluginConflict checks if a given plugin was conflict with other plugin in the given component -// config version or earlier. -func isScorePluginConflict(apiVersion string, name string, profile *config.KubeSchedulerProfile) []string { - var conflictPlugins []string - cp, ok := conflictScorePluginsByVersion[apiVersion] - if !ok { - return nil - } - plugin, ok := cp[name] - if !ok { - return nil - } - for _, p := range profile.Plugins.Score.Enabled { - if plugin.Has(p.Name) { - conflictPlugins = append(conflictPlugins, p.Name) - } - } - return conflictPlugins -} - // isPluginRemoved checks if a given plugin was removed in the given component // config version or earlier. func isPluginRemoved(apiVersion string, name string) (bool, string) { @@ -202,16 +164,6 @@ func validatePluginSetForRemovedPlugins(path *field.Path, apiVersion string, ps return errs } -func validateScorePluginSetForConflictPlugins(path *field.Path, apiVersion string, profile *config.KubeSchedulerProfile) []error { - var errs []error - for i, plugin := range profile.Plugins.Score.Enabled { - if cp := isScorePluginConflict(apiVersion, plugin.Name, profile); len(cp) > 0 { - errs = append(errs, field.Invalid(path.Child("enabled").Index(i), plugin.Name, fmt.Sprintf("was conflict with %q in version %q (KubeSchedulerConfiguration is version %q)", cp, apiVersion, apiVersion))) - } - } - return errs -} - func validateKubeSchedulerProfile(path *field.Path, apiVersion string, profile *config.KubeSchedulerProfile) []error { var errs []error if len(profile.SchedulerName) == 0 { @@ -257,8 +209,6 @@ func validatePluginConfig(path *field.Path, apiVersion string, profile *config.K errs = append(errs, validatePluginSetForRemovedPlugins( pluginsPath.Child(s), apiVersion, p)...) } - errs = append(errs, validateScorePluginSetForConflictPlugins( - pluginsPath.Child("score"), apiVersion, profile)...) } seenPluginConfig := make(sets.String) diff --git a/pkg/scheduler/apis/config/validation/validation_test.go b/pkg/scheduler/apis/config/validation/validation_test.go index 73a58552bdac..cb5877e6222f 100644 --- a/pkg/scheduler/apis/config/validation/validation_test.go +++ b/pkg/scheduler/apis/config/validation/validation_test.go @@ -25,7 +25,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" componentbaseconfig "k8s.io/component-base/config" "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2" ) @@ -209,37 +208,9 @@ func TestValidateKubeSchedulerConfiguration(t *testing.T) { badRemovedPlugins3 := validConfig.DeepCopy() // default v1beta2 badRemovedPlugins3.Profiles[0].Plugins.Score.Enabled = append(badRemovedPlugins3.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesMostAllocated", Weight: 2}) - goodRemovedPlugins1 := validConfig.DeepCopy() // ServiceAffinity is okay in v1beta1. - goodRemovedPlugins1.APIVersion = v1beta1.SchemeGroupVersion.String() - goodRemovedPlugins1.Profiles[0].Plugins.Score.Enabled = append(goodRemovedPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "ServiceAffinity", Weight: 2}) - goodRemovedPlugins2 := validConfig.DeepCopy() goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodRemovedPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "PodTopologySpread", Weight: 2}) - goodRemovedPlugins3 := validConfig.DeepCopy() - goodRemovedPlugins3.APIVersion = v1beta1.SchemeGroupVersion.String() - goodRemovedPlugins3.Profiles[0].Plugins.Score.Enabled = append(goodRemovedPlugins3.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesMostAllocated", Weight: 2}) - - badConflictPlugins1 := validConfig.DeepCopy() - badConflictPlugins1.APIVersion = v1beta1.SchemeGroupVersion.String() - badConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(badConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesFit", Weight: 2}) - badConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(badConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesLeastAllocated", Weight: 2}) - badConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(badConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesMostAllocated", Weight: 2}) - badConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(badConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "RequestedToCapacityRatio", Weight: 2}) - - goodConflictPlugins1 := validConfig.DeepCopy() - goodConflictPlugins1.APIVersion = v1beta1.SchemeGroupVersion.String() - goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesLeastAllocated", Weight: 2}) - goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesMostAllocated", Weight: 2}) - goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins1.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "RequestedToCapacityRatio", Weight: 2}) - - goodConflictPlugins2 := validConfig.DeepCopy() - goodConflictPlugins2.APIVersion = v1beta1.SchemeGroupVersion.String() - goodConflictPlugins2.Profiles[0].Plugins.Filter.Enabled = append(goodConflictPlugins2.Profiles[0].Plugins.Filter.Enabled, config.Plugin{Name: "NodeResourcesFit", Weight: 2}) - goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled = append(goodConflictPlugins2.Profiles[0].Plugins.Score.Enabled, config.Plugin{Name: "NodeResourcesLeastAllocated", Weight: 2}) - 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}) - deprecatedPluginsConfig := validConfig.DeepCopy() deprecatedPluginsConfig.Profiles[0].PluginConfig = append(deprecatedPluginsConfig.Profiles[0].PluginConfig, config.PluginConfig{ Name: "NodeResourcesLeastAllocated", @@ -335,31 +306,10 @@ func TestValidateKubeSchedulerConfiguration(t *testing.T) { expectedToFail: true, config: badRemovedPlugins3, }, - "good-removed-plugins-1": { - expectedToFail: false, - config: goodRemovedPlugins1, - }, "good-removed-plugins-2": { expectedToFail: false, config: goodRemovedPlugins2, }, - "good-removed-plugins-3": { - expectedToFail: false, - config: goodRemovedPlugins3, - }, - "bad-conflict-plugins-1": { - expectedToFail: true, - config: badConflictPlugins1, - errorString: "profiles[0].plugins.score.enabled[0]: Invalid value: \"NodeResourcesFit\": was conflict with [\"NodeResourcesLeastAllocated\" \"NodeResourcesMostAllocated\" \"RequestedToCapacityRatio\"] in version \"kubescheduler.config.k8s.io/v1beta1\" (KubeSchedulerConfiguration is version \"kubescheduler.config.k8s.io/v1beta1\")", - }, - "good-conflict-plugins-1": { - expectedToFail: false, - config: goodConflictPlugins1, - }, - "good-conflict-plugins-2": { - expectedToFail: false, - config: goodConflictPlugins2, - }, "bad-plugins-config": { expectedToFail: true, config: deprecatedPluginsConfig, diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go index 751214672a23..cdcc0240afdf 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go @@ -35,10 +35,10 @@ import ( clientsetfake "k8s.io/client-go/kubernetes/fake" clienttesting "k8s.io/client-go/testing" "k8s.io/client-go/tools/events" - kubeschedulerconfigv1beta1 "k8s.io/kube-scheduler/config/v1beta1" + kubeschedulerconfigv1beta2 "k8s.io/kube-scheduler/config/v1beta2" extenderv1 "k8s.io/kube-scheduler/extender/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" - configv1beta1 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta1" + configv1beta2 "k8s.io/kubernetes/pkg/scheduler/apis/config/v1beta2" "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature" @@ -86,10 +86,10 @@ var ( ) func getDefaultDefaultPreemptionArgs() *config.DefaultPreemptionArgs { - v1beta1dpa := &kubeschedulerconfigv1beta1.DefaultPreemptionArgs{} - configv1beta1.SetDefaults_DefaultPreemptionArgs(v1beta1dpa) + v1beta2dpa := &kubeschedulerconfigv1beta2.DefaultPreemptionArgs{} + configv1beta2.SetDefaults_DefaultPreemptionArgs(v1beta2dpa) dpa := &config.DefaultPreemptionArgs{} - configv1beta1.Convert_v1beta1_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(v1beta1dpa, dpa, nil) + configv1beta2.Convert_v1beta2_DefaultPreemptionArgs_To_config_DefaultPreemptionArgs(v1beta2dpa, dpa, nil) return dpa } diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/doc.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/doc.go deleted file mode 100644 index c3bac316d975..000000000000 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/doc.go +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:openapi-gen=true -// +groupName=kubescheduler.config.k8s.io - -package v1beta1 // import "k8s.io/kube-scheduler/config/v1beta1" diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/register.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/register.go deleted file mode 100644 index 71061212af55..000000000000 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/register.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the group name used in this package -const GroupName = "kubescheduler.config.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} - -var ( - // SchemeBuilder is the scheme builder with scheme init functions to run for this API package - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - // AddToScheme is a global function that registers this API group & version to a scheme - AddToScheme = SchemeBuilder.AddToScheme -) - -// addKnownTypes registers known types to the given scheme -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(SchemeGroupVersion, - &KubeSchedulerConfiguration{}, - &DefaultPreemptionArgs{}, - &InterPodAffinityArgs{}, - &NodeLabelArgs{}, - &NodeResourcesFitArgs{}, - &PodTopologySpreadArgs{}, - &RequestedToCapacityRatioArgs{}, - &ServiceAffinityArgs{}, - &NodeResourcesBalancedAllocationArgs{}, - &NodeResourcesLeastAllocatedArgs{}, - &NodeResourcesMostAllocatedArgs{}, - &VolumeBindingArgs{}, - &NodeAffinityArgs{}, - ) - return nil -} diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go deleted file mode 100644 index bd2659ea6bff..000000000000 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types.go +++ /dev/null @@ -1,310 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - "bytes" - "fmt" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - componentbaseconfigv1alpha1 "k8s.io/component-base/config/v1alpha1" - v1 "k8s.io/kube-scheduler/config/v1" - "sigs.k8s.io/yaml" -) - -const ( - // SchedulerDefaultLockObjectNamespace defines default scheduler lock object namespace ("kube-system") - SchedulerDefaultLockObjectNamespace string = metav1.NamespaceSystem - - // SchedulerDefaultLockObjectName defines default scheduler lock object name ("kube-scheduler") - SchedulerDefaultLockObjectName = "kube-scheduler" - - // SchedulerDefaultProviderName defines the default provider names - SchedulerDefaultProviderName = "DefaultProvider" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// KubeSchedulerConfiguration configures a scheduler -type KubeSchedulerConfiguration struct { - metav1.TypeMeta `json:",inline"` - - // Parallelism defines the amount of parallelism in algorithms for scheduling a Pods. Must be greater than 0. Defaults to 16 - Parallelism *int32 `json:"parallelism,omitempty"` - - // LeaderElection defines the configuration of leader election client. - LeaderElection componentbaseconfigv1alpha1.LeaderElectionConfiguration `json:"leaderElection"` - - // ClientConnection specifies the kubeconfig file and client connection - // settings for the proxy server to use when communicating with the apiserver. - ClientConnection componentbaseconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection"` - - // Note: Both HealthzBindAddress and MetricsBindAddress fields are deprecated. - // Only empty address or port 0 is allowed. Anything else will fail validation. - // HealthzBindAddress is the IP address and port for the health check server to serve on. - HealthzBindAddress *string `json:"healthzBindAddress,omitempty"` - // MetricsBindAddress is the IP address and port for the metrics server to serve on. - MetricsBindAddress *string `json:"metricsBindAddress,omitempty"` - - // DebuggingConfiguration holds configuration for Debugging related features - // TODO: We might wanna make this a substruct like Debugging componentbaseconfigv1alpha1.DebuggingConfiguration - componentbaseconfigv1alpha1.DebuggingConfiguration `json:",inline"` - - // PercentageOfNodesToScore is the percentage of all nodes that once found feasible - // for running a pod, the scheduler stops its search for more feasible nodes in - // the cluster. This helps improve scheduler's performance. Scheduler always tries to find - // at least "minFeasibleNodesToFind" feasible nodes no matter what the value of this flag is. - // Example: if the cluster size is 500 nodes and the value of this flag is 30, - // then scheduler stops finding further feasible nodes once it finds 150 feasible ones. - // When the value is 0, default percentage (5%--50% based on the size of the cluster) of the - // nodes will be scored. - PercentageOfNodesToScore *int32 `json:"percentageOfNodesToScore,omitempty"` - - // PodInitialBackoffSeconds is the initial backoff for unschedulable pods. - // If specified, it must be greater than 0. If this value is null, the default value (1s) - // will be used. - PodInitialBackoffSeconds *int64 `json:"podInitialBackoffSeconds,omitempty"` - - // PodMaxBackoffSeconds is the max backoff for unschedulable pods. - // If specified, it must be greater than podInitialBackoffSeconds. If this value is null, - // the default value (10s) will be used. - PodMaxBackoffSeconds *int64 `json:"podMaxBackoffSeconds,omitempty"` - - // Profiles are scheduling profiles that kube-scheduler supports. Pods can - // choose to be scheduled under a particular profile by setting its associated - // scheduler name. Pods that don't specify any scheduler name are scheduled - // with the "default-scheduler" profile, if present here. - // +listType=map - // +listMapKey=schedulerName - Profiles []KubeSchedulerProfile `json:"profiles,omitempty"` - - // Extenders are the list of scheduler extenders, each holding the values of how to communicate - // with the extender. These extenders are shared by all scheduler profiles. - // +listType=set - Extenders []Extender `json:"extenders,omitempty"` -} - -// DecodeNestedObjects decodes plugin args for known types. -func (c *KubeSchedulerConfiguration) DecodeNestedObjects(d runtime.Decoder) error { - for i := range c.Profiles { - prof := &c.Profiles[i] - for j := range prof.PluginConfig { - err := prof.PluginConfig[j].decodeNestedObjects(d) - if err != nil { - return fmt.Errorf("decoding .profiles[%d].pluginConfig[%d]: %w", i, j, err) - } - } - } - return nil -} - -// EncodeNestedObjects encodes plugin args. -func (c *KubeSchedulerConfiguration) EncodeNestedObjects(e runtime.Encoder) error { - for i := range c.Profiles { - prof := &c.Profiles[i] - for j := range prof.PluginConfig { - err := prof.PluginConfig[j].encodeNestedObjects(e) - if err != nil { - return fmt.Errorf("encoding .profiles[%d].pluginConfig[%d]: %w", i, j, err) - } - } - } - return nil -} - -// KubeSchedulerProfile is a scheduling profile. -type KubeSchedulerProfile struct { - // SchedulerName is the name of the scheduler associated to this profile. - // If SchedulerName matches with the pod's "spec.schedulerName", then the pod - // is scheduled with this profile. - SchedulerName *string `json:"schedulerName,omitempty"` - - // Plugins specify the set of plugins that should be enabled or disabled. - // Enabled plugins are the ones that should be enabled in addition to the - // default plugins. Disabled plugins are any of the default plugins that - // should be disabled. - // When no enabled or disabled plugin is specified for an extension point, - // default plugins for that extension point will be used if there is any. - // If a QueueSort plugin is specified, the same QueueSort Plugin and - // PluginConfig must be specified for all profiles. - Plugins *Plugins `json:"plugins,omitempty"` - - // PluginConfig is an optional set of custom plugin arguments for each plugin. - // Omitting config args for a plugin is equivalent to using the default config - // for that plugin. - // +listType=map - // +listMapKey=name - PluginConfig []PluginConfig `json:"pluginConfig,omitempty"` -} - -// Plugins include multiple extension points. When specified, the list of plugins for -// a particular extension point are the only ones enabled. If an extension point is -// omitted from the config, then the default set of plugins is used for that extension point. -// Enabled plugins are called in the order specified here, after default plugins. If they need to -// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order. -type Plugins struct { - // QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue. - QueueSort *PluginSet `json:"queueSort,omitempty"` - - // PreFilter is a list of plugins that should be invoked at "PreFilter" extension point of the scheduling framework. - PreFilter *PluginSet `json:"preFilter,omitempty"` - - // Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod. - Filter *PluginSet `json:"filter,omitempty"` - - // PostFilter is a list of plugins that are invoked after filtering phase, no matter whether filtering succeeds or not. - PostFilter *PluginSet `json:"postFilter,omitempty"` - - // PreScore is a list of plugins that are invoked before scoring. - PreScore *PluginSet `json:"preScore,omitempty"` - - // Score is a list of plugins that should be invoked when ranking nodes that have passed the filtering phase. - Score *PluginSet `json:"score,omitempty"` - - // Reserve is a list of plugins invoked when reserving/unreserving resources - // after a node is assigned to run the pod. - Reserve *PluginSet `json:"reserve,omitempty"` - - // Permit is a list of plugins that control binding of a Pod. These plugins can prevent or delay binding of a Pod. - Permit *PluginSet `json:"permit,omitempty"` - - // PreBind is a list of plugins that should be invoked before a pod is bound. - PreBind *PluginSet `json:"preBind,omitempty"` - - // Bind is a list of plugins that should be invoked at "Bind" extension point of the scheduling framework. - // The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success. - Bind *PluginSet `json:"bind,omitempty"` - - // PostBind is a list of plugins that should be invoked after a pod is successfully bound. - PostBind *PluginSet `json:"postBind,omitempty"` -} - -// PluginSet specifies enabled and disabled plugins for an extension point. -// If an array is empty, missing, or nil, default plugins at that extension point will be used. -type PluginSet struct { - // Enabled specifies plugins that should be enabled in addition to default plugins. - // These are called after default plugins and in the same order specified here. - // +listType=atomic - Enabled []Plugin `json:"enabled,omitempty"` - // Disabled specifies default plugins that should be disabled. - // When all default plugins need to be disabled, an array containing only one "*" should be provided. - // +listType=map - // +listMapKey=name - Disabled []Plugin `json:"disabled,omitempty"` -} - -// Plugin specifies a plugin name and its weight when applicable. Weight is used only for Score plugins. -type Plugin struct { - // Name defines the name of plugin - Name string `json:"name"` - // Weight defines the weight of plugin, only used for Score plugins. - Weight *int32 `json:"weight,omitempty"` -} - -// PluginConfig specifies arguments that should be passed to a plugin at the time of initialization. -// A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure. -// It is up to the plugin to process these Args. -type PluginConfig struct { - // Name defines the name of plugin being configured - Name string `json:"name"` - // Args defines the arguments passed to the plugins at the time of initialization. Args can have arbitrary structure. - Args runtime.RawExtension `json:"args,omitempty"` -} - -func (c *PluginConfig) decodeNestedObjects(d runtime.Decoder) error { - gvk := SchemeGroupVersion.WithKind(c.Name + "Args") - // dry-run to detect and skip out-of-tree plugin args. - if _, _, err := d.Decode(nil, &gvk, nil); runtime.IsNotRegisteredError(err) { - return nil - } - - obj, parsedGvk, err := d.Decode(c.Args.Raw, &gvk, nil) - if err != nil { - return fmt.Errorf("decoding args for plugin %s: %w", c.Name, err) - } - if parsedGvk.GroupKind() != gvk.GroupKind() { - return fmt.Errorf("args for plugin %s were not of type %s, got %s", c.Name, gvk.GroupKind(), parsedGvk.GroupKind()) - } - c.Args.Object = obj - return nil -} - -func (c *PluginConfig) encodeNestedObjects(e runtime.Encoder) error { - if c.Args.Object == nil { - return nil - } - var buf bytes.Buffer - err := e.Encode(c.Args.Object, &buf) - if err != nil { - return err - } - // The encoder might be a YAML encoder, but the parent encoder expects - // JSON output, so we convert YAML back to JSON. - // This is a no-op if produces JSON. - json, err := yaml.YAMLToJSON(buf.Bytes()) - if err != nil { - return err - } - c.Args.Raw = json - return nil -} - -// Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, -// it is assumed that the extender chose not to provide that extension. -type Extender struct { - // URLPrefix at which the extender is available - URLPrefix string `json:"urlPrefix"` - // Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender. - FilterVerb string `json:"filterVerb,omitempty"` - // Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender. - PreemptVerb string `json:"preemptVerb,omitempty"` - // Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender. - PrioritizeVerb string `json:"prioritizeVerb,omitempty"` - // The numeric multiplier for the node scores that the prioritize call generates. - // The weight should be a positive integer - Weight int64 `json:"weight,omitempty"` - // Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. - // If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender - // can implement this function. - BindVerb string `json:"bindVerb,omitempty"` - // EnableHTTPS specifies whether https should be used to communicate with the extender - EnableHTTPS bool `json:"enableHTTPS,omitempty"` - // TLSConfig specifies the transport layer security config - TLSConfig *v1.ExtenderTLSConfig `json:"tlsConfig,omitempty"` - // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize - // timeout is ignored, k8s/other extenders priorities are used to select the node. - HTTPTimeout metav1.Duration `json:"httpTimeout,omitempty"` - // NodeCacheCapable specifies that the extender is capable of caching node information, - // so the scheduler should only send minimal information about the eligible nodes - // assuming that the extender already cached full details of all nodes in the cluster - NodeCacheCapable bool `json:"nodeCacheCapable,omitempty"` - // ManagedResources is a list of extended resources that are managed by - // this extender. - // - A pod will be sent to the extender on the Filter, Prioritize and Bind - // (if the extender is the binder) phases iff the pod requests at least - // one of the extended resources in this list. If empty or unspecified, - // all pods will be sent to this extender. - // - If IgnoredByScheduler is set to true for a resource, kube-scheduler - // will skip checking the resource in predicates. - // +optional - // +listType=atomic - ManagedResources []v1.ExtenderManagedResource `json:"managedResources,omitempty"` - // Ignorable specifies if the extender is ignorable, i.e. scheduling should not - // fail when the extender returns an error or is not reachable. - Ignorable bool `json:"ignorable,omitempty"` -} diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types_pluginargs.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/types_pluginargs.go deleted file mode 100644 index 6ce798bb341a..000000000000 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/types_pluginargs.go +++ /dev/null @@ -1,310 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// DefaultPreemptionArgs holds arguments used to configure the -// DefaultPreemption plugin. -type DefaultPreemptionArgs struct { - metav1.TypeMeta `json:",inline"` - - // MinCandidateNodesPercentage is the minimum number of candidates to - // shortlist when dry running preemption as a percentage of number of nodes. - // Must be in the range [0, 100]. Defaults to 10% of the cluster size if - // unspecified. - MinCandidateNodesPercentage *int32 `json:"minCandidateNodesPercentage,omitempty"` - // MinCandidateNodesAbsolute is the absolute minimum number of candidates to - // shortlist. The likely number of candidates enumerated for dry running - // preemption is given by the formula: - // numCandidates = max(numNodes * minCandidateNodesPercentage, minCandidateNodesAbsolute) - // We say "likely" because there are other factors such as PDB violations - // that play a role in the number of candidates shortlisted. Must be at least - // 0 nodes. Defaults to 100 nodes if unspecified. - MinCandidateNodesAbsolute *int32 `json:"minCandidateNodesAbsolute,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// InterPodAffinityArgs holds arguments used to configure the InterPodAffinity plugin. -type InterPodAffinityArgs struct { - metav1.TypeMeta `json:",inline"` - - // HardPodAffinityWeight is the scoring weight for existing pods with a - // matching hard affinity to the incoming pod. - HardPodAffinityWeight *int32 `json:"hardPodAffinityWeight,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeLabelArgs holds arguments used to configure the NodeLabel plugin. -// -// This plugin has been deprecated and is only configurable through the -// scheduler policy API and the v1beta1 component config API. It is recommended -// to use the NodeAffinity plugin instead. -type NodeLabelArgs struct { - metav1.TypeMeta `json:",inline"` - - // PresentLabels should be present for the node to be considered a fit for hosting the pod - // +listType=atomic - PresentLabels []string `json:"presentLabels,omitempty"` - // AbsentLabels should be absent for the node to be considered a fit for hosting the pod - // +listType=atomic - AbsentLabels []string `json:"absentLabels,omitempty"` - // Nodes that have labels in the list will get a higher score. - // +listType=atomic - PresentLabelsPreference []string `json:"presentLabelsPreference,omitempty"` - // Nodes that don't have labels in the list will get a higher score. - // +listType=atomic - AbsentLabelsPreference []string `json:"absentLabelsPreference,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesFitArgs holds arguments used to configure the NodeResourcesFit plugin. -type NodeResourcesFitArgs struct { - metav1.TypeMeta `json:",inline"` - - // IgnoredResources is the list of resources that NodeResources fit filter - // should ignore. This doesn't apply to scoring. - // +listType=atomic - IgnoredResources []string `json:"ignoredResources,omitempty"` - // IgnoredResourceGroups defines the list of resource groups that NodeResources fit filter should ignore. - // e.g. if group is ["example.com"], it will ignore all resource names that begin - // with "example.com", such as "example.com/aaa" and "example.com/bbb". - // A resource group name can't contain '/'. This doesn't apply to scoring. - // +listType=atomic - IgnoredResourceGroups []string `json:"ignoredResourceGroups,omitempty"` - - // ScoringStrategy selects the node resource scoring strategy. - // The default strategy is LeastAllocated with an equal "cpu" and "memory" weight. - ScoringStrategy *ScoringStrategy `json:"scoringStrategy,omitempty"` -} - -// PodTopologySpreadConstraintsDefaulting defines how to set default constraints -// for the PodTopologySpread plugin. -type PodTopologySpreadConstraintsDefaulting string - -const ( - // SystemDefaulting instructs to use the kubernetes defined default. - SystemDefaulting PodTopologySpreadConstraintsDefaulting = "System" - // ListDefaulting instructs to use the config provided default. - ListDefaulting PodTopologySpreadConstraintsDefaulting = "List" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodTopologySpreadArgs holds arguments used to configure the PodTopologySpread plugin. -type PodTopologySpreadArgs struct { - metav1.TypeMeta `json:",inline"` - - // DefaultConstraints defines topology spread constraints to be applied to - // Pods that don't define any in `pod.spec.topologySpreadConstraints`. - // `.defaultConstraints[*].labelSelectors` must be empty, as they are - // deduced from the Pod's membership to Services, ReplicationControllers, - // ReplicaSets or StatefulSets. - // When not empty, .defaultingType must be "List". - // +optional - // +listType=atomic - DefaultConstraints []corev1.TopologySpreadConstraint `json:"defaultConstraints,omitempty"` - - // DefaultingType determines how .defaultConstraints are deduced. Can be one - // of "System" or "List". - // - // - "System": Use kubernetes defined constraints that spread Pods among - // Nodes and Zones. - // - "List": Use constraints defined in .defaultConstraints. - // - // Defaults to "List" if feature gate DefaultPodTopologySpread is disabled - // and to "System" if enabled. - // +optional - DefaultingType PodTopologySpreadConstraintsDefaulting `json:"defaultingType,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RequestedToCapacityRatioArgs holds arguments used to configure RequestedToCapacityRatio plugin. -type RequestedToCapacityRatioArgs struct { - metav1.TypeMeta `json:",inline"` - - // Points defining priority function shape - // +listType=atomic - Shape []UtilizationShapePoint `json:"shape"` - // Resources to be managed - // +listType=atomic - Resources []ResourceSpec `json:"resources,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesLeastAllocatedArgs holds arguments used to configure NodeResourcesLeastAllocated plugin. -type NodeResourcesLeastAllocatedArgs struct { - metav1.TypeMeta `json:",inline"` - - // Resources to be managed, if no resource is provided, default resource set with both - // the weight of "cpu" and "memory" set to "1" will be applied. - // Resource with "0" weight will not accountable for the final score. - // +listType=atomic - Resources []ResourceSpec `json:"resources,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesMostAllocatedArgs holds arguments used to configure NodeResourcesMostAllocated plugin. -type NodeResourcesMostAllocatedArgs struct { - metav1.TypeMeta `json:",inline"` - - // Resources to be managed, if no resource is provided, default resource set with both - // the weight of "cpu" and "memory" set to "1" will be applied. - // Resource with "0" weight will not accountable for the final score. - // +listType=atomic - Resources []ResourceSpec `json:"resources,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeResourcesBalancedAllocationArgs holds arguments used to configure NodeResourcesBalancedAllocation plugin. -type NodeResourcesBalancedAllocationArgs struct { - metav1.TypeMeta `json:",inline"` - - // Resources to be managed, the default is "cpu" and "memory" if not specified. - // +listType=map - // +listMapKey=name - Resources []ResourceSpec `json:"resources,omitempty"` -} - -// UtilizationShapePoint represents single point of priority function shape. -type UtilizationShapePoint struct { - // Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100. - Utilization int32 `json:"utilization"` - // Score assigned to given utilization (y axis). Valid values are 0 to 10. - Score int32 `json:"score"` -} - -// ResourceSpec represents a single resource. -type ResourceSpec struct { - // Name of the resource. - Name string `json:"name"` - // Weight of the resource. - Weight int64 `json:"weight,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ServiceAffinityArgs holds arguments used to configure the ServiceAffinity plugin. -// -// This plugin has been deprecated and is only configurable through the -// scheduler policy API and the v1beta1 component config API. It is recommended -// to use the InterPodAffinity plugin instead. -type ServiceAffinityArgs struct { - metav1.TypeMeta `json:",inline"` - - // AffinityLabels are homogeneous for pods that are scheduled to a node. - // (i.e. it returns true IFF this pod can be added to this node such that all other pods in - // the same service are running on nodes with the exact same values for Labels). - // +listType=atomic - AffinityLabels []string `json:"affinityLabels,omitempty"` - // AntiAffinityLabelsPreference are the labels to consider for service anti affinity scoring. - // +listType=atomic - AntiAffinityLabelsPreference []string `json:"antiAffinityLabelsPreference,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// VolumeBindingArgs holds arguments used to configure the VolumeBinding plugin. -type VolumeBindingArgs struct { - metav1.TypeMeta `json:",inline"` - - // BindTimeoutSeconds is the timeout in seconds in volume binding operation. - // Value must be non-negative integer. The value zero indicates no waiting. - // If this value is nil, the default value (600) will be used. - BindTimeoutSeconds *int64 `json:"bindTimeoutSeconds,omitempty"` - - // Shape specifies the points defining the score function shape, which is - // used to score nodes based on the utilization of statically provisioned - // PVs. The utilization is calculated by dividing the total requested - // storage of the pod by the total capacity of feasible PVs on each node. - // Each point contains utilization (ranges from 0 to 100) and its - // associated score (ranges from 0 to 10). You can turn the priority by - // specifying different scores for different utilization numbers. - // The default shape points are: - // 1) 0 for 0 utilization - // 2) 10 for 100 utilization - // All points must be sorted in increasing order by utilization. - // +featureGate=VolumeCapacityPriority - // +optional - // +listType=atomic - Shape []UtilizationShapePoint `json:"shape,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeAffinityArgs holds arguments to configure the NodeAffinity plugin. -type NodeAffinityArgs struct { - metav1.TypeMeta `json:",inline"` - - // AddedAffinity is applied to all Pods additionally to the NodeAffinity - // specified in the PodSpec. That is, Nodes need to satisfy AddedAffinity - // AND .spec.NodeAffinity. AddedAffinity is empty by default (all Nodes - // match). - // When AddedAffinity is used, some Pods with affinity requirements that match - // a specific Node (such as Daemonset Pods) might remain unschedulable. - // +optional - AddedAffinity *corev1.NodeAffinity `json:"addedAffinity,omitempty"` -} - -// ScoringStrategyType the type of scoring strategy used in NodeResourcesFit plugin. -type ScoringStrategyType string - -const ( - // LeastAllocated strategy prioritizes nodes with least allcoated resources. - LeastAllocated ScoringStrategyType = "LeastAllocated" - // MostAllocated strategy prioritizes nodes with most allcoated resources. - MostAllocated ScoringStrategyType = "MostAllocated" - // RequestedToCapacityRatio strategy allows specifying a custom shape function - // to score nodes based on the request to capacity ratio. - RequestedToCapacityRatio ScoringStrategyType = "RequestedToCapacityRatio" -) - -// ScoringStrategy define ScoringStrategyType for node resource plugin -type ScoringStrategy struct { - // Type selects which strategy to run. - Type ScoringStrategyType `json:"type,omitempty"` - - // Resources to consider when scoring. - // The default resource set includes "cpu" and "memory" with an equal weight. - // Allowed weights go from 1 to 100. - // Weight defaults to 1 if not specified or explicitly set to 0. - // +listType=map - // +listMapKey=name - Resources []ResourceSpec `json:"resources,omitempty"` - - // Arguments specific to RequestedToCapacityRatio strategy. - RequestedToCapacityRatio *RequestedToCapacityRatioParam `json:"requestedToCapacityRatio,omitempty"` -} - -// RequestedToCapacityRatioParam define RequestedToCapacityRatio parameters -type RequestedToCapacityRatioParam struct { - // Shape is a list of points defining the scoring function shape. - // +listType=atomic - Shape []UtilizationShapePoint `json:"shape,omitempty"` -} diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go deleted file mode 100644 index 83f0a071da55..000000000000 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta1/zz_generated.deepcopy.go +++ /dev/null @@ -1,785 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1beta1 - -import ( - corev1 "k8s.io/api/core/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - v1 "k8s.io/kube-scheduler/config/v1" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DefaultPreemptionArgs) DeepCopyInto(out *DefaultPreemptionArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.MinCandidateNodesPercentage != nil { - in, out := &in.MinCandidateNodesPercentage, &out.MinCandidateNodesPercentage - *out = new(int32) - **out = **in - } - if in.MinCandidateNodesAbsolute != nil { - in, out := &in.MinCandidateNodesAbsolute, &out.MinCandidateNodesAbsolute - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DefaultPreemptionArgs. -func (in *DefaultPreemptionArgs) DeepCopy() *DefaultPreemptionArgs { - if in == nil { - return nil - } - out := new(DefaultPreemptionArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DefaultPreemptionArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Extender) DeepCopyInto(out *Extender) { - *out = *in - if in.TLSConfig != nil { - in, out := &in.TLSConfig, &out.TLSConfig - *out = new(v1.ExtenderTLSConfig) - (*in).DeepCopyInto(*out) - } - out.HTTPTimeout = in.HTTPTimeout - if in.ManagedResources != nil { - in, out := &in.ManagedResources, &out.ManagedResources - *out = make([]v1.ExtenderManagedResource, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Extender. -func (in *Extender) DeepCopy() *Extender { - if in == nil { - return nil - } - out := new(Extender) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *InterPodAffinityArgs) DeepCopyInto(out *InterPodAffinityArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.HardPodAffinityWeight != nil { - in, out := &in.HardPodAffinityWeight, &out.HardPodAffinityWeight - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterPodAffinityArgs. -func (in *InterPodAffinityArgs) DeepCopy() *InterPodAffinityArgs { - if in == nil { - return nil - } - out := new(InterPodAffinityArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *InterPodAffinityArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KubeSchedulerConfiguration) DeepCopyInto(out *KubeSchedulerConfiguration) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Parallelism != nil { - in, out := &in.Parallelism, &out.Parallelism - *out = new(int32) - **out = **in - } - in.LeaderElection.DeepCopyInto(&out.LeaderElection) - out.ClientConnection = in.ClientConnection - if in.HealthzBindAddress != nil { - in, out := &in.HealthzBindAddress, &out.HealthzBindAddress - *out = new(string) - **out = **in - } - if in.MetricsBindAddress != nil { - in, out := &in.MetricsBindAddress, &out.MetricsBindAddress - *out = new(string) - **out = **in - } - in.DebuggingConfiguration.DeepCopyInto(&out.DebuggingConfiguration) - if in.PercentageOfNodesToScore != nil { - in, out := &in.PercentageOfNodesToScore, &out.PercentageOfNodesToScore - *out = new(int32) - **out = **in - } - if in.PodInitialBackoffSeconds != nil { - in, out := &in.PodInitialBackoffSeconds, &out.PodInitialBackoffSeconds - *out = new(int64) - **out = **in - } - if in.PodMaxBackoffSeconds != nil { - in, out := &in.PodMaxBackoffSeconds, &out.PodMaxBackoffSeconds - *out = new(int64) - **out = **in - } - if in.Profiles != nil { - in, out := &in.Profiles, &out.Profiles - *out = make([]KubeSchedulerProfile, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Extenders != nil { - in, out := &in.Extenders, &out.Extenders - *out = make([]Extender, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeSchedulerConfiguration. -func (in *KubeSchedulerConfiguration) DeepCopy() *KubeSchedulerConfiguration { - if in == nil { - return nil - } - out := new(KubeSchedulerConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KubeSchedulerConfiguration) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KubeSchedulerProfile) DeepCopyInto(out *KubeSchedulerProfile) { - *out = *in - if in.SchedulerName != nil { - in, out := &in.SchedulerName, &out.SchedulerName - *out = new(string) - **out = **in - } - if in.Plugins != nil { - in, out := &in.Plugins, &out.Plugins - *out = new(Plugins) - (*in).DeepCopyInto(*out) - } - if in.PluginConfig != nil { - in, out := &in.PluginConfig, &out.PluginConfig - *out = make([]PluginConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeSchedulerProfile. -func (in *KubeSchedulerProfile) DeepCopy() *KubeSchedulerProfile { - if in == nil { - return nil - } - out := new(KubeSchedulerProfile) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeAffinityArgs) DeepCopyInto(out *NodeAffinityArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.AddedAffinity != nil { - in, out := &in.AddedAffinity, &out.AddedAffinity - *out = new(corev1.NodeAffinity) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeAffinityArgs. -func (in *NodeAffinityArgs) DeepCopy() *NodeAffinityArgs { - if in == nil { - return nil - } - out := new(NodeAffinityArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeAffinityArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeLabelArgs) DeepCopyInto(out *NodeLabelArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.PresentLabels != nil { - in, out := &in.PresentLabels, &out.PresentLabels - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.AbsentLabels != nil { - in, out := &in.AbsentLabels, &out.AbsentLabels - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.PresentLabelsPreference != nil { - in, out := &in.PresentLabelsPreference, &out.PresentLabelsPreference - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.AbsentLabelsPreference != nil { - in, out := &in.AbsentLabelsPreference, &out.AbsentLabelsPreference - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeLabelArgs. -func (in *NodeLabelArgs) DeepCopy() *NodeLabelArgs { - if in == nil { - return nil - } - out := new(NodeLabelArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeLabelArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopyInto(out *NodeResourcesBalancedAllocationArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesBalancedAllocationArgs. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopy() *NodeResourcesBalancedAllocationArgs { - if in == nil { - return nil - } - out := new(NodeResourcesBalancedAllocationArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesBalancedAllocationArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesFitArgs) DeepCopyInto(out *NodeResourcesFitArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.IgnoredResources != nil { - in, out := &in.IgnoredResources, &out.IgnoredResources - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.IgnoredResourceGroups != nil { - in, out := &in.IgnoredResourceGroups, &out.IgnoredResourceGroups - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ScoringStrategy != nil { - in, out := &in.ScoringStrategy, &out.ScoringStrategy - *out = new(ScoringStrategy) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesFitArgs. -func (in *NodeResourcesFitArgs) DeepCopy() *NodeResourcesFitArgs { - if in == nil { - return nil - } - out := new(NodeResourcesFitArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesFitArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesLeastAllocatedArgs) DeepCopyInto(out *NodeResourcesLeastAllocatedArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesLeastAllocatedArgs. -func (in *NodeResourcesLeastAllocatedArgs) DeepCopy() *NodeResourcesLeastAllocatedArgs { - if in == nil { - return nil - } - out := new(NodeResourcesLeastAllocatedArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesLeastAllocatedArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResourcesMostAllocatedArgs) DeepCopyInto(out *NodeResourcesMostAllocatedArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResourcesMostAllocatedArgs. -func (in *NodeResourcesMostAllocatedArgs) DeepCopy() *NodeResourcesMostAllocatedArgs { - if in == nil { - return nil - } - out := new(NodeResourcesMostAllocatedArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeResourcesMostAllocatedArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Plugin) DeepCopyInto(out *Plugin) { - *out = *in - if in.Weight != nil { - in, out := &in.Weight, &out.Weight - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Plugin. -func (in *Plugin) DeepCopy() *Plugin { - if in == nil { - return nil - } - out := new(Plugin) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PluginConfig) DeepCopyInto(out *PluginConfig) { - *out = *in - in.Args.DeepCopyInto(&out.Args) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginConfig. -func (in *PluginConfig) DeepCopy() *PluginConfig { - if in == nil { - return nil - } - out := new(PluginConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PluginSet) DeepCopyInto(out *PluginSet) { - *out = *in - if in.Enabled != nil { - in, out := &in.Enabled, &out.Enabled - *out = make([]Plugin, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Disabled != nil { - in, out := &in.Disabled, &out.Disabled - *out = make([]Plugin, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginSet. -func (in *PluginSet) DeepCopy() *PluginSet { - if in == nil { - return nil - } - out := new(PluginSet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Plugins) DeepCopyInto(out *Plugins) { - *out = *in - if in.QueueSort != nil { - in, out := &in.QueueSort, &out.QueueSort - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.PreFilter != nil { - in, out := &in.PreFilter, &out.PreFilter - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.Filter != nil { - in, out := &in.Filter, &out.Filter - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.PostFilter != nil { - in, out := &in.PostFilter, &out.PostFilter - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.PreScore != nil { - in, out := &in.PreScore, &out.PreScore - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.Score != nil { - in, out := &in.Score, &out.Score - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.Reserve != nil { - in, out := &in.Reserve, &out.Reserve - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.Permit != nil { - in, out := &in.Permit, &out.Permit - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.PreBind != nil { - in, out := &in.PreBind, &out.PreBind - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.Bind != nil { - in, out := &in.Bind, &out.Bind - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - if in.PostBind != nil { - in, out := &in.PostBind, &out.PostBind - *out = new(PluginSet) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Plugins. -func (in *Plugins) DeepCopy() *Plugins { - if in == nil { - return nil - } - out := new(Plugins) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodTopologySpreadArgs) DeepCopyInto(out *PodTopologySpreadArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.DefaultConstraints != nil { - in, out := &in.DefaultConstraints, &out.DefaultConstraints - *out = make([]corev1.TopologySpreadConstraint, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTopologySpreadArgs. -func (in *PodTopologySpreadArgs) DeepCopy() *PodTopologySpreadArgs { - if in == nil { - return nil - } - out := new(PodTopologySpreadArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodTopologySpreadArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RequestedToCapacityRatioArgs) DeepCopyInto(out *RequestedToCapacityRatioArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Shape != nil { - in, out := &in.Shape, &out.Shape - *out = make([]UtilizationShapePoint, len(*in)) - copy(*out, *in) - } - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestedToCapacityRatioArgs. -func (in *RequestedToCapacityRatioArgs) DeepCopy() *RequestedToCapacityRatioArgs { - if in == nil { - return nil - } - out := new(RequestedToCapacityRatioArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RequestedToCapacityRatioArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RequestedToCapacityRatioParam) DeepCopyInto(out *RequestedToCapacityRatioParam) { - *out = *in - if in.Shape != nil { - in, out := &in.Shape, &out.Shape - *out = make([]UtilizationShapePoint, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestedToCapacityRatioParam. -func (in *RequestedToCapacityRatioParam) DeepCopy() *RequestedToCapacityRatioParam { - if in == nil { - return nil - } - out := new(RequestedToCapacityRatioParam) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceSpec. -func (in *ResourceSpec) DeepCopy() *ResourceSpec { - if in == nil { - return nil - } - out := new(ResourceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ScoringStrategy) DeepCopyInto(out *ScoringStrategy) { - *out = *in - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]ResourceSpec, len(*in)) - copy(*out, *in) - } - if in.RequestedToCapacityRatio != nil { - in, out := &in.RequestedToCapacityRatio, &out.RequestedToCapacityRatio - *out = new(RequestedToCapacityRatioParam) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScoringStrategy. -func (in *ScoringStrategy) DeepCopy() *ScoringStrategy { - if in == nil { - return nil - } - out := new(ScoringStrategy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceAffinityArgs) DeepCopyInto(out *ServiceAffinityArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.AffinityLabels != nil { - in, out := &in.AffinityLabels, &out.AffinityLabels - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.AntiAffinityLabelsPreference != nil { - in, out := &in.AntiAffinityLabelsPreference, &out.AntiAffinityLabelsPreference - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAffinityArgs. -func (in *ServiceAffinityArgs) DeepCopy() *ServiceAffinityArgs { - if in == nil { - return nil - } - out := new(ServiceAffinityArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ServiceAffinityArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UtilizationShapePoint) DeepCopyInto(out *UtilizationShapePoint) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UtilizationShapePoint. -func (in *UtilizationShapePoint) DeepCopy() *UtilizationShapePoint { - if in == nil { - return nil - } - out := new(UtilizationShapePoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeBindingArgs) DeepCopyInto(out *VolumeBindingArgs) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.BindTimeoutSeconds != nil { - in, out := &in.BindTimeoutSeconds, &out.BindTimeoutSeconds - *out = new(int64) - **out = **in - } - if in.Shape != nil { - in, out := &in.Shape, &out.Shape - *out = make([]UtilizationShapePoint, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeBindingArgs. -func (in *VolumeBindingArgs) DeepCopy() *VolumeBindingArgs { - if in == nil { - return nil - } - out := new(VolumeBindingArgs) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *VolumeBindingArgs) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/test/integration/scheduler/queue_test.go b/test/integration/scheduler/queue_test.go index 42902195ccad..891d09fbb8d2 100644 --- a/test/integration/scheduler/queue_test.go +++ b/test/integration/scheduler/queue_test.go @@ -34,13 +34,11 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" - "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kube-scheduler/config/v1beta2" apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" "k8s.io/kubernetes/pkg/scheduler" configtesting "k8s.io/kubernetes/pkg/scheduler/apis/config/testing" "k8s.io/kubernetes/pkg/scheduler/framework" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/serviceaffinity" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" st "k8s.io/kubernetes/pkg/scheduler/testing" testfwk "k8s.io/kubernetes/test/integration/framework" @@ -49,126 +47,7 @@ import ( "k8s.io/utils/pointer" ) -func TestServiceAffinityEnqueue(t *testing.T) { - cfg := configtesting.V1beta1ToInternalWithDefaults(t, v1beta1.KubeSchedulerConfiguration{ - Profiles: []v1beta1.KubeSchedulerProfile{{ - SchedulerName: pointer.StringPtr(v1.DefaultSchedulerName), - Plugins: &v1beta1.Plugins{ - PreFilter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: serviceaffinity.Name}, - }, - }, - Filter: &v1beta1.PluginSet{ - Enabled: []v1beta1.Plugin{ - {Name: serviceaffinity.Name}, - }, - }, - }, - PluginConfig: []v1beta1.PluginConfig{ - { - Name: serviceaffinity.Name, - Args: runtime.RawExtension{ - Object: &v1beta1.ServiceAffinityArgs{ - AffinityLabels: []string{"hostname"}, - }, - }, - }, - }, - }}, - }) - - // Use zero backoff seconds to bypass backoffQ. - testCtx := testutils.InitTestSchedulerWithOptions( - t, - testutils.InitTestAPIServer(t, "serviceaffinity-enqueue", nil), - nil, - scheduler.WithProfiles(cfg.Profiles...), - scheduler.WithPodInitialBackoffSeconds(0), - scheduler.WithPodMaxBackoffSeconds(0), - ) - testutils.SyncInformerFactory(testCtx) - // It's intended to not start the scheduler's queue, and hence to - // not start any flushing logic. We will pop and schedule the Pods manually later. - defer testutils.CleanupTest(t, testCtx) - - cs, ns, ctx := testCtx.ClientSet, testCtx.NS.Name, testCtx.Ctx - // Create two Nodes. - for i := 1; i <= 2; i++ { - nodeName := fmt.Sprintf("node%d", i) - capacity := map[v1.ResourceName]string{v1.ResourcePods: "1"} - node := st.MakeNode().Name(nodeName).Label("hostname", nodeName).Capacity(capacity).Obj() - if _, err := cs.CoreV1().Nodes().Create(ctx, node, metav1.CreateOptions{}); err != nil { - t.Fatalf("Failed to create Node %q: %v", nodeName, err) - } - } - - // Create a Service. - svc := &v1.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "svc", - }, - Spec: v1.ServiceSpec{ - Ports: []v1.ServicePort{{Port: int32(80)}}, - Selector: map[string]string{"foo": "bar"}, - }, - } - if _, err := cs.CoreV1().Services(ns).Create(ctx, svc, metav1.CreateOptions{}); err != nil { - t.Fatalf("Failed to create Service %q: %v", svc.Name, err) - } - - // Create two Pods. - pause := imageutils.GetPauseImageName() - for i := 1; i <= 2; i++ { - podName := fmt.Sprintf("pod%d", i) - pod := st.MakePod().Namespace(ns).Name(podName).Label("foo", "bar").Container(pause).Obj() - // Make Pod1 an assigned Pod. - if i == 1 { - pod.Spec.NodeName = fmt.Sprintf("node%d", i) - } - if _, err := cs.CoreV1().Pods(ns).Create(ctx, pod, metav1.CreateOptions{}); err != nil { - t.Fatalf("Failed to create Pod %q: %v", pod.Name, err) - } - } - - // Wait for pod2 to be present in the scheduling queue. - if err := wait.Poll(time.Millisecond*200, wait.ForeverTestTimeout, func() (bool, error) { - return len(testCtx.Scheduler.SchedulingQueue.PendingPods()) == 1, nil - }); err != nil { - t.Fatal(err) - } - - // Pop Pod2 out. It should be unschedulable. - podInfo := nextPodOrDie(t, testCtx) - fwk, ok := testCtx.Scheduler.Profiles[podInfo.Pod.Spec.SchedulerName] - if !ok { - t.Fatalf("Cannot find the profile for Pod %v", podInfo.Pod.Name) - } - // Schedule the Pod manually. - _, fitError := testCtx.Scheduler.Algorithm.Schedule(ctx, nil, fwk, framework.NewCycleState(), podInfo.Pod) - // The fitError is expected to be: - // 0/2 nodes are available: 1 Too many pods, 1 node(s) didn't match service affinity. - if fitError == nil { - t.Fatalf("Expect Pod %v to fail at scheduling.", podInfo.Pod.Name) - } - testCtx.Scheduler.Error(podInfo, fitError) - - // Scheduling cycle is incremented from 0 to 1 after NextPod() is called, so - // pass a number larger than 1 to move Pod to unschedulableQ. - testCtx.Scheduler.SchedulingQueue.AddUnschedulableIfNotPresent(podInfo, 10) - - // Trigger a Service event. - // We expect this event to trigger moving the test Pod from unschedulableQ to activeQ. - if err := cs.CoreV1().Services(ns).Delete(ctx, "svc", metav1.DeleteOptions{}); err != nil { - t.Fatalf("Failed to delete service 'svc': %v", err) - } - - // Now we should be able to pop the Pod from activeQ again. - podInfo = nextPodOrDie(t, testCtx) - if podInfo.Attempts != 2 { - t.Errorf("Expected the Pod to be attempted 2 times, but got %v", podInfo.Attempts) - } -} +// TODO(#105303): Add a test case to cover event registration for core API resources var _ framework.FilterPlugin = &fakeCRPlugin{} var _ framework.EnqueueExtensions = &fakeCRPlugin{} diff --git a/test/integration/scheduler_perf/util.go b/test/integration/scheduler_perf/util.go index 1ab813ab4660..18f2f7cb8eb6 100644 --- a/test/integration/scheduler_perf/util.go +++ b/test/integration/scheduler_perf/util.go @@ -41,7 +41,7 @@ import ( "k8s.io/component-base/metrics/legacyregistry" "k8s.io/component-base/metrics/testutil" "k8s.io/klog/v2" - "k8s.io/kube-scheduler/config/v1beta1" + "k8s.io/kube-scheduler/config/v1beta2" "k8s.io/kubernetes/pkg/scheduler/apis/config" kubeschedulerscheme "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" "k8s.io/kubernetes/test/integration/util" @@ -58,7 +58,7 @@ const ( var dataItemsDir = flag.String("data-items-dir", "", "destination directory for storing generated data items for perf dashboard") func newDefaultComponentConfig() (*config.KubeSchedulerConfiguration, error) { - gvk := v1beta1.SchemeGroupVersion.WithKind("KubeSchedulerConfiguration") + gvk := v1beta2.SchemeGroupVersion.WithKind("KubeSchedulerConfiguration") cfg := config.KubeSchedulerConfiguration{} _, _, err := kubeschedulerscheme.Codecs.UniversalDecoder().Decode(nil, &gvk, &cfg) if err != nil { diff --git a/vendor/modules.txt b/vendor/modules.txt index 18b3f39ef90c..f9879c3439cb 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2076,7 +2076,6 @@ k8s.io/kube-proxy/config/v1alpha1 # k8s.io/kube-scheduler v0.0.0 => ./staging/src/k8s.io/kube-scheduler ## explicit k8s.io/kube-scheduler/config/v1 -k8s.io/kube-scheduler/config/v1beta1 k8s.io/kube-scheduler/config/v1beta2 k8s.io/kube-scheduler/extender/v1 # k8s.io/kubectl v0.0.0 => ./staging/src/k8s.io/kubectl