kubernetesk8s.io/kubernetes/pkg/scheduler/core Index | Files

package core

import "k8s.io/kubernetes/pkg/scheduler/core"

Index

Constants

const (
	// DefaultExtenderTimeout defines the default extender timeout in second.
	DefaultExtenderTimeout = 5 * time.Second
)
const (
	// NoNodeAvailableMsg is used to format message when no nodes available.
	NoNodeAvailableMsg = "0/%v nodes are available"
)

Variables

var ErrNoNodesAvailable = fmt.Errorf("no nodes available to schedule pods")

ErrNoNodesAvailable is used to describe the error that no nodes available to schedule pods.

Functions

func Equal

func Equal(e1, e2 *HTTPExtender) bool

Equal is used to check if two extenders are equal ignoring the client field, exported for testing

func NewHTTPExtender

func NewHTTPExtender(config *schedulerapi.Extender) (algorithm.SchedulerExtender, error)

NewHTTPExtender creates an HTTPExtender object.

Types

type FailedPredicateMap

type FailedPredicateMap map[string][]predicates.PredicateFailureReason

FailedPredicateMap declares a map[string][]algorithm.PredicateFailureReason type.

type FitError

type FitError struct {
	Pod                   *v1.Pod
	NumAllNodes           int
	FailedPredicates      FailedPredicateMap
	FilteredNodesStatuses framework.NodeToStatusMap
}

FitError describes a fit error of a pod.

func (*FitError) Error

func (f *FitError) Error() string

Error returns detailed information of why the pod failed to fit on each node

type HTTPExtender

type HTTPExtender struct {
	// contains filtered or unexported fields
}

HTTPExtender implements the algorithm.SchedulerExtender interface.

func (*HTTPExtender) Bind

func (h *HTTPExtender) Bind(binding *v1.Binding) error

Bind delegates the action of binding a pod to a node to the extender.

func (*HTTPExtender) Filter

func (h *HTTPExtender) Filter(
	pod *v1.Pod,
	nodes []*v1.Node, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
) ([]*v1.Node, extenderv1.FailedNodesMap, error)

Filter based on extender implemented predicate functions. The filtered list is expected to be a subset of the supplied list; otherwise the function returns an error. failedNodesMap optionally contains the list of failed nodes and failure reasons.

func (*HTTPExtender) IsBinder

func (h *HTTPExtender) IsBinder() bool

IsBinder returns whether this extender is configured for the Bind method.

func (*HTTPExtender) IsIgnorable

func (h *HTTPExtender) IsIgnorable() bool

IsIgnorable returns true indicates scheduling should not fail when this extender is unavailable

func (*HTTPExtender) IsInterested

func (h *HTTPExtender) IsInterested(pod *v1.Pod) bool

IsInterested returns true if at least one extended resource requested by this pod is managed by this extender.

func (*HTTPExtender) Name

func (h *HTTPExtender) Name() string

Name returns extenderURL to identify the extender.

func (*HTTPExtender) Prioritize

func (h *HTTPExtender) Prioritize(pod *v1.Pod, nodes []*v1.Node) (*extenderv1.HostPriorityList, int64, error)

Prioritize based on extender implemented priority functions. Weight*priority is added up for each such priority function. The returned score is added to the score computed by Kubernetes scheduler. The total score is used to do the host selection.

func (*HTTPExtender) ProcessPreemption

func (h *HTTPExtender) ProcessPreemption(
	pod *v1.Pod,
	nodeToVictims map[*v1.Node]*extenderv1.Victims,
	nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo,
) (map[*v1.Node]*extenderv1.Victims, error)

ProcessPreemption returns filtered candidate nodes and victims after running preemption logic in extender.

func (*HTTPExtender) SupportsPreemption

func (h *HTTPExtender) SupportsPreemption() bool

SupportsPreemption returns true if an extender supports preemption. An extender should have preempt verb defined and enabled its own node cache.

type ScheduleAlgorithm

type ScheduleAlgorithm interface {
	Schedule(context.Context, *framework.CycleState, *v1.Pod) (scheduleResult ScheduleResult, err error)
	// Preempt receives scheduling errors for a pod and tries to create room for
	// the pod by preempting lower priority pods if possible.
	// It returns the node where preemption happened, a list of preempted pods, a
	// list of pods whose nominated node name should be removed, and error if any.
	Preempt(context.Context, *framework.CycleState, *v1.Pod, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error)
	// Predicates() returns a pointer to a map of predicate functions. This is
	// exposed for testing.
	Predicates() map[string]predicates.FitPredicate
	// Prioritizers returns a slice of priority config. This is exposed for
	// testing.
	Prioritizers() []priorities.PriorityConfig
	// Extenders returns a slice of extender config. This is exposed for
	// testing.
	Extenders() []algorithm.SchedulerExtender
	// GetPredicateMetadataProducer returns the predicate metadata producer. This is needed
	// for cluster autoscaler integration.
	// TODO(ahg-g): remove this once CA migrates to creating a Framework instead of a full scheduler.
	PredicateMetadataProducer() predicates.MetadataProducer
}

ScheduleAlgorithm is an interface implemented by things that know how to schedule pods onto machines. TODO: Rename this type.

func NewGenericScheduler

func NewGenericScheduler(
	cache internalcache.Cache,
	podQueue internalqueue.SchedulingQueue,
	predicates map[string]predicates.FitPredicate,
	predicateMetaProducer predicates.MetadataProducer,
	prioritizers []priorities.PriorityConfig,
	priorityMetaProducer priorities.MetadataProducer,
	nodeInfoSnapshot *nodeinfosnapshot.Snapshot,
	framework framework.Framework,
	extenders []algorithm.SchedulerExtender,
	volumeBinder *volumebinder.VolumeBinder,
	pvcLister corelisters.PersistentVolumeClaimLister,
	pdbLister policylisters.PodDisruptionBudgetLister,
	alwaysCheckAllPredicates bool,
	disablePreemption bool,
	percentageOfNodesToScore int32,
	enableNonPreempting bool) ScheduleAlgorithm

NewGenericScheduler creates a genericScheduler object.

type ScheduleResult

type ScheduleResult struct {
	// Name of the scheduler suggest host
	SuggestedHost string
	// Number of nodes scheduler evaluated on one pod scheduled
	EvaluatedNodes int
	// Number of feasible nodes on one pod scheduled
	FeasibleNodes int
}

ScheduleResult represents the result of one pod scheduled. It will contain the final selected Node, along with the selected intermediate information.

Source Files

extender.go generic_scheduler.go

Version
v1.17.8
Published
Jun 26, 2020
Platform
js/wasm
Imports
40 packages
Last checked
3 minutes ago

Tools for package owners.