Documentation ¶
Overview ¶
Package factory can set up a scheduler. This code is here instead of cmd/scheduler for both testability and reuse.
Index ¶
- Constants
- func InsertPredicateKeyToAlgoProvider(providerName, key string) error
- func InsertPredicateKeyToAlgorithmProviderMap(key string)
- func InsertPriorityKeyToAlgorithmProviderMap(key string)
- func IsFitPredicateRegistered(name string) bool
- func IsPriorityFunctionRegistered(name string) bool
- func ListAlgorithmProviders() string
- func ListRegisteredFitPredicates() []string
- func ListRegisteredPriorityFunctions() []string
- func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) coreinformers.PodInformer
- func RegisterAlgorithmProvider(name string, predicateKeys, priorityKeys sets.String) string
- func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string
- func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string
- func RegisterFitPredicate(name string, predicate algorithm.FitPredicate) string
- func RegisterFitPredicateFactory(name string, predicateFactory FitPredicateFactory) string
- func RegisterMandatoryFitPredicate(name string, predicate algorithm.FitPredicate) string
- func RegisterPredicateMetadataProducerFactory(factory PredicateMetadataProducerFactory)
- func RegisterPriorityConfigFactory(name string, pcf PriorityConfigFactory) string
- func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, weight int) string
- func RegisterPriorityFunction2(name string, mapFunction algorithm.PriorityMapFunction, ...) string
- func RegisterPriorityMetadataProducerFactory(factory PriorityMetadataProducerFactory)
- func RemoveFitPredicate(name string)
- func RemovePredicateKeyFromAlgoProvider(providerName, key string) error
- func RemovePredicateKeyFromAlgorithmProviderMap(key string)
- type AlgorithmProviderConfig
- type Binder
- type Config
- type ConfigFactoryArgs
- type Configurator
- type FitPredicateFactory
- type PluginFactoryArgs
- type PodConditionUpdater
- type PodPreemptor
- type PredicateMetadataProducerFactory
- type PriorityConfigFactory
- type PriorityFunctionFactory
- type PriorityFunctionFactory2
- type PriorityMetadataProducerFactory
Constants ¶
const (
// DefaultProvider defines the default algorithm provider name.
DefaultProvider = "DefaultProvider"
)
Variables ¶
This section is empty.
Functions ¶
func InsertPredicateKeyToAlgoProvider ¶
InsertPredicateKeyToAlgoProvider insert a fit predicate key to algorithmProvider.
func InsertPredicateKeyToAlgorithmProviderMap ¶
func InsertPredicateKeyToAlgorithmProviderMap(key string)
InsertPredicateKeyToAlgorithmProviderMap insert a fit predicate key to all algorithmProviders which in algorithmProviderMap.
func InsertPriorityKeyToAlgorithmProviderMap ¶
func InsertPriorityKeyToAlgorithmProviderMap(key string)
InsertPriorityKeyToAlgorithmProviderMap inserts a priority function to all algorithmProviders which are in algorithmProviderMap.
func IsFitPredicateRegistered ¶
IsFitPredicateRegistered is useful for testing providers.
func IsPriorityFunctionRegistered ¶
IsPriorityFunctionRegistered is useful for testing providers.
func ListAlgorithmProviders ¶
func ListAlgorithmProviders() string
ListAlgorithmProviders is called when listing all available algorithm providers in `kube-scheduler --help`
func ListRegisteredFitPredicates ¶
func ListRegisteredFitPredicates() []string
ListRegisteredFitPredicates returns the registered fit predicates.
func ListRegisteredPriorityFunctions ¶
func ListRegisteredPriorityFunctions() []string
ListRegisteredPriorityFunctions returns the registered priority functions.
func NewPodInformer ¶
func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) coreinformers.PodInformer
NewPodInformer creates a shared index informer that returns only non-terminal pods.
func RegisterAlgorithmProvider ¶
RegisterAlgorithmProvider registers a new algorithm provider with the algorithm registry. This should be called from the init function in a provider plugin.
func RegisterCustomFitPredicate ¶
func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string
RegisterCustomFitPredicate registers a custom fit predicate with the algorithm registry. Returns the name, with which the predicate was registered.
func RegisterCustomPriorityFunction ¶
func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string
RegisterCustomPriorityFunction registers a custom priority function with the algorithm registry. Returns the name, with which the priority function was registered.
func RegisterFitPredicate ¶
func RegisterFitPredicate(name string, predicate algorithm.FitPredicate) string
RegisterFitPredicate registers a fit predicate with the algorithm registry. Returns the name with which the predicate was registered.
func RegisterFitPredicateFactory ¶
func RegisterFitPredicateFactory(name string, predicateFactory FitPredicateFactory) string
RegisterFitPredicateFactory registers a fit predicate factory with the algorithm registry. Returns the name with which the predicate was registered.
func RegisterMandatoryFitPredicate ¶
func RegisterMandatoryFitPredicate(name string, predicate algorithm.FitPredicate) string
RegisterMandatoryFitPredicate registers a fit predicate with the algorithm registry, the predicate is used by kubelet, DaemonSet; it is always included in configuration. Returns the name with which the predicate was registered.
func RegisterPredicateMetadataProducerFactory ¶
func RegisterPredicateMetadataProducerFactory(factory PredicateMetadataProducerFactory)
RegisterPredicateMetadataProducerFactory registers a PredicateMetadataProducerFactory.
func RegisterPriorityConfigFactory ¶
func RegisterPriorityConfigFactory(name string, pcf PriorityConfigFactory) string
RegisterPriorityConfigFactory registers a priority config factory with its name.
func RegisterPriorityFunction ¶
func RegisterPriorityFunction(name string, function algorithm.PriorityFunction, weight int) string
RegisterPriorityFunction registers a priority function with the algorithm registry. Returns the name, with which the function was registered. DEPRECATED Use Map-Reduce pattern for priority functions.
func RegisterPriorityFunction2 ¶
func RegisterPriorityFunction2( name string, mapFunction algorithm.PriorityMapFunction, reduceFunction algorithm.PriorityReduceFunction, weight int) string
RegisterPriorityFunction2 registers a priority function with the algorithm registry. Returns the name, with which the function was registered. FIXME: Rename to PriorityFunctionFactory.
func RegisterPriorityMetadataProducerFactory ¶
func RegisterPriorityMetadataProducerFactory(factory PriorityMetadataProducerFactory)
RegisterPriorityMetadataProducerFactory registers a PriorityMetadataProducerFactory.
func RemoveFitPredicate ¶
func RemoveFitPredicate(name string)
RemoveFitPredicate removes a fit predicate from factory.
func RemovePredicateKeyFromAlgoProvider ¶
RemovePredicateKeyFromAlgoProvider removes a fit predicate key from algorithmProvider.
func RemovePredicateKeyFromAlgorithmProviderMap ¶
func RemovePredicateKeyFromAlgorithmProviderMap(key string)
RemovePredicateKeyFromAlgorithmProviderMap removes a fit predicate key from all algorithmProviders which in algorithmProviderMap.
Types ¶
type AlgorithmProviderConfig ¶
type AlgorithmProviderConfig struct { FitPredicateKeys sets.String PriorityFunctionKeys sets.String }
AlgorithmProviderConfig is used to store the configuration of algorithm providers.
func GetAlgorithmProvider ¶
func GetAlgorithmProvider(name string) (*AlgorithmProviderConfig, error)
GetAlgorithmProvider should not be used to modify providers. It is publicly visible for testing.
type Config ¶
type Config struct { // It is expected that changes made via SchedulerCache will be observed // by NodeLister and Algorithm. SchedulerCache schedulerinternalcache.Cache // Ecache is used for optimistically invalid affected cache items after // successfully binding a pod Ecache *equivalence.Cache NodeLister algorithm.NodeLister Algorithm algorithm.ScheduleAlgorithm GetBinder func(pod *v1.Pod) Binder // PodConditionUpdater is used only in case of scheduling errors. If we succeed // with scheduling, PodScheduled condition will be updated in apiserver in /bind // handler so that binding and setting PodCondition it is atomic. PodConditionUpdater PodConditionUpdater // PodPreemptor is used to evict pods and update pod annotations. PodPreemptor PodPreemptor // NextPod should be a function that blocks until the next pod // is available. We don't use a channel for this, because scheduling // a pod may take some amount of time and we don't want pods to get // stale while they sit in a channel. NextPod func() *v1.Pod // WaitForCacheSync waits for scheduler cache to populate. // It returns true if it was successful, false if the controller should shutdown. WaitForCacheSync func() bool // Error is called if there is an error. It is passed the pod in // question, and the error Error func(*v1.Pod, error) // Recorder is the EventRecorder to use Recorder record.EventRecorder // Close this to shut down the scheduler. StopEverything chan struct{} // VolumeBinder handles PVC/PV binding for the pod. VolumeBinder *volumebinder.VolumeBinder // Disable pod preemption or not. DisablePreemption bool }
Config is an implementation of the Scheduler's configured input data. TODO over time we should make this struct a hidden implementation detail of the scheduler.
type ConfigFactoryArgs ¶
type ConfigFactoryArgs struct { SchedulerName string Client clientset.Interface NodeInformer coreinformers.NodeInformer PodInformer coreinformers.PodInformer PvInformer coreinformers.PersistentVolumeInformer PvcInformer coreinformers.PersistentVolumeClaimInformer ReplicationControllerInformer coreinformers.ReplicationControllerInformer ReplicaSetInformer appsinformers.ReplicaSetInformer StatefulSetInformer appsinformers.StatefulSetInformer ServiceInformer coreinformers.ServiceInformer PdbInformer policyinformers.PodDisruptionBudgetInformer StorageClassInformer storageinformers.StorageClassInformer HardPodAffinitySymmetricWeight int32 EnableEquivalenceClassCache bool DisablePreemption bool PercentageOfNodesToScore int32 BindTimeoutSeconds int64 }
ConfigFactoryArgs is a set arguments passed to NewConfigFactory.
type Configurator ¶
type Configurator interface { // Exposed for testing GetHardPodAffinitySymmetricWeight() int32 // Exposed for testing MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue internalqueue.SchedulingQueue) func(pod *v1.Pod, err error) // Predicate related accessors to be exposed for use by k8s.io/autoscaler/cluster-autoscaler GetPredicateMetadataProducer() (algorithm.PredicateMetadataProducer, error) GetPredicates(predicateKeys sets.String) (map[string]algorithm.FitPredicate, error) // Needs to be exposed for things like integration tests where we want to make fake nodes. GetNodeLister() corelisters.NodeLister // Exposed for testing GetClient() clientset.Interface // Exposed for testing GetScheduledPodLister() corelisters.PodLister Create() (*Config, error) CreateFromProvider(providerName string) (*Config, error) CreateFromConfig(policy schedulerapi.Policy) (*Config, error) CreateFromKeys(predicateKeys, priorityKeys sets.String, extenders []algorithm.SchedulerExtender) (*Config, error) }
Configurator defines I/O, caching, and other functionality needed to construct a new scheduler. An implementation of this can be seen in factory.go.
func NewConfigFactory ¶
func NewConfigFactory(args *ConfigFactoryArgs) Configurator
NewConfigFactory initializes the default implementation of a Configurator. To encourage eventual privatization of the struct type, we only return the interface.
type FitPredicateFactory ¶
type FitPredicateFactory func(PluginFactoryArgs) algorithm.FitPredicate
FitPredicateFactory produces a FitPredicate from the given args.
type PluginFactoryArgs ¶
type PluginFactoryArgs struct { PodLister algorithm.PodLister ServiceLister algorithm.ServiceLister ControllerLister algorithm.ControllerLister ReplicaSetLister algorithm.ReplicaSetLister StatefulSetLister algorithm.StatefulSetLister NodeLister algorithm.NodeLister PDBLister algorithm.PDBLister NodeInfo predicates.NodeInfo PVInfo predicates.PersistentVolumeInfo PVCInfo predicates.PersistentVolumeClaimInfo StorageClassInfo predicates.StorageClassInfo VolumeBinder *volumebinder.VolumeBinder HardPodAffinitySymmetricWeight int32 }
PluginFactoryArgs are passed to all plugin factory functions.
type PodConditionUpdater ¶
type PodConditionUpdater interface {
Update(pod *v1.Pod, podCondition *v1.PodCondition) error
}
PodConditionUpdater updates the condition of a pod based on the passed PodCondition
type PodPreemptor ¶
type PodPreemptor interface { GetUpdatedPod(pod *v1.Pod) (*v1.Pod, error) DeletePod(pod *v1.Pod) error SetNominatedNodeName(pod *v1.Pod, nominatedNode string) error RemoveNominatedNodeName(pod *v1.Pod) error }
PodPreemptor has methods needed to delete a pod and to update annotations of the preemptor pod.
type PredicateMetadataProducerFactory ¶
type PredicateMetadataProducerFactory func(PluginFactoryArgs) algorithm.PredicateMetadataProducer
PredicateMetadataProducerFactory produces PredicateMetadataProducer from the given args.
type PriorityConfigFactory ¶
type PriorityConfigFactory struct { Function PriorityFunctionFactory MapReduceFunction PriorityFunctionFactory2 Weight int }
PriorityConfigFactory produces a PriorityConfig from the given function and weight
type PriorityFunctionFactory ¶
type PriorityFunctionFactory func(PluginFactoryArgs) algorithm.PriorityFunction
PriorityFunctionFactory produces a PriorityConfig from the given args. DEPRECATED Use Map-Reduce pattern for priority functions.
type PriorityFunctionFactory2 ¶
type PriorityFunctionFactory2 func(PluginFactoryArgs) (algorithm.PriorityMapFunction, algorithm.PriorityReduceFunction)
PriorityFunctionFactory2 produces map & reduce priority functions from a given args. FIXME: Rename to PriorityFunctionFactory.
type PriorityMetadataProducerFactory ¶
type PriorityMetadataProducerFactory func(PluginFactoryArgs) algorithm.PriorityMetadataProducer
PriorityMetadataProducerFactory produces PriorityMetadataProducer from the given args.