| /* |
| Copyright 2019 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 plugins |
| |
| import ( |
| "k8s.io/apiserver/pkg/util/feature" |
| "k8s.io/kubernetes/pkg/features" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/dynamicresources" |
| plfeature "k8s.io/kubernetes/pkg/scheduler/framework/plugins/feature" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeunschedulable" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodevolumelimits" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/schedulinggates" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions" |
| "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone" |
| "k8s.io/kubernetes/pkg/scheduler/framework/runtime" |
| ) |
| |
| // NewInTreeRegistry builds the registry with all the in-tree plugins. |
| // A scheduler that runs out of tree plugins can register additional plugins |
| // through the WithFrameworkOutOfTreeRegistry option. |
| func NewInTreeRegistry() runtime.Registry { |
| fts := plfeature.Features{ |
| EnableDynamicResourceAllocation: feature.DefaultFeatureGate.Enabled(features.DynamicResourceAllocation), |
| EnableVolumeCapacityPriority: feature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority), |
| EnableNodeInclusionPolicyInPodTopologySpread: feature.DefaultFeatureGate.Enabled(features.NodeInclusionPolicyInPodTopologySpread), |
| EnableMatchLabelKeysInPodTopologySpread: feature.DefaultFeatureGate.Enabled(features.MatchLabelKeysInPodTopologySpread), |
| EnablePodDisruptionConditions: feature.DefaultFeatureGate.Enabled(features.PodDisruptionConditions), |
| EnableInPlacePodVerticalScaling: feature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScaling), |
| EnableSidecarContainers: feature.DefaultFeatureGate.Enabled(features.SidecarContainers), |
| } |
| |
| registry := runtime.Registry{ |
| dynamicresources.Name: runtime.FactoryAdapter(fts, dynamicresources.New), |
| imagelocality.Name: imagelocality.New, |
| tainttoleration.Name: tainttoleration.New, |
| nodename.Name: nodename.New, |
| nodeports.Name: nodeports.New, |
| nodeaffinity.Name: nodeaffinity.New, |
| podtopologyspread.Name: runtime.FactoryAdapter(fts, podtopologyspread.New), |
| nodeunschedulable.Name: nodeunschedulable.New, |
| noderesources.Name: runtime.FactoryAdapter(fts, noderesources.NewFit), |
| noderesources.BalancedAllocationName: runtime.FactoryAdapter(fts, noderesources.NewBalancedAllocation), |
| volumebinding.Name: runtime.FactoryAdapter(fts, volumebinding.New), |
| volumerestrictions.Name: runtime.FactoryAdapter(fts, volumerestrictions.New), |
| volumezone.Name: volumezone.New, |
| nodevolumelimits.CSIName: runtime.FactoryAdapter(fts, nodevolumelimits.NewCSI), |
| nodevolumelimits.EBSName: runtime.FactoryAdapter(fts, nodevolumelimits.NewEBS), |
| nodevolumelimits.GCEPDName: runtime.FactoryAdapter(fts, nodevolumelimits.NewGCEPD), |
| nodevolumelimits.AzureDiskName: runtime.FactoryAdapter(fts, nodevolumelimits.NewAzureDisk), |
| nodevolumelimits.CinderName: runtime.FactoryAdapter(fts, nodevolumelimits.NewCinder), |
| interpodaffinity.Name: interpodaffinity.New, |
| queuesort.Name: queuesort.New, |
| defaultbinder.Name: defaultbinder.New, |
| defaultpreemption.Name: runtime.FactoryAdapter(fts, defaultpreemption.New), |
| schedulinggates.Name: schedulinggates.New, |
| } |
| |
| return registry |
| } |