internaltypes

package
v0.16.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2025 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// evictedPriority is the priority class priority resources consumed by evicted jobs are accounted for at.
	// This helps avoid scheduling new jobs onto nodes that make it impossible to re-schedule evicted jobs.
	EvictedPriority int32 = -1
	// MinPriority is the smallest possible priority class priority within the NodeDb.
	MinPriority int32 = EvictedPriority
)

Variables

This section is empty.

Functions

func MarkAllocatable added in v0.16.0

func MarkAllocatable(m map[int32]ResourceList, p int32, rs ResourceList)

MarkAllocatable indicates resources have been released by pods of priority p, thus increasing the resources allocatable to pods of priority p or lower.

func MarkAllocated added in v0.16.0

func MarkAllocated(m map[int32]ResourceList, p int32, rs ResourceList)

MarkAllocated indicates resources have been allocated to pods of priority p, hence reducing the resources allocatable to pods of priority p or lower.

func NewAllocatableByPriorityAndResourceType added in v0.16.0

func NewAllocatableByPriorityAndResourceType(priorities []int32, rl ResourceList) map[int32]ResourceList

func QuantityToInt64RoundDown added in v0.4.48

func QuantityToInt64RoundDown(q resource.Quantity, scale resource.Scale) int64

func QuantityToInt64RoundUp added in v0.4.48

func QuantityToInt64RoundUp(q resource.Quantity, scale resource.Scale) int64

func RlMapAllZero added in v0.15.4

func RlMapAllZero(m map[string]ResourceList) bool

func RlMapHasNegativeValues added in v0.15.4

func RlMapHasNegativeValues(m map[string]ResourceList) bool

func RlMapRemoveZeros added in v0.15.4

func RlMapRemoveZeros(m map[string]ResourceList) map[string]ResourceList

func RlMapToString added in v0.15.4

func RlMapToString(m map[string]ResourceList) string

func ToSchedulerObjectsJobSchedulingInfo added in v0.16.6

func ToSchedulerObjectsJobSchedulingInfo(j *JobSchedulingInfo) *schedulerobjects.JobSchedulingInfo

func UnschedulableTaint added in v0.13.0

func UnschedulableTaint() v1.Taint

UnschedulableTaint returns the taint automatically added to unschedulable nodes on inserting into the nodeDb.

Types

type JobSchedulingInfo added in v0.16.6

type JobSchedulingInfo struct {
	Lifetime          uint32
	PriorityClassName string
	SubmitTime        time.Time
	Priority          uint32
	PodRequirements   *PodRequirements
	Version           uint32
}

JobSchedulingInfo is a minimal representation of job requirements that the scheduler uses for scheduling

func FromSchedulerObjectsJobSchedulingInfo added in v0.16.6

func FromSchedulerObjectsJobSchedulingInfo(j *schedulerobjects.JobSchedulingInfo) (*JobSchedulingInfo, error)

func (*JobSchedulingInfo) DeepCopy added in v0.16.6

func (j *JobSchedulingInfo) DeepCopy() *JobSchedulingInfo

type Node

type Node struct {

	// This field is set when inserting the Node into a NodeDb.
	Keys [][]byte

	AllocatableByPriority map[int32]ResourceList
	AllocatedByQueue      map[string]ResourceList
	AllocatedByJobId      map[string]ResourceList
	EvictedJobRunIds      map[string]bool
	// contains filtered or unexported fields
}

Node is a scheduler-internal representation of one Kubernetes node. Its private fields should be immutable! Do not change these!

func CreateNode added in v0.4.37

func CreateNode(
	id string,
	nodeType *NodeType,
	index uint64,
	executor string,
	name string,
	pool string,
	reportingNodeType string,
	taints []v1.Taint,
	labels map[string]string,
	unschedulable bool,
	totalResources ResourceList,
	allocatableResources ResourceList,
	unallocatableResources map[int32]ResourceList,
	allocatableByPriority map[int32]ResourceList,
	allocatedByQueue map[string]ResourceList,
	allocatedByJobId map[string]ResourceList,
	evictedJobRunIds map[string]bool,
	keys [][]byte,
) *Node

