Documentation ¶
Index ¶
- Constants
- func EncodeInt64(out []byte, val int64) []byte
- func EncodeQuantity(out []byte, val resource.Quantity) []byte
- func EncodeUint64(out []byte, val uint64) []byte
- func NodeIndexKey(out []byte, nodeTypeId uint64, resources []resource.Quantity) []byte
- func NodeJobDiff(txnA, txnB *memdb.Txn) (map[string]*Node, map[string]*Node, error)
- func RoundedNodeIndexKeyFromResourceList(out []byte, nodeTypeId uint64, resourceNames []string, ...) []byte
- func UnschedulableTaint() v1.Taint
- func UnschedulableToleration() v1.Toleration
- type EvictedJobSchedulingContext
- type InsufficientResources
- type MissingLabel
- type Node
- func EvictJobsFromNode(priorityClasses map[string]types.PriorityClass, ...) ([]interfaces.LegacySchedulerJob, *Node, error)
- func UnbindJobFromNode(priorityClasses map[string]types.PriorityClass, ...) (*Node, error)
- func UnbindJobsFromNode(priorityClasses map[string]types.PriorityClass, ...) (*Node, error)
- type NodeDb
- func (nodeDb *NodeDb) AddEvictedJobSchedulingContextWithTxn(txn *memdb.Txn, index int, jctx *schedulercontext.JobSchedulingContext) error
- func (nodeDb *NodeDb) ClearAllocated() error
- func (nodeDb *NodeDb) CreateAndInsertWithApiJobsWithTxn(txn *memdb.Txn, jobs []*api.Job, node *schedulerobjects.Node) error
- func (nodeDb *NodeDb) CreateAndInsertWithJobDbJobsWithTxn(txn *memdb.Txn, jobs []*jobdb.Job, node *schedulerobjects.Node) error
- func (nodeDb *NodeDb) EnableNewPreemptionStrategy()
- func (nodeDb *NodeDb) GetNode(id string) (*Node, error)
- func (nodeDb *NodeDb) GetNodeWithTxn(txn *memdb.Txn, id string) (*Node, error)
- func (nodeDb *NodeDb) IndexedNodeLabelValues(label string) (map[string]struct{}, bool)
- func (nodeDb *NodeDb) NodeTypesMatchingJob(jctx *schedulercontext.JobSchedulingContext) ([]*schedulerobjects.NodeType, map[string]int, error)
- func (nodeDb *NodeDb) NumNodes() int
- func (nodeDb *NodeDb) Reset() error
- func (nodeDb *NodeDb) ScheduleMany(jctxs []*schedulercontext.JobSchedulingContext) (bool, error)
- func (nodeDb *NodeDb) ScheduleManyWithTxn(txn *memdb.Txn, jctxs []*schedulercontext.JobSchedulingContext) (bool, error)
- func (nodeDb *NodeDb) SelectNodeForJobWithTxn(txn *memdb.Txn, jctx *schedulercontext.JobSchedulingContext) (*Node, error)
- func (nodeDb *NodeDb) String() string
- func (nodeDb *NodeDb) TotalResources() schedulerobjects.ResourceList
- func (nodeDb *NodeDb) Txn(write bool) *memdb.Txn
- func (nodeDb *NodeDb) Upsert(node *Node) error
- func (nodeDb *NodeDb) UpsertMany(nodes []*Node) error
- func (nodeDb *NodeDb) UpsertManyWithTxn(txn *memdb.Txn, nodes []*Node) error
- func (nodeDb *NodeDb) UpsertWithTxn(txn *memdb.Txn, node *Node) error
- type NodeIndex
- type NodeIterator
- type NodePairIterator
- type NodePairIteratorItem
- type NodeTypeIterator
- type NodeTypesIterator
- type NodesIterator
- type PodRequirementsNotMetReason
- func DynamicJobRequirementsMet(allocatableResources schedulerobjects.ResourceList, ...) (bool, int, PodRequirementsNotMetReason)
- func JobRequirementsMet(taints []v1.Taint, labels map[string]string, ...) (bool, int, PodRequirementsNotMetReason, error)
- func NodeAffinityRequirementsMet(nodeLabels map[string]string, nodeSelector *v1.NodeSelector) (bool, PodRequirementsNotMetReason, error)
- func NodeSelectorRequirementsMet(nodeLabels, unsetIndexedLabels, nodeSelector map[string]string) (bool, PodRequirementsNotMetReason)
- func NodeTypeJobRequirementsMet(nodeType *schedulerobjects.NodeType, ...) (bool, PodRequirementsNotMetReason)
- func ResourceRequirementsMet(available schedulerobjects.ResourceList, required v1.ResourceList) (bool, PodRequirementsNotMetReason)
- func StaticJobRequirementsMet(taints []v1.Taint, labels map[string]string, ...) (bool, PodRequirementsNotMetReason, error)
- func TolerationRequirementsMet(taints []v1.Taint, tolerations ...[]v1.Toleration) (bool, PodRequirementsNotMetReason)
- type UnmatchedLabel
- type UnmatchedNodeSelector
- type UntoleratedTaint
Constants ¶
const ( // When checking if a pod fits on a node, this score indicates how well the pods fits. // However, all nodes are currently given the same score. SchedulableScore = 0 SchedulableBestScore = SchedulableScore PodRequirementsNotMetReasonUnmatchedNodeSelector = "node does not match pod NodeAffinity" PodRequirementsNotMetReasonUnknown = "unknown" PodRequirementsNotMetReasonInsufficientResources = "insufficient resources available" )
const ( // MinPriority is the smallest possible priority class priority within the NodeDb. MinPriority int32 = evictedPriority )
Variables ¶
This section is empty.
Functions ¶
func EncodeInt64 ¶ added in v0.3.71
EncodeInt64 returns the canonical byte representation of a int64 used within the nodeDb. The resulting []byte is such that for two int64 a and b, a.Cmp(b) = bytes.Compare(enc(a), enc(b)). The byte representation is appended to out, which is returned.
func EncodeQuantity ¶ added in v0.3.71
EncodeQuantity returns the canonical byte representation of a resource.Quantity used within the nodeDb. The resulting []byte is such that for two resource.Quantity a and b, a.Cmp(b) = bytes.Compare(enc(a), enc(b)). The byte representation is appended to out, which is returned.
func EncodeUint64 ¶ added in v0.3.71
EncodeUint64 returns the canonical byte representation of a uint64 used within the nodeDb. The resulting []byte is such that for two uint64 a and b, a.Cmp(b) = bytes.Compare(enc(a), enc(b)). The byte representation is appended to out, which is returned.
func NodeIndexKey ¶ added in v0.3.71
NodeIndexKey returns a []byte to be used as a key with the NodeIndex memdb index with layout
0 8 16 32 | nodeTypeId | resources[0] | resources[1] | ... |
where the numbers indicate number of bytes.
The key layout is such that an index ordered first by the nodeTypeId, then resources[0], and so on. The byte representation is appended to out, which is returned.
func NodeJobDiff ¶
NodeJobDiff compares two snapshots of the NodeDb memdb and returns - a map from job ids of all preempted jobs to the node they used to be on - a map from job ids of all scheduled jobs to the node they were scheduled on that happened between the two snapshots.
func RoundedNodeIndexKeyFromResourceList ¶ added in v0.3.71
func RoundedNodeIndexKeyFromResourceList(out []byte, nodeTypeId uint64, resourceNames []string, resourceResolutionMillis []int64, rl schedulerobjects.ResourceList) []byte
RoundedNodeIndexKeyFromResourceList works like NodeIndexKey, except that prior to constructing the key the i-th resource is rounded down to the closest multiple of resourceResolutionMillis[i]. It also takes as arguments a list of resource names and a resourceList, instead of a list of resources.
func UnschedulableTaint ¶ added in v0.3.65
UnschedulableTaint returns the taint automatically added to unschedulable nodes on inserting into the nodeDb.
func UnschedulableToleration ¶ added in v0.3.65
func UnschedulableToleration() v1.Toleration
UnschedulableToleration returns a toleration that tolerates UnschedulableTaint().
Types ¶
type EvictedJobSchedulingContext ¶ added in v0.3.90
type EvictedJobSchedulingContext struct { // Id of the evicted job. JobId string // Each evicted job is assigned a unique integer indicating the order in which it is re-scheduled. // I.e., index establishes a global order among all evicted jobs. // // When choosing on which node to schedule a job that would prevent re-scheduling evicted jobs, // nodeDb choses the node that would prevent re-scheduling jobs with as a large an index as possible. Index int JobSchedulingContext *schedulercontext.JobSchedulingContext }
EvictedJobSchedulingContext represents an evicted job. NodeDb may track these to ensure preemptions are fair.
type InsufficientResources ¶ added in v0.4.1
type InsufficientResources struct { ResourceName string Required resource.Quantity Available resource.Quantity }
func (*InsufficientResources) String ¶ added in v0.4.1
func (err *InsufficientResources) String() string
func (*InsufficientResources) Sum64 ¶ added in v0.4.1
func (r *InsufficientResources) Sum64() uint64
type MissingLabel ¶ added in v0.4.1
type MissingLabel struct {
Label string
}
func (*MissingLabel) String ¶ added in v0.4.1
func (r *MissingLabel) String() string
func (*MissingLabel) Sum64 ¶ added in v0.4.1
func (r *MissingLabel) Sum64() uint64
type Node ¶ added in v0.3.79
type Node struct { Id string Name string Executor string // We need to store taints and labels separately from the node type: the latter only includes // indexed taints and labels, but we need all of them when checking pod requirements. Taints []v1.Taint Labels map[string]string TotalResources schedulerobjects.ResourceList // This field is set when inserting the Node into a NodeDb. Keys [][]byte NodeTypeId uint64 AllocatableByPriority schedulerobjects.AllocatableByPriorityAndResourceType AllocatedByQueue map[string]schedulerobjects.ResourceList AllocatedByJobId map[string]schedulerobjects.ResourceList EvictedJobRunIds map[string]bool }
func EvictJobsFromNode ¶ added in v0.3.79
func EvictJobsFromNode( priorityClasses map[string]types.PriorityClass, jobFilter func(interfaces.LegacySchedulerJob) bool, jobs []interfaces.LegacySchedulerJob, node *Node, ) ([]interfaces.LegacySchedulerJob, *Node, error)
EvictJobsFromNode returns a copy of node with all elements of jobs for which jobFilter returns true evicted from it, together with a slice containing exactly those jobs.
Specifically:
- The jobs that jobFilter returns true for are marked as evicted on the node.
- Within AllocatableByPriorityAndResource, the resources allocated to these jobs are moved from the jobs' priorities to evictedPriority; they are not subtracted from AllocatedByJobId and AllocatedByQueue.
func UnbindJobFromNode ¶ added in v0.3.78
func UnbindJobFromNode(priorityClasses map[string]types.PriorityClass, job interfaces.LegacySchedulerJob, node *Node) (*Node, error)
UnbindJobFromNode returns a copy of node with job unbound from it.
func UnbindJobsFromNode ¶ added in v0.3.78
func UnbindJobsFromNode(priorityClasses map[string]types.PriorityClass, jobs []interfaces.LegacySchedulerJob, node *Node) (*Node, error)
UnbindJobsFromNode returns a node with all elements of jobs unbound from it.
func (*Node) UnsafeCopy ¶ added in v0.3.79
UnsafeCopy returns a pointer to a new value of type Node; it is unsafe because it only makes shallow copies of fields that are not mutated by methods of NodeDb.
type NodeDb ¶
type NodeDb struct {
// contains filtered or unexported fields
}
NodeDb is the scheduler-internal system used to efficiently find nodes on which a pod could be scheduled.
func NewNodeDb ¶
func NewNodeDb( priorityClasses map[string]types.PriorityClass, maxExtraNodesToConsider uint, indexedResources []configuration.IndexedResource, indexedTaints, indexedNodeLabels []string, ) (*NodeDb, error)
func (*NodeDb) AddEvictedJobSchedulingContextWithTxn ¶ added in v0.3.90
func (nodeDb *NodeDb) AddEvictedJobSchedulingContextWithTxn(txn *memdb.Txn, index int, jctx *schedulercontext.JobSchedulingContext) error
func (*NodeDb) ClearAllocated ¶
ClearAllocated zeroes out allocated resources on all nodes in the NodeDb.
func (*NodeDb) CreateAndInsertWithApiJobsWithTxn ¶ added in v0.3.79
func (*NodeDb) CreateAndInsertWithJobDbJobsWithTxn ¶ added in v0.3.79
func (*NodeDb) EnableNewPreemptionStrategy ¶ added in v0.3.90
func (nodeDb *NodeDb) EnableNewPreemptionStrategy()
func (*NodeDb) GetNodeWithTxn ¶
GetNodeWithTxn returns a node in the db with given id, within the provided transactions.
func (*NodeDb) IndexedNodeLabelValues ¶ added in v0.3.79
IndexedNodeLabelValues returns the set of possible values for a given indexed label across all nodes in the NodeDb.
func (*NodeDb) NodeTypesMatchingJob ¶ added in v0.4.1
func (nodeDb *NodeDb) NodeTypesMatchingJob(jctx *schedulercontext.JobSchedulingContext) ([]*schedulerobjects.NodeType, map[string]int, error)
NodeTypesMatchingJob returns a slice with all node types a pod could be scheduled on. It also returns the number of nodes excluded by reason for exclusion.
func (*NodeDb) Reset ¶ added in v0.3.90
Reset clears out data specific to one scheduling round to prepare for a new scheduling round. Only necessary when nodeDb.enableNewPreemptionStrategy is true.
func (*NodeDb) ScheduleMany ¶
func (nodeDb *NodeDb) ScheduleMany(jctxs []*schedulercontext.JobSchedulingContext) (bool, error)
ScheduleMany assigns a set of jobs to nodes. If N jobs can be scheduled, where N >= `GangMinCardinality`, it will return true, nil and set ShouldFail on any excess jobs. Otherwise, it will return false, nil. TODO: Pass through contexts to support timeouts.
func (*NodeDb) ScheduleManyWithTxn ¶
func (nodeDb *NodeDb) ScheduleManyWithTxn(txn *memdb.Txn, jctxs []*schedulercontext.JobSchedulingContext) (bool, error)
func (*NodeDb) SelectNodeForJobWithTxn ¶ added in v0.3.78
func (nodeDb *NodeDb) SelectNodeForJobWithTxn(txn *memdb.Txn, jctx *schedulercontext.JobSchedulingContext) (*Node, error)
SelectNodeForJobWithTxn selects a node on which the job can be scheduled.
func (*NodeDb) TotalResources ¶
func (nodeDb *NodeDb) TotalResources() schedulerobjects.ResourceList
func (*NodeDb) UpsertMany ¶
func (*NodeDb) UpsertManyWithTxn ¶
func (*NodeDb) UpsertWithTxn ¶
type NodeIndex ¶ added in v0.3.71
type NodeIndex struct {
KeyIndex int
}
NodeIndex is an index for schedulerobjects.Node that returns node.NodeDbKeys[KeyIndex].
type NodeIterator ¶
type NodeIterator interface {
NextNode() *Node
}
type NodePairIterator ¶
type NodePairIterator struct {
// contains filtered or unexported fields
}
func NewNodePairIterator ¶
func NewNodePairIterator(txnA, txnB *memdb.Txn) (*NodePairIterator, error)
func (*NodePairIterator) Next ¶
func (it *NodePairIterator) Next() interface{}
func (*NodePairIterator) NextItem ¶
func (it *NodePairIterator) NextItem() (rv *NodePairIteratorItem)
func (*NodePairIterator) WatchCh ¶
func (it *NodePairIterator) WatchCh() <-chan struct{}
type NodePairIteratorItem ¶
type NodeTypeIterator ¶
type NodeTypeIterator struct {
// contains filtered or unexported fields
}
NodeTypeIterator is an iterator over all nodes of a given nodeType with at least some specified amount of resources allocatable at a given priority. For example, all nodes of nodeType "foo" with at least 2 cores and 1Gi memory allocatable at priority 2. Nodes are returned in sorted order, from least to most of the specified resource available.
func NewNodeTypeIterator ¶
func (*NodeTypeIterator) Next ¶
func (it *NodeTypeIterator) Next() interface{}
func (*NodeTypeIterator) NextNode ¶
func (it *NodeTypeIterator) NextNode() (*Node, error)
func (*NodeTypeIterator) WatchCh ¶
func (it *NodeTypeIterator) WatchCh() <-chan struct{}
type NodeTypesIterator ¶
type NodeTypesIterator struct {
// contains filtered or unexported fields
}
NodeTypesIterator is an iterator over all nodes of the given nodeTypes with at least some specified amount of resources allocatable at a given priority. For example, all nodes of nodeType "foo" and "bar" with at least 2 cores and 1Gi memory allocatable at priority 2. Nodes are returned in sorted order, from least to most of the specified resource available.
func NewNodeTypesIterator ¶
func (*NodeTypesIterator) Next ¶
func (it *NodeTypesIterator) Next() interface{}
func (*NodeTypesIterator) NextNode ¶
func (it *NodeTypesIterator) NextNode() (*Node, error)
func (*NodeTypesIterator) WatchCh ¶
func (it *NodeTypesIterator) WatchCh() <-chan struct{}
type NodesIterator ¶
type NodesIterator struct {
// contains filtered or unexported fields
}
NodesIterator is an iterator over all nodes in the db.
func NewNodesIterator ¶
func NewNodesIterator(txn *memdb.Txn) (*NodesIterator, error)
func (*NodesIterator) Next ¶
func (it *NodesIterator) Next() interface{}
func (*NodesIterator) NextNode ¶
func (it *NodesIterator) NextNode() *Node
func (*NodesIterator) WatchCh ¶
func (it *NodesIterator) WatchCh() <-chan struct{}
type PodRequirementsNotMetReason ¶ added in v0.4.1
type PodRequirementsNotMetReason interface { fmt.Stringer // Returns a 64-bit hash of this reason. Sum64() uint64 }
func DynamicJobRequirementsMet ¶ added in v0.4.1
func DynamicJobRequirementsMet(allocatableResources schedulerobjects.ResourceList, jctx *schedulercontext.JobSchedulingContext) (bool, int, PodRequirementsNotMetReason)
DynamicJobRequirementsMet checks if a pod can be scheduled onto this node, accounting for resources allocated to pods already assigned to this node.
func JobRequirementsMet ¶ added in v0.4.1
func JobRequirementsMet(taints []v1.Taint, labels map[string]string, totalResources schedulerobjects.ResourceList, allocatableResources schedulerobjects.ResourceList, jctx *schedulercontext.JobSchedulingContext) (bool, int, PodRequirementsNotMetReason, error)
JobRequirementsMet determines whether a job can be scheduled onto this node. If the pod can be scheduled, the returned score indicates how well the node fits: - 0: Pod can be scheduled by preempting running pods. - 1: Pod can be scheduled without preempting any running pods. If the requirements are not met, it returns the reason why. If the requirements can't be parsed, an error is returned.
func NodeAffinityRequirementsMet ¶ added in v0.4.1
func NodeAffinityRequirementsMet(nodeLabels map[string]string, nodeSelector *v1.NodeSelector) (bool, PodRequirementsNotMetReason, error)
func NodeSelectorRequirementsMet ¶ added in v0.4.1
func NodeSelectorRequirementsMet(nodeLabels, unsetIndexedLabels, nodeSelector map[string]string) (bool, PodRequirementsNotMetReason)
func NodeTypeJobRequirementsMet ¶ added in v0.4.1
func NodeTypeJobRequirementsMet(nodeType *schedulerobjects.NodeType, jctx *schedulercontext.JobSchedulingContext) (bool, PodRequirementsNotMetReason)
NodeTypeJobRequirementsMet determines whether a pod can be scheduled on nodes of this NodeType. If the requirements are not met, it returns the reason for why. If the requirements can't be parsed, an error is returned.
func ResourceRequirementsMet ¶ added in v0.4.1
func ResourceRequirementsMet(available schedulerobjects.ResourceList, required v1.ResourceList) (bool, PodRequirementsNotMetReason)
func StaticJobRequirementsMet ¶ added in v0.4.1
func StaticJobRequirementsMet(taints []v1.Taint, labels map[string]string, totalResources schedulerobjects.ResourceList, jctx *schedulercontext.JobSchedulingContext) (bool, PodRequirementsNotMetReason, error)
StaticJobRequirementsMet checks if a job can be scheduled onto this node, accounting for taints, node selectors, node affinity, and total resources available on the node.
func TolerationRequirementsMet ¶ added in v0.4.1
func TolerationRequirementsMet(taints []v1.Taint, tolerations ...[]v1.Toleration) (bool, PodRequirementsNotMetReason)
type UnmatchedLabel ¶ added in v0.4.1
func (*UnmatchedLabel) String ¶ added in v0.4.1
func (r *UnmatchedLabel) String() string
func (*UnmatchedLabel) Sum64 ¶ added in v0.4.1
func (r *UnmatchedLabel) Sum64() uint64
type UnmatchedNodeSelector ¶ added in v0.4.1
type UnmatchedNodeSelector struct {
NodeSelector *v1.NodeSelector
}
func (*UnmatchedNodeSelector) String ¶ added in v0.4.1
func (err *UnmatchedNodeSelector) String() string
func (*UnmatchedNodeSelector) Sum64 ¶ added in v0.4.1
func (r *UnmatchedNodeSelector) Sum64() uint64
type UntoleratedTaint ¶ added in v0.4.1
func (*UntoleratedTaint) String ¶ added in v0.4.1
func (r *UntoleratedTaint) String() string
func (*UntoleratedTaint) Sum64 ¶ added in v0.4.1
func (r *UntoleratedTaint) Sum64() uint64