1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- Copyright 2016 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 priorities
- import (
- schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
- schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
- )
- var (
- mostResourcePriority = &ResourceAllocationPriority{"MostResourceAllocation", mostResourceScorer}
- // MostRequestedPriorityMap is a priority function that favors nodes with most requested resources.
- // It calculates the percentage of memory and CPU requested by pods scheduled on the node, and prioritizes
- // based on the maximum of the average of the fraction of requested to capacity.
- // Details: (cpu(10 * sum(requested) / capacity) + memory(10 * sum(requested) / capacity)) / 2
- MostRequestedPriorityMap = mostResourcePriority.PriorityMap
- )
- func mostResourceScorer(requested, allocable *schedulernodeinfo.Resource, includeVolumes bool, requestedVolumes int, allocatableVolumes int) int64 {
- return (mostRequestedScore(requested.MilliCPU, allocable.MilliCPU) +
- mostRequestedScore(requested.Memory, allocable.Memory)) / 2
- }
- // The used capacity is calculated on a scale of 0-10
- // 0 being the lowest priority and 10 being the highest.
- // The more resources are used the higher the score is. This function
- // is almost a reversed version of least_requested_priority.calculateUnusedScore
- // (10 - calculateUnusedScore). The main difference is in rounding. It was added to
- // keep the final formula clean and not to modify the widely used (by users
- // in their default scheduling policies) calculateUsedScore.
- func mostRequestedScore(requested, capacity int64) int64 {
- if capacity == 0 {
- return 0
- }
- if requested > capacity {
- return 0
- }
- return (requested * schedulerapi.MaxPriority) / capacity
- }
|