func CreateNodeAndType added in v0.15.8

func CreateNodeAndType(
	id string,
	index uint64,
	executor string,
	name string,
	pool string,
	reportingNodeType string,
	unschedulable bool,
	taints []v1.Taint,
	labels map[string]string,
	indexedTaints map[string]bool,
	indexedNodeLabels map[string]bool,
	totalResources ResourceList,
	allocatableResources ResourceList,
	unallocatableResources map[int32]ResourceList,
	allocatableByPriority map[int32]ResourceList,
) *Node

func FromSchedulerObjectsNode added in v0.13.0

func FromSchedulerObjectsNode(node *schedulerobjects.Node,
	nodeIndex uint64,
	indexedTaints map[string]bool,
	indexedNodeLabels map[string]bool,
	allowedPriorities []int32,
	resourceListFactory *ResourceListFactory,
) *Node

func (*Node) DeepCopyNilKeys added in v0.9.0

func (node *Node) DeepCopyNilKeys() *Node

func (*Node) FindMatchingUntoleratedTaint added in v0.4.40

func (node *Node) FindMatchingUntoleratedTaint(tolerations ...[]v1.Toleration) (v1.Taint, bool)

func (*Node) GetAllocatableResources added in v0.16.6

func (node *Node) GetAllocatableResources() ResourceList

func (*Node) GetExecutor added in v0.4.37

func (node *Node) GetExecutor() string

func (*Node) GetId added in v0.4.37

func (node *Node) GetId() string

func (*Node) GetIndex added in v0.4.37

func (node *Node) GetIndex() uint64

func (*Node) GetLabelValue added in v0.4.40

func (node *Node) GetLabelValue(key string) (string, bool)

func (*Node) GetLabels added in v0.4.40

func (node *Node) GetLabels() map[string]string

func (*Node) GetName added in v0.4.37

func (node *Node) GetName() string

func (*Node) GetNodeType added in v0.13.0

func (node *Node) GetNodeType() *NodeType

func (*Node) GetNodeTypeId added in v0.4.37

func (node *Node) GetNodeTypeId() uint64

func (*Node) GetPool added in v0.9.0

func (node *Node) GetPool() string

func (*Node) GetReportingNodeType added in v0.16.6

func (node *Node) GetReportingNodeType() string

func (*Node) GetTaints added in v0.4.40

func (node *Node) GetTaints() []v1.Taint

func (*Node) GetTolerationsForTaints added in v0.4.40

func (node *Node) GetTolerationsForTaints() []v1.Toleration

func (*Node) GetTotalResources added in v0.9.0

func (node *Node) GetTotalResources() ResourceList

func (*Node) GetUnallocatableResources added in v0.15.5

func (node *Node) GetUnallocatableResources() map[int32]ResourceList

func (*Node) IsUnschedulable added in v0.16.6

func (node *Node) IsUnschedulable() bool

func (*Node) MatchNodeSelectorTerms added in v0.4.40

func (node *Node) MatchNodeSelectorTerms(nodeSelector *v1.NodeSelector) (bool, error)

func (*Node) SummaryString added in v0.15.5

func (node *Node) SummaryString() string

type NodeFactory added in v0.13.1

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

func NewNodeFactory added in v0.13.1

func NewNodeFactory(
	indexedTaints []string,
	indexedNodeLabels []string,
	priorityClasses map[string]types.PriorityClass,
	resourceListFactory *ResourceListFactory,
) *NodeFactory

func (*NodeFactory) AddLabels added in v0.16.0

func (f *NodeFactory) AddLabels(nodes []*Node, extraLabels map[string]string) []*Node

func (*NodeFactory) AddTaints added in v0.16.0

func (f *NodeFactory) AddTaints(nodes []*Node, extraTaints []v1.Taint) []*Node

func (*NodeFactory) CreateNodeAndType added in v0.15.8

