mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 19:23:40 +00:00
Merge pull request #116748 from mengjiao-liu/contextual-logging-scheduler-plugin-noderesource
Migrated `pkg/scheduler/framework/plugins/noderesources` to contextual logging
This commit is contained in:
commit
a38efaccc0
@ -105,7 +105,7 @@ func (ba *BalancedAllocation) Score(ctx context.Context, state *framework.CycleS
|
|||||||
// Detail: score = (1 - std) * MaxNodeScore, where std is calculated by the root square of Σ((fraction(i)-mean)^2)/len(resources)
|
// Detail: score = (1 - std) * MaxNodeScore, where std is calculated by the root square of Σ((fraction(i)-mean)^2)/len(resources)
|
||||||
// The algorithm is partly inspired by:
|
// The algorithm is partly inspired by:
|
||||||
// "Wei Huang et al. An Energy Efficient Virtual Machine Placement Algorithm with Balanced Resource Utilization"
|
// "Wei Huang et al. An Energy Efficient Virtual Machine Placement Algorithm with Balanced Resource Utilization"
|
||||||
return ba.score(pod, nodeInfo, s.podRequests)
|
return ba.score(ctx, pod, nodeInfo, s.podRequests)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ScoreExtensions of the Score plugin.
|
// ScoreExtensions of the Score plugin.
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/v1/resource"
|
"k8s.io/kubernetes/pkg/api/v1/resource"
|
||||||
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
"k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
@ -382,5 +381,5 @@ func (f *Fit) Score(ctx context.Context, state *framework.CycleState, pod *v1.Po
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return f.score(pod, nodeInfo, s.podRequests)
|
return f.score(ctx, pod, nodeInfo, s.podRequests)
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ limitations under the License.
|
|||||||
package noderesources
|
package noderesources
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
@ -44,9 +46,11 @@ type resourceAllocationScorer struct {
|
|||||||
|
|
||||||
// score will use `scorer` function to calculate the score.
|
// score will use `scorer` function to calculate the score.
|
||||||
func (r *resourceAllocationScorer) score(
|
func (r *resourceAllocationScorer) score(
|
||||||
|
ctx context.Context,
|
||||||
pod *v1.Pod,
|
pod *v1.Pod,
|
||||||
nodeInfo *framework.NodeInfo,
|
nodeInfo *framework.NodeInfo,
|
||||||
podRequests []int64) (int64, *framework.Status) {
|
podRequests []int64) (int64, *framework.Status) {
|
||||||
|
logger := klog.FromContext(ctx)
|
||||||
node := nodeInfo.Node()
|
node := nodeInfo.Node()
|
||||||
if node == nil {
|
if node == nil {
|
||||||
return 0, framework.NewStatus(framework.Error, "node not found")
|
return 0, framework.NewStatus(framework.Error, "node not found")
|
||||||
@ -59,7 +63,7 @@ func (r *resourceAllocationScorer) score(
|
|||||||
requested := make([]int64, len(r.resources))
|
requested := make([]int64, len(r.resources))
|
||||||
allocatable := make([]int64, len(r.resources))
|
allocatable := make([]int64, len(r.resources))
|
||||||
for i := range r.resources {
|
for i := range r.resources {
|
||||||
alloc, req := r.calculateResourceAllocatableRequest(nodeInfo, v1.ResourceName(r.resources[i].Name), podRequests[i])
|
alloc, req := r.calculateResourceAllocatableRequest(logger, nodeInfo, v1.ResourceName(r.resources[i].Name), podRequests[i])
|
||||||
// Only fill the extended resource entry when it's non-zero.
|
// Only fill the extended resource entry when it's non-zero.
|
||||||
if alloc == 0 {
|
if alloc == 0 {
|
||||||
continue
|
continue
|
||||||
@ -70,8 +74,8 @@ func (r *resourceAllocationScorer) score(
|
|||||||
|
|
||||||
score := r.scorer(requested, allocatable)
|
score := r.scorer(requested, allocatable)
|
||||||
|
|
||||||
if klogV := klog.V(10); klogV.Enabled() { // Serializing these maps is costly.
|
if loggerV := logger.V(10); loggerV.Enabled() { // Serializing these maps is costly.
|
||||||
klogV.InfoS("Listing internal info for allocatable resources, requested resources and score", "pod",
|
loggerV.Info("Listed internal info for allocatable resources, requested resources and score", "pod",
|
||||||
klog.KObj(pod), "node", klog.KObj(node), "resourceAllocationScorer", r.Name,
|
klog.KObj(pod), "node", klog.KObj(node), "resourceAllocationScorer", r.Name,
|
||||||
"allocatableResource", allocatable, "requestedResource", requested, "resourceScore", score,
|
"allocatableResource", allocatable, "requestedResource", requested, "resourceScore", score,
|
||||||
)
|
)
|
||||||
@ -84,7 +88,7 @@ func (r *resourceAllocationScorer) score(
|
|||||||
// - 1st param: quantity of allocatable resource on the node.
|
// - 1st param: quantity of allocatable resource on the node.
|
||||||
// - 2nd param: aggregated quantity of requested resource on the node.
|
// - 2nd param: aggregated quantity of requested resource on the node.
|
||||||
// Note: if it's an extended resource, and the pod doesn't request it, (0, 0) is returned.
|
// Note: if it's an extended resource, and the pod doesn't request it, (0, 0) is returned.
|
||||||
func (r *resourceAllocationScorer) calculateResourceAllocatableRequest(nodeInfo *framework.NodeInfo, resource v1.ResourceName, podRequest int64) (int64, int64) {
|
func (r *resourceAllocationScorer) calculateResourceAllocatableRequest(logger klog.Logger, nodeInfo *framework.NodeInfo, resource v1.ResourceName, podRequest int64) (int64, int64) {
|
||||||
requested := nodeInfo.NonZeroRequested
|
requested := nodeInfo.NonZeroRequested
|
||||||
if r.useRequested {
|
if r.useRequested {
|
||||||
requested = nodeInfo.Requested
|
requested = nodeInfo.Requested
|
||||||
@ -107,7 +111,7 @@ func (r *resourceAllocationScorer) calculateResourceAllocatableRequest(nodeInfo
|
|||||||
return nodeInfo.Allocatable.ScalarResources[resource], (nodeInfo.Requested.ScalarResources[resource] + podRequest)
|
return nodeInfo.Allocatable.ScalarResources[resource], (nodeInfo.Requested.ScalarResources[resource] + podRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
klog.V(10).InfoS("Requested resource is omitted for node score calculation", "resourceName", resource)
|
logger.V(10).Info("Requested resource is omitted for node score calculation", "resourceName", resource)
|
||||||
return 0, 0
|
return 0, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user