mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
API, Codegen, UT for PreEnqueue extension point
This commit is contained in:
parent
7369bd27e0
commit
2de75d92bf
21
pkg/generated/openapi/zz_generated.openapi.go
generated
21
pkg/generated/openapi/zz_generated.openapi.go
generated
@ -52981,6 +52981,13 @@ func schema_k8sio_kube_scheduler_config_v1_Plugins(ref common.ReferenceCallback)
|
|||||||
Description: "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.",
|
Description: "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: []string{"object"},
|
Type: []string{"object"},
|
||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
|
"preEnqueue": {
|
||||||
|
SchemaProps: spec.SchemaProps{
|
||||||
|
Description: "PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.",
|
||||||
|
Default: map[string]interface{}{},
|
||||||
|
Ref: ref("k8s.io/kube-scheduler/config/v1.PluginSet"),
|
||||||
|
},
|
||||||
|
},
|
||||||
"queueSort": {
|
"queueSort": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
||||||
@ -54085,6 +54092,13 @@ func schema_k8sio_kube_scheduler_config_v1beta2_Plugins(ref common.ReferenceCall
|
|||||||
Description: "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.",
|
Description: "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: []string{"object"},
|
Type: []string{"object"},
|
||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
|
"preEnqueue": {
|
||||||
|
SchemaProps: spec.SchemaProps{
|
||||||
|
Description: "PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.",
|
||||||
|
Default: map[string]interface{}{},
|
||||||
|
Ref: ref("k8s.io/kube-scheduler/config/v1beta2.PluginSet"),
|
||||||
|
},
|
||||||
|
},
|
||||||
"queueSort": {
|
"queueSort": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
||||||
@ -55175,6 +55189,13 @@ func schema_k8sio_kube_scheduler_config_v1beta3_Plugins(ref common.ReferenceCall
|
|||||||
Description: "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.",
|
Description: "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: []string{"object"},
|
Type: []string{"object"},
|
||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
|
"preEnqueue": {
|
||||||
|
SchemaProps: spec.SchemaProps{
|
||||||
|
Description: "PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.",
|
||||||
|
Default: map[string]interface{}{},
|
||||||
|
Ref: ref("k8s.io/kube-scheduler/config/v1beta3.PluginSet"),
|
||||||
|
},
|
||||||
|
},
|
||||||
"queueSort": {
|
"queueSort": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.",
|
||||||
|
@ -138,6 +138,9 @@ type KubeSchedulerProfile struct {
|
|||||||
// Enabled plugins are called in the order specified here, after default plugins. If they need to
|
// 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.
|
// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
|
||||||
type Plugins struct {
|
type Plugins struct {
|
||||||
|
// PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.
|
||||||
|
PreEnqueue PluginSet
|
||||||
|
|
||||||
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
||||||
QueueSort PluginSet
|
QueueSort PluginSet
|
||||||
|
|
||||||
@ -231,6 +234,7 @@ func (p *Plugins) Names() []string {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
extensions := []PluginSet{
|
extensions := []PluginSet{
|
||||||
|
p.PreEnqueue,
|
||||||
p.PreFilter,
|
p.PreFilter,
|
||||||
p.Filter,
|
p.Filter,
|
||||||
p.PostFilter,
|
p.PostFilter,
|
||||||
|
@ -18,8 +18,10 @@ package v1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
v1 "k8s.io/kube-scheduler/config/v1"
|
v1 "k8s.io/kube-scheduler/config/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
@ -52,10 +54,17 @@ func getDefaultPlugins() *v1.Plugins {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
applyFeatureGates(plugins)
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func applyFeatureGates(config *v1.Plugins) {
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.PodSchedulingReadiness) {
|
||||||
|
config.MultiPoint.Enabled = append(config.MultiPoint.Enabled, v1.Plugin{Name: names.SchedulingGates})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
||||||
func mergePlugins(defaultPlugins, customPlugins *v1.Plugins) *v1.Plugins {
|
func mergePlugins(defaultPlugins, customPlugins *v1.Plugins) *v1.Plugins {
|
||||||
if customPlugins == nil {
|
if customPlugins == nil {
|
||||||
@ -63,6 +72,7 @@ func mergePlugins(defaultPlugins, customPlugins *v1.Plugins) *v1.Plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaultPlugins.MultiPoint = mergePluginSet(defaultPlugins.MultiPoint, customPlugins.MultiPoint)
|
defaultPlugins.MultiPoint = mergePluginSet(defaultPlugins.MultiPoint, customPlugins.MultiPoint)
|
||||||
|
defaultPlugins.PreEnqueue = mergePluginSet(defaultPlugins.PreEnqueue, customPlugins.PreEnqueue)
|
||||||
defaultPlugins.QueueSort = mergePluginSet(defaultPlugins.QueueSort, customPlugins.QueueSort)
|
defaultPlugins.QueueSort = mergePluginSet(defaultPlugins.QueueSort, customPlugins.QueueSort)
|
||||||
defaultPlugins.PreFilter = mergePluginSet(defaultPlugins.PreFilter, customPlugins.PreFilter)
|
defaultPlugins.PreFilter = mergePluginSet(defaultPlugins.PreFilter, customPlugins.PreFilter)
|
||||||
defaultPlugins.Filter = mergePluginSet(defaultPlugins.Filter, customPlugins.Filter)
|
defaultPlugins.Filter = mergePluginSet(defaultPlugins.Filter, customPlugins.Filter)
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||||
v1 "k8s.io/kube-scheduler/config/v1"
|
v1 "k8s.io/kube-scheduler/config/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
@ -63,6 +64,39 @@ func TestApplyFeatureGates(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Feature gate PodSchedulingReadiness enabled",
|
||||||
|
features: map[featuregate.Feature]bool{
|
||||||
|
features.PodSchedulingReadiness: true,
|
||||||
|
},
|
||||||
|
wantConfig: &v1.Plugins{
|
||||||
|
MultiPoint: v1.PluginSet{
|
||||||
|
Enabled: []v1.Plugin{
|
||||||
|
{Name: names.PrioritySort},
|
||||||
|
{Name: names.NodeUnschedulable},
|
||||||
|
{Name: names.NodeName},
|
||||||
|
{Name: names.TaintToleration, Weight: pointer.Int32(3)},
|
||||||
|
{Name: names.NodeAffinity, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.NodePorts},
|
||||||
|
{Name: names.NodeResourcesFit, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.VolumeRestrictions},
|
||||||
|
{Name: names.EBSLimits},
|
||||||
|
{Name: names.GCEPDLimits},
|
||||||
|
{Name: names.NodeVolumeLimits},
|
||||||
|
{Name: names.AzureDiskLimits},
|
||||||
|
{Name: names.VolumeBinding},
|
||||||
|
{Name: names.VolumeZone},
|
||||||
|
{Name: names.PodTopologySpread, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.InterPodAffinity, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.DefaultPreemption},
|
||||||
|
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.ImageLocality, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.DefaultBinder},
|
||||||
|
{Name: names.SchedulingGates},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
@ -53,6 +53,7 @@ func pluginsNames(p *configv1.Plugins) []string {
|
|||||||
p.Bind,
|
p.Bind,
|
||||||
p.PostBind,
|
p.PostBind,
|
||||||
p.Permit,
|
p.Permit,
|
||||||
|
p.PreEnqueue,
|
||||||
p.QueueSort,
|
p.QueueSort,
|
||||||
}
|
}
|
||||||
n := sets.NewString()
|
n := sets.NewString()
|
||||||
|
@ -712,6 +712,9 @@ func Convert_config_PluginSet_To_v1_PluginSet(in *config.PluginSet, out *v1.Plug
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1_Plugins_To_config_Plugins(in *v1.Plugins, out *config.Plugins, s conversion.Scope) error {
|
func autoConvert_v1_Plugins_To_config_Plugins(in *v1.Plugins, out *config.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_v1_PluginSet_To_config_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_v1_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_v1_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -757,6 +760,9 @@ func Convert_v1_Plugins_To_config_Plugins(in *v1.Plugins, out *config.Plugins, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_config_Plugins_To_v1_Plugins(in *config.Plugins, out *v1.Plugins, s conversion.Scope) error {
|
func autoConvert_config_Plugins_To_v1_Plugins(in *config.Plugins, out *v1.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_config_PluginSet_To_v1_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_config_PluginSet_To_v1_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_config_PluginSet_To_v1_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -111,3 +111,7 @@ func convertToExternalPluginConfigArgs(out *v1beta2.KubeSchedulerConfiguration)
|
|||||||
func Convert_config_KubeSchedulerProfile_To_v1beta2_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta2.KubeSchedulerProfile, s conversion.Scope) error {
|
func Convert_config_KubeSchedulerProfile_To_v1beta2_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta2.KubeSchedulerProfile, s conversion.Scope) error {
|
||||||
return autoConvert_config_KubeSchedulerProfile_To_v1beta2_KubeSchedulerProfile(in, out, s)
|
return autoConvert_config_KubeSchedulerProfile_To_v1beta2_KubeSchedulerProfile(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Convert_config_Plugins_To_v1beta2_Plugins(in *config.Plugins, out *v1beta2.Plugins, s conversion.Scope) error {
|
||||||
|
return autoConvert_config_Plugins_To_v1beta2_Plugins(in, out, s)
|
||||||
|
}
|
||||||
|
@ -116,6 +116,9 @@ func applyFeatureGates(config *v1beta2.Plugins) {
|
|||||||
if utilfeature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) {
|
if utilfeature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) {
|
||||||
config.Score.Enabled = append(config.Score.Enabled, v1beta2.Plugin{Name: names.VolumeBinding, Weight: pointer.Int32(1)})
|
config.Score.Enabled = append(config.Score.Enabled, v1beta2.Plugin{Name: names.VolumeBinding, Weight: pointer.Int32(1)})
|
||||||
}
|
}
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.PodSchedulingReadiness) {
|
||||||
|
config.PreEnqueue.Enabled = append(config.PreEnqueue.Enabled, v1beta2.Plugin{Name: names.SchedulingGates})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||||
"k8s.io/kube-scheduler/config/v1beta2"
|
"k8s.io/kube-scheduler/config/v1beta2"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
@ -113,6 +114,93 @@ func TestApplyFeatureGates(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Feature gate PodSchedulingReadiness enabled",
|
||||||
|
features: map[featuregate.Feature]bool{
|
||||||
|
features.PodSchedulingReadiness: true,
|
||||||
|
},
|
||||||
|
wantConfig: &v1beta2.Plugins{
|
||||||
|
PreEnqueue: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.SchedulingGates},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
QueueSort: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.PrioritySort},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PreFilter: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.NodeResourcesFit},
|
||||||
|
{Name: names.NodePorts},
|
||||||
|
{Name: names.VolumeRestrictions},
|
||||||
|
{Name: names.PodTopologySpread},
|
||||||
|
{Name: names.InterPodAffinity},
|
||||||
|
{Name: names.VolumeBinding},
|
||||||
|
{Name: names.NodeAffinity},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Filter: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.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: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.DefaultPreemption},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PreScore: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.InterPodAffinity},
|
||||||
|
{Name: names.PodTopologySpread},
|
||||||
|
{Name: names.TaintToleration},
|
||||||
|
{Name: names.NodeAffinity},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Score: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.ImageLocality, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.InterPodAffinity, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.NodeResourcesFit, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.NodeAffinity, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.PodTopologySpread, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.TaintToleration, Weight: pointer.Int32(1)},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Reserve: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.VolumeBinding},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PreBind: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.VolumeBinding},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Bind: v1beta2.PluginSet{
|
||||||
|
Enabled: []v1beta2.Plugin{
|
||||||
|
{Name: names.DefaultBinder},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
@ -160,11 +160,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.AddGeneratedConversionFunc((*config.Plugins)(nil), (*v1beta2.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_config_Plugins_To_v1beta2_Plugins(a.(*config.Plugins), b.(*v1beta2.Plugins), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta2.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddGeneratedConversionFunc((*v1beta2.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta2_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta2.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope)
|
return Convert_v1beta2_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta2.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -235,6 +230,11 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := s.AddConversionFunc((*config.Plugins)(nil), (*v1beta2.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_config_Plugins_To_v1beta2_Plugins(a.(*config.Plugins), b.(*v1beta2.Plugins), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := s.AddConversionFunc((*v1beta2.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddConversionFunc((*v1beta2.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta2_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta2.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope)
|
return Convert_v1beta2_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta2.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -716,6 +716,9 @@ func Convert_config_PluginSet_To_v1beta2_PluginSet(in *config.PluginSet, out *v1
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1beta2_Plugins_To_config_Plugins(in *v1beta2.Plugins, out *config.Plugins, s conversion.Scope) error {
|
func autoConvert_v1beta2_Plugins_To_config_Plugins(in *v1beta2.Plugins, out *config.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_v1beta2_PluginSet_To_config_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_v1beta2_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_v1beta2_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -761,6 +764,9 @@ func Convert_v1beta2_Plugins_To_config_Plugins(in *v1beta2.Plugins, out *config.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_config_Plugins_To_v1beta2_Plugins(in *config.Plugins, out *v1beta2.Plugins, s conversion.Scope) error {
|
func autoConvert_config_Plugins_To_v1beta2_Plugins(in *config.Plugins, out *v1beta2.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_config_PluginSet_To_v1beta2_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_config_PluginSet_To_v1beta2_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_config_PluginSet_To_v1beta2_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -800,11 +806,6 @@ func autoConvert_config_Plugins_To_v1beta2_Plugins(in *config.Plugins, out *v1be
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_config_Plugins_To_v1beta2_Plugins is an autogenerated conversion function.
|
|
||||||
func Convert_config_Plugins_To_v1beta2_Plugins(in *config.Plugins, out *v1beta2.Plugins, s conversion.Scope) error {
|
|
||||||
return autoConvert_config_Plugins_To_v1beta2_Plugins(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_v1beta2_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta2.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
func autoConvert_v1beta2_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta2.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||||
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
||||||
out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
||||||
|
@ -111,3 +111,8 @@ func convertToExternalPluginConfigArgs(out *v1beta3.KubeSchedulerConfiguration)
|
|||||||
func Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error {
|
func Convert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in *config.KubeSchedulerProfile, out *v1beta3.KubeSchedulerProfile, s conversion.Scope) error {
|
||||||
return autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in, out, s)
|
return autoConvert_config_KubeSchedulerProfile_To_v1beta3_KubeSchedulerProfile(in, out, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert_config_Plugins_To_v1beta3_Plugins is an autogenerated conversion function.
|
||||||
|
func Convert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
||||||
|
return autoConvert_config_Plugins_To_v1beta3_Plugins(in, out, s)
|
||||||
|
}
|
||||||
|
@ -18,8 +18,10 @@ package v1beta3
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kube-scheduler/config/v1beta3"
|
"k8s.io/kube-scheduler/config/v1beta3"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
@ -52,10 +54,17 @@ func getDefaultPlugins() *v1beta3.Plugins {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
applyFeatureGates(plugins)
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func applyFeatureGates(config *v1beta3.Plugins) {
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.PodSchedulingReadiness) {
|
||||||
|
config.MultiPoint.Enabled = append(config.MultiPoint.Enabled, v1beta3.Plugin{Name: names.SchedulingGates})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
// mergePlugins merges the custom set into the given default one, handling disabled sets.
|
||||||
func mergePlugins(defaultPlugins, customPlugins *v1beta3.Plugins) *v1beta3.Plugins {
|
func mergePlugins(defaultPlugins, customPlugins *v1beta3.Plugins) *v1beta3.Plugins {
|
||||||
if customPlugins == nil {
|
if customPlugins == nil {
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||||
"k8s.io/kube-scheduler/config/v1beta3"
|
"k8s.io/kube-scheduler/config/v1beta3"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
@ -63,6 +64,39 @@ func TestApplyFeatureGates(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Feature gate PodSchedulingReadiness enabled",
|
||||||
|
features: map[featuregate.Feature]bool{
|
||||||
|
features.PodSchedulingReadiness: true,
|
||||||
|
},
|
||||||
|
wantConfig: &v1beta3.Plugins{
|
||||||
|
MultiPoint: v1beta3.PluginSet{
|
||||||
|
Enabled: []v1beta3.Plugin{
|
||||||
|
{Name: names.PrioritySort},
|
||||||
|
{Name: names.NodeUnschedulable},
|
||||||
|
{Name: names.NodeName},
|
||||||
|
{Name: names.TaintToleration, Weight: pointer.Int32(3)},
|
||||||
|
{Name: names.NodeAffinity, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.NodePorts},
|
||||||
|
{Name: names.NodeResourcesFit, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.VolumeRestrictions},
|
||||||
|
{Name: names.EBSLimits},
|
||||||
|
{Name: names.GCEPDLimits},
|
||||||
|
{Name: names.NodeVolumeLimits},
|
||||||
|
{Name: names.AzureDiskLimits},
|
||||||
|
{Name: names.VolumeBinding},
|
||||||
|
{Name: names.VolumeZone},
|
||||||
|
{Name: names.PodTopologySpread, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.InterPodAffinity, Weight: pointer.Int32(2)},
|
||||||
|
{Name: names.DefaultPreemption},
|
||||||
|
{Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.ImageLocality, Weight: pointer.Int32(1)},
|
||||||
|
{Name: names.DefaultBinder},
|
||||||
|
{Name: names.SchedulingGates},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
@ -160,11 +160,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := s.AddGeneratedConversionFunc((*config.Plugins)(nil), (*v1beta3.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
|
||||||
return Convert_config_Plugins_To_v1beta3_Plugins(a.(*config.Plugins), b.(*v1beta3.Plugins), scope)
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := s.AddGeneratedConversionFunc((*v1beta3.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddGeneratedConversionFunc((*v1beta3.PodTopologySpreadArgs)(nil), (*config.PodTopologySpreadArgs)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta3.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope)
|
return Convert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(a.(*v1beta3.PodTopologySpreadArgs), b.(*config.PodTopologySpreadArgs), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -235,6 +230,11 @@ func RegisterConversions(s *runtime.Scheme) error {
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := s.AddConversionFunc((*config.Plugins)(nil), (*v1beta3.Plugins)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
|
return Convert_config_Plugins_To_v1beta3_Plugins(a.(*config.Plugins), b.(*v1beta3.Plugins), scope)
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := s.AddConversionFunc((*v1beta3.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
if err := s.AddConversionFunc((*v1beta3.KubeSchedulerConfiguration)(nil), (*config.KubeSchedulerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||||
return Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta3.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope)
|
return Convert_v1beta3_KubeSchedulerConfiguration_To_config_KubeSchedulerConfiguration(a.(*v1beta3.KubeSchedulerConfiguration), b.(*config.KubeSchedulerConfiguration), scope)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
@ -706,6 +706,9 @@ func Convert_config_PluginSet_To_v1beta3_PluginSet(in *config.PluginSet, out *v1
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error {
|
func autoConvert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_v1beta3_PluginSet_To_config_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -751,6 +754,9 @@ func Convert_v1beta3_Plugins_To_config_Plugins(in *v1beta3.Plugins, out *config.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func autoConvert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
func autoConvert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
||||||
|
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.PreEnqueue, &out.PreEnqueue, s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
if err := Convert_config_PluginSet_To_v1beta3_PluginSet(&in.QueueSort, &out.QueueSort, s); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -790,11 +796,6 @@ func autoConvert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1be
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert_config_Plugins_To_v1beta3_Plugins is an autogenerated conversion function.
|
|
||||||
func Convert_config_Plugins_To_v1beta3_Plugins(in *config.Plugins, out *v1beta3.Plugins, s conversion.Scope) error {
|
|
||||||
return autoConvert_config_Plugins_To_v1beta3_Plugins(in, out, s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
func autoConvert_v1beta3_PodTopologySpreadArgs_To_config_PodTopologySpreadArgs(in *v1beta3.PodTopologySpreadArgs, out *config.PodTopologySpreadArgs, s conversion.Scope) error {
|
||||||
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
out.DefaultConstraints = *(*[]corev1.TopologySpreadConstraint)(unsafe.Pointer(&in.DefaultConstraints))
|
||||||
out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
out.DefaultingType = config.PodTopologySpreadConstraintsDefaulting(in.DefaultingType)
|
||||||
|
@ -198,6 +198,7 @@ func validatePluginConfig(path *field.Path, apiVersion string, profile *config.K
|
|||||||
|
|
||||||
if profile.Plugins != nil {
|
if profile.Plugins != nil {
|
||||||
stagesToPluginSet := map[string]config.PluginSet{
|
stagesToPluginSet := map[string]config.PluginSet{
|
||||||
|
"preEnqueue": profile.Plugins.PreEnqueue,
|
||||||
"queueSort": profile.Plugins.QueueSort,
|
"queueSort": profile.Plugins.QueueSort,
|
||||||
"preFilter": profile.Plugins.PreFilter,
|
"preFilter": profile.Plugins.PreFilter,
|
||||||
"filter": profile.Plugins.Filter,
|
"filter": profile.Plugins.Filter,
|
||||||
|
@ -543,6 +543,12 @@ func TestValidateKubeSchedulerConfigurationV1beta3(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
duplicatedPlugins := validConfig.DeepCopy()
|
||||||
|
duplicatedPlugins.Profiles[0].Plugins.PreEnqueue.Enabled = []config.Plugin{
|
||||||
|
{Name: "CustomPreEnqueue"},
|
||||||
|
{Name: "CustomPreEnqueue"},
|
||||||
|
}
|
||||||
|
|
||||||
duplicatedPluginConfig := validConfig.DeepCopy()
|
duplicatedPluginConfig := validConfig.DeepCopy()
|
||||||
duplicatedPluginConfig.Profiles[0].PluginConfig = []config.PluginConfig{
|
duplicatedPluginConfig.Profiles[0].PluginConfig = []config.PluginConfig{
|
||||||
{
|
{
|
||||||
|
@ -394,6 +394,7 @@ func (in *PluginSet) DeepCopy() *PluginSet {
|
|||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
in.PreEnqueue.DeepCopyInto(&out.PreEnqueue)
|
||||||
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
||||||
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
||||||
in.Filter.DeepCopyInto(&out.Filter)
|
in.Filter.DeepCopyInto(&out.Filter)
|
||||||
|
@ -102,6 +102,8 @@ type QueuedPodInfo struct {
|
|||||||
InitialAttemptTimestamp time.Time
|
InitialAttemptTimestamp time.Time
|
||||||
// If a Pod failed in a scheduling cycle, record the plugin names it failed by.
|
// If a Pod failed in a scheduling cycle, record the plugin names it failed by.
|
||||||
UnschedulablePlugins sets.String
|
UnschedulablePlugins sets.String
|
||||||
|
// Whether the Pod is scheduling gated (by PreEnqueuePlugins) or not.
|
||||||
|
Gated bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeepCopy returns a deep copy of the QueuedPodInfo object.
|
// DeepCopy returns a deep copy of the QueuedPodInfo object.
|
||||||
@ -331,9 +333,9 @@ func getPodAffinityTerms(affinity *v1.Affinity) (terms []v1.PodAffinityTerm) {
|
|||||||
terms = affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution
|
terms = affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution
|
||||||
}
|
}
|
||||||
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
|
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
|
||||||
//if len(affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
|
// if len(affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
|
||||||
// terms = append(terms, affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
|
// terms = append(terms, affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
return terms
|
return terms
|
||||||
}
|
}
|
||||||
@ -344,9 +346,9 @@ func getPodAntiAffinityTerms(affinity *v1.Affinity) (terms []v1.PodAffinityTerm)
|
|||||||
terms = affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution
|
terms = affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution
|
||||||
}
|
}
|
||||||
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
|
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
|
||||||
//if len(affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
|
// if len(affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
|
||||||
// terms = append(terms, affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
|
// terms = append(terms, affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
|
||||||
//}
|
// }
|
||||||
}
|
}
|
||||||
return terms
|
return terms
|
||||||
}
|
}
|
||||||
|
@ -170,6 +170,9 @@ type KubeSchedulerProfile struct {
|
|||||||
// Enabled plugins are called in the order specified here, after default plugins. If they need to
|
// 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.
|
// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
|
||||||
type Plugins struct {
|
type Plugins struct {
|
||||||
|
// PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.
|
||||||
|
PreEnqueue PluginSet `json:"preEnqueue,omitempty"`
|
||||||
|
|
||||||
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
||||||
QueueSort PluginSet `json:"queueSort,omitempty"`
|
QueueSort PluginSet `json:"queueSort,omitempty"`
|
||||||
|
|
||||||
|
@ -436,6 +436,7 @@ func (in *PluginSet) DeepCopy() *PluginSet {
|
|||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
in.PreEnqueue.DeepCopyInto(&out.PreEnqueue)
|
||||||
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
||||||
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
||||||
in.Filter.DeepCopyInto(&out.Filter)
|
in.Filter.DeepCopyInto(&out.Filter)
|
||||||
|
@ -166,6 +166,9 @@ type KubeSchedulerProfile struct {
|
|||||||
// Enabled plugins are called in the order specified here, after default plugins. If they need to
|
// 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.
|
// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
|
||||||
type Plugins struct {
|
type Plugins struct {
|
||||||
|
// PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.
|
||||||
|
PreEnqueue PluginSet `json:"preEnqueue,omitempty"`
|
||||||
|
|
||||||
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
||||||
QueueSort PluginSet `json:"queueSort,omitempty"`
|
QueueSort PluginSet `json:"queueSort,omitempty"`
|
||||||
|
|
||||||
|
@ -441,6 +441,7 @@ func (in *PluginSet) DeepCopy() *PluginSet {
|
|||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
in.PreEnqueue.DeepCopyInto(&out.PreEnqueue)
|
||||||
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
||||||
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
||||||
in.Filter.DeepCopyInto(&out.Filter)
|
in.Filter.DeepCopyInto(&out.Filter)
|
||||||
|
@ -159,6 +159,9 @@ type KubeSchedulerProfile struct {
|
|||||||
// Enabled plugins are called in the order specified here, after default plugins. If they need to
|
// 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.
|
// be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
|
||||||
type Plugins struct {
|
type Plugins struct {
|
||||||
|
// PreEnqueue is a list of plugins that should be invoked before adding pods to the scheduling queue.
|
||||||
|
PreEnqueue PluginSet `json:"preEnqueue,omitempty"`
|
||||||
|
|
||||||
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
// QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.
|
||||||
QueueSort PluginSet `json:"queueSort,omitempty"`
|
QueueSort PluginSet `json:"queueSort,omitempty"`
|
||||||
|
|
||||||
|
@ -431,6 +431,7 @@ func (in *PluginSet) DeepCopy() *PluginSet {
|
|||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
func (in *Plugins) DeepCopyInto(out *Plugins) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
in.PreEnqueue.DeepCopyInto(&out.PreEnqueue)
|
||||||
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
in.QueueSort.DeepCopyInto(&out.QueueSort)
|
||||||
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
in.PreFilter.DeepCopyInto(&out.PreFilter)
|
||||||
in.Filter.DeepCopyInto(&out.Filter)
|
in.Filter.DeepCopyInto(&out.Filter)
|
||||||
|
Loading…
Reference in New Issue
Block a user