func (f *NodeFactory) CreateNodeAndType(
	id string,
	executor string,
	name string,
	pool string,
	reportingNodeType string,
	unschedulable bool,
	taints []v1.Taint,
	labels map[string]string,
	totalResources ResourceList,
	allocatableResources ResourceList,
	unallocatableResources map[int32]ResourceList,
	allocatableByPriority map[int32]ResourceList,
) *Node

func (*NodeFactory) FromSchedulerObjectsExecutors added in v0.15.5

func (f *NodeFactory) FromSchedulerObjectsExecutors(executors []*schedulerobjects.Executor, errorLogger func(string)) []*Node

func (*NodeFactory) FromSchedulerObjectsNode added in v0.13.1

func (f *NodeFactory) FromSchedulerObjectsNode(node *schedulerobjects.Node) *Node

func (*NodeFactory) ResourceListFactory added in v0.16.0

func (f *NodeFactory) ResourceListFactory() *ResourceListFactory

type NodeType added in v0.9.7

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

NodeType represents a particular combination of taints and labels. The scheduler groups nodes by node type. When assigning pods to nodes, the scheduler only considers nodes with a NodeType for which the taints and labels match. Its fields should be immutable! Do not change these!

func NewNodeType added in v0.9.7

func NewNodeType(taints []v1.Taint, labels map[string]string, indexedTaints map[string]bool, indexedLabels map[string]bool) *NodeType

func (*NodeType) FindMatchingUntoleratedTaint added in v0.9.7

func (m *NodeType) FindMatchingUntoleratedTaint(tolerations ...[]v1.Toleration) (v1.Taint, bool)

func (*NodeType) GetId added in v0.9.7

func (m *NodeType) GetId() uint64

func (*NodeType) GetLabelValue added in v0.9.7

func (m *NodeType) GetLabelValue(key string) (string, bool)

func (*NodeType) GetLabels added in v0.9.7

func (m *NodeType) GetLabels() map[string]string

func (*NodeType) GetTaints added in v0.9.7

func (m *NodeType) GetTaints() []v1.Taint

func (*NodeType) GetUnsetIndexedLabelValue added in v0.9.7

func (m *NodeType) GetUnsetIndexedLabelValue(key string) (string, bool)

func (*NodeType) GetUnsetIndexedLabels added in v0.9.7

func (m *NodeType) GetUnsetIndexedLabels() map[string]string

type PodRequirements added in v0.16.6

type PodRequirements struct {
	NodeSelector         map[string]string
	Affinity             *v1.Affinity
	Tolerations          []v1.Toleration
	Annotations          map[string]string
	ResourceRequirements v1.ResourceRequirements
}

PodRequirements captures the scheduling requirements specific to a pod.

func (*PodRequirements) DeepCopy added in v0.16.6

func (p *PodRequirements) DeepCopy() *PodRequirements

func (*PodRequirements) GetAffinityNodeSelector added in v0.16.6

func (p *PodRequirements) GetAffinityNodeSelector() *v1.NodeSelector

type PodRequirementsSerialiser added in v0.16.6

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

PodRequirementsSerialiser produces the canonical byte representation of a set of pod scheduling requirements. The resulting byte array can, e.g., be used to produce a hash guaranteed to be equal for equivalent requirements. Not thread-safe.

Fields are separated by =, $, &, and =, since these characters are not allowed in taints and labels; see https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set https://man.archlinux.org/man/community/kubectl/kubectl-taint.1.en

func NewPodRequirementsSerialiser added in v0.16.6

func NewPodRequirementsSerialiser() *PodRequirementsSerialiser

func (*PodRequirementsSerialiser) AppendAffinity added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendAffinity(out []byte, affinity *v1.Affinity) []byte

AppendAffinity writes a v1.Affinity into the hash. Only NodeAffinity (i.e., not PodAffinity) and RequiredDuringSchedulingIgnoredDuringExecution fields are considered.

func (*PodRequirementsSerialiser) AppendAffinityNodeSelector added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendAffinityNodeSelector(out []byte, nodeSelector *v1.NodeSelector) []byte

func (*PodRequirementsSerialiser) AppendNodeSelector added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendNodeSelector(out []byte, nodeSelector map[string]string) []byte

