1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-25 20:59:28 +01:00

Merge pull request #544 from ingvagabund/lnu-improve-node-usage-logging

LNU: improve nodeUsage logging
This commit is contained in:
Kubernetes Prow Robot
2021-04-06 23:45:53 -07:00
committed by GitHub
2 changed files with 34 additions and 22 deletions

View File

@@ -177,7 +177,7 @@ The under utilization of nodes is determined by a configurable threshold `thresh
calculated as the current resources requested on the node vs [total allocatable](https://kubernetes.io/docs/concepts/architecture/nodes/#capacity).
For pods, this means the number of pods on the node as a fraction of the pod capacity set for that node).
If a node's usage is below threshold for all (cpu, memory, and number of pods), the node is considered underutilized.
If a node's usage is below threshold for all (cpu, memory, number of pods and extended resources), the node is considered underutilized.
Currently, pods request resource requirements are considered for computing node resource utilization.
There is another configurable threshold, `targetThresholds`, that is used to compute those potential nodes

View File

@@ -116,9 +116,9 @@ func LowNodeUtilization(ctx context.Context, client clientset.Interface, strateg
// log message in one line
keysAndValues := []interface{}{
"CPU", int64(float64(thresholds[v1.ResourceCPU])),
"Mem", int64(float64(thresholds[v1.ResourceMemory])),
"Pods", int64(float64(thresholds[v1.ResourcePods])),
"CPU", thresholds[v1.ResourceCPU],
"Mem", thresholds[v1.ResourceMemory],
"Pods", thresholds[v1.ResourcePods],
}
for name := range thresholds {
if !isBasicResource(name) {
@@ -126,12 +126,26 @@ func LowNodeUtilization(ctx context.Context, client clientset.Interface, strateg
}
}
klog.V(1).InfoS("Criteria for a node under utilization", keysAndValues...)
klog.V(1).InfoS("Number of underutilized nodes", "totalNumber", len(lowNodes))
// log message in one line
keysAndValues = []interface{}{
"CPU", targetThresholds[v1.ResourceCPU],
"Mem", targetThresholds[v1.ResourceMemory],
"Pods", targetThresholds[v1.ResourcePods],
}
for name := range targetThresholds {
if !isBasicResource(name) {
keysAndValues = append(keysAndValues, string(name), int64(float64(targetThresholds[name])))
}
}
klog.V(1).InfoS("Criteria for a node above target utilization", keysAndValues...)
klog.V(1).InfoS("Number of overutilized nodes", "totalNumber", len(targetNodes))
if len(lowNodes) == 0 {
klog.V(1).InfoS("No node is underutilized, nothing to do here, you might tune your thresholds further")
return
}
klog.V(1).InfoS("Total number of underutilized nodes", "totalNumber", len(lowNodes))
if len(lowNodes) < strategy.Params.NodeResourceUtilizationThresholds.NumberOfNodes {
klog.V(1).InfoS("Number of nodes underutilized is less than NumberOfNodes, nothing to do here", "underutilizedNodes", len(lowNodes), "numberOfNodes", strategy.Params.NodeResourceUtilizationThresholds.NumberOfNodes)
@@ -148,20 +162,6 @@ func LowNodeUtilization(ctx context.Context, client clientset.Interface, strateg
return
}
// log message in one line
keysAndValues = []interface{}{
"CPU", int64(float64(targetThresholds[v1.ResourceCPU])),
"Mem", int64(float64(targetThresholds[v1.ResourceMemory])),
"Pods", int64(float64(targetThresholds[v1.ResourcePods])),
}
for name := range targetThresholds {
if !isBasicResource(name) {
keysAndValues = append(keysAndValues, string(name), int64(float64(targetThresholds[name])))
}
}
klog.V(1).InfoS("Criteria for a node above target utilization", keysAndValues...)
klog.V(1).InfoS("Number of nodes above target utilization", "totalNumber", len(targetNodes))
evictable := podEvictor.Evictable(evictions.WithPriorityThreshold(thresholdPriority))
evictPodsFromTargetNodes(
@@ -323,7 +323,7 @@ func evictPodsFromTargetNodes(
sortNodesByUsage(targetNodes)
// upper bound on total number of pods/cpu/memory and optional extened resources to be moved
// upper bound on total number of pods/cpu/memory and optional extended resources to be moved
totalAvailableUsage := map[v1.ResourceName]*resource.Quantity{
v1.ResourcePods: {},
v1.ResourceCPU: {},
@@ -334,7 +334,7 @@ func evictPodsFromTargetNodes(
for _, node := range lowNodes {
taintsOfLowNodes[node.node.Name] = node.node.Spec.Taints
for name := range node.highResourceThreshold {
for _, name := range resourceNames {
if _, ok := totalAvailableUsage[name]; !ok {
totalAvailableUsage[name] = resource.NewQuantity(0, resource.DecimalSI)
}
@@ -424,7 +424,19 @@ func evictPods(
}
}
klog.V(3).InfoS("Updated node usage", "updatedUsage", nodeUsage)
keysAndValues := []interface{}{
"node", nodeUsage.node.Name,
"CPU", nodeUsage.usage[v1.ResourceCPU].MilliValue(),
"Mem", nodeUsage.usage[v1.ResourceMemory].Value(),
"Pods", nodeUsage.usage[v1.ResourcePods].Value(),
}
for name := range totalAvailableUsage {
if !isBasicResource(name) {
keysAndValues = append(keysAndValues, string(name), totalAvailableUsage[name].Value())
}
}
klog.V(3).InfoS("Updated node usage", keysAndValues...)
// check if node utilization drops below target threshold or any required capacity (cpu, memory, pods) is moved
if !continueCond() {
break