func (*PodRequirementsSerialiser) AppendNodeSelectorRequirements added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendNodeSelectorRequirements(out []byte, nodeSelectorRequirements []v1.NodeSelectorRequirement) []byte

func (*PodRequirementsSerialiser) AppendRequirements added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendRequirements(
	out []byte,
	nodeSelector map[string]string,
	affinity *v1.Affinity,
	tolerations []v1.Toleration,
	requests v1.ResourceList,
	priorityClassName string,
) []byte

func (*PodRequirementsSerialiser) AppendResourceList added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendResourceList(out []byte, resourceList v1.ResourceList) []byte

func (*PodRequirementsSerialiser) AppendTolerations added in v0.16.6

func (skg *PodRequirementsSerialiser) AppendTolerations(out []byte, tolerations []v1.Toleration) []byte

type Resource added in v0.6.0

type Resource struct {
	Name     string
	RawValue int64
	Value    k8sResource.Quantity
	Scale    k8sResource.Scale
	Type     ResourceType
}

type ResourceFractionList added in v0.15.4

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

func (ResourceFractionList) GetByName added in v0.15.4

func (rfl ResourceFractionList) GetByName(name string) (float64, error)

func (ResourceFractionList) IsEmpty added in v0.15.4

func (rfl ResourceFractionList) IsEmpty() bool

func (ResourceFractionList) Max added in v0.15.4

func (rfl ResourceFractionList) Max() float64

func (ResourceFractionList) Multiply added in v0.15.4

type ResourceList added in v0.4.48

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

func RlMapSumValues added in v0.15.4

func RlMapSumValues(m map[string]ResourceList) ResourceList

func (ResourceList) Add added in v0.6.0

func (rl ResourceList) Add(other ResourceList) ResourceList

func (ResourceList) AllZero added in v0.6.0

func (rl ResourceList) AllZero() bool

func (ResourceList) Cap added in v0.15.4

func (ResourceList) DivideZeroOnError added in v0.15.4

func (rl ResourceList) DivideZeroOnError(other ResourceList) ResourceFractionList

Divide, return 0 on attempt to divide by 0

func (ResourceList) Equal added in v0.6.0

func (rl ResourceList) Equal(other ResourceList) bool

func (ResourceList) Exceeds added in v0.15.4

func (rl ResourceList) Exceeds(other ResourceList) bool

func (ResourceList) ExceedsAvailable added in v0.6.0

func (rl ResourceList) ExceedsAvailable(available ResourceList) (string, k8sResource.Quantity, k8sResource.Quantity, bool)

ExceedsAvailable - if any resource in this ResourceList is greater than the equivalent resource in param available, this function returns

  • the name of the relevant resource
  • the amount of the relevant resource in available
  • the amount of the relevant resource in this ResourceList
  • true

- if no resources in this ResourceList exceed available, the last return value is false. - empty resource lists are considered equivalent to all zero.

func (ResourceList) Factory added in v0.15.4

func (rl ResourceList) Factory() *ResourceListFactory

func (ResourceList) FloorAtZero added in v0.14.1

func (rl ResourceList) FloorAtZero() ResourceList

func (ResourceList) GetByName added in v0.4.48

func (rl ResourceList) GetByName(name string) (int64, error)

func (ResourceList) GetByNameZeroIfMissing added in v0.6.0

func (rl ResourceList) GetByNameZeroIfMissing(name string) int64

func (ResourceList) GetResourceByNameZeroIfMissing added in v0.15.4

func (rl ResourceList) GetResourceByNameZeroIfMissing(name string) k8sResource.Quantity

func (ResourceList) GetResources added in v0.6.0

func (rl ResourceList) GetResources() []Resource

func (ResourceList) HasNegativeValues added in v0.6.0

func (rl ResourceList) HasNegativeValues() bool

func (ResourceList) IsEmpty added in v0.6.0

func (rl ResourceList) IsEmpty() bool

func (ResourceList) Multiply added in v0.15.4

func (rl ResourceList) Multiply(multipliers ResourceFractionList) ResourceList

func (ResourceList) Negate added in v0.6.0

func (rl ResourceList) Negate() ResourceList

func (ResourceList) OfType added in v0.14.0

func (rl ResourceList) OfType(t ResourceType) ResourceList

func (ResourceList) String added in v0.6.0

func (rl ResourceList) String() string

func (ResourceList) Subtract added in v0.6.0

func (rl ResourceList) Subtract(other ResourceList) ResourceList

func (ResourceList) ToMap added in v0.13.0

func (rl ResourceList) ToMap() map[string]k8sResource.Quantity

type ResourceListFactory added in v0.4.48

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

func NewResourceListFactory added in v0.13.1

func NewResourceListFactory(
	supportedResourceTypes []configuration.ResourceType,
	floatingResourceTypes []configuration.FloatingResourceConfig,
) (*ResourceListFactory, error)

func (*ResourceListFactory) FromJobResourceListFailOnUnknown added in v0.6.0

func (factory *ResourceListFactory) FromJobResourceListFailOnUnknown(resources map[string]k8sResource.Quantity) (ResourceList, error)

Fail on unknown resources, round up.

func (*ResourceListFactory) FromJobResourceListIgnoreUnknown added in v0.6.0

func (factory *ResourceListFactory) FromJobResourceListIgnoreUnknown(resources map[string]k8sResource.Quantity) ResourceList

Ignore unknown resources, round up.

func (*ResourceListFactory) FromNodeProto added in v0.4.48

func (factory *ResourceListFactory) FromNodeProto(resources map[string]k8sResource.Quantity) ResourceList

Ignore unknown resources, round down.

func (*ResourceListFactory) GetScale added in v0.6.0

func (factory *ResourceListFactory) GetScale(resourceTypeName string) (k8sResource.Scale, error)

func (*ResourceListFactory) MakeAllMax added in v0.15.8

func (factory *ResourceListFactory) MakeAllMax() ResourceList

func (*ResourceListFactory) MakeAllZero added in v0.6.0

func (factory *ResourceListFactory) MakeAllZero() ResourceList

func (*ResourceListFactory) MakeResourceFractionList added in v0.15.4

func (factory *ResourceListFactory) MakeResourceFractionList(m map[string]float64, defaultValue float64) ResourceFractionList

func (*ResourceListFactory) SummaryString added in v0.4.48

func (factory *ResourceListFactory) SummaryString() string

type ResourceType added in v0.14.0

type ResourceType int
const (
	// A normal k8s resource, such as "memory" or "nvidia.com/gpu"
	Kubernetes ResourceType = iota
	// A floating resource that is not tied to a Kubernetes cluster or node,
	// e.g. "external-storage-connections".
	Floating = iota
)

type SchedulingKey added in v0.16.6

type SchedulingKey [highwayhash.Size]byte

SchedulingKey is a hash of the scheduling requirements of a job. This key is used to efficiently mark jobs as unschedulable.

var EmptySchedulingKey SchedulingKey

type SchedulingKeyGenerator added in v0.16.6

type SchedulingKeyGenerator struct {
	sync.Mutex
	// contains filtered or unexported fields
}

SchedulingKeyGenerator is used to generate scheduling keys efficiently. A scheduling key is the canonical hash of the scheduling requirements of a job. All memory is allocated up-front and re-used. Thread-safe.

func NewSchedulingKeyGenerator added in v0.16.6

func NewSchedulingKeyGenerator() *SchedulingKeyGenerator

func NewSchedulingKeyGeneratorWithKey added in v0.16.6

func NewSchedulingKeyGeneratorWithKey(key []byte) *SchedulingKeyGenerator

NewSchedulingKeyGeneratorWithKey returns a new SchedulingKeyGenerator using the provided key. The key should be considered secret since scheduling key collisions can be found if it's known. Key has to be of length 32.

func (*SchedulingKeyGenerator) Key added in v0.16.6

func (skg *SchedulingKeyGenerator) Key(
	nodeSelector map[string]string,
	affinity *v1.Affinity,
	tolerations []v1.Toleration,
	requests v1.ResourceList,
	priorityClassName string,
) SchedulingKey

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL