mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-08-08 23:37:11 +00:00
Merge pull request #133065 from natasha41575/dedupe-resize-test
dedupe fetching allocatable and available resources in node test
This commit is contained in:
@@ -223,7 +223,7 @@ func doPodResizeSchedulerTests(f *framework.Framework) {
|
||||
|
||||
ginkgo.By("Find node CPU resources available for allocation!")
|
||||
node := nodes.Items[0]
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU, nodeAvailableMilliCPU)
|
||||
|
||||
@@ -297,7 +297,7 @@ func doPodResizeSchedulerTests(f *framework.Framework) {
|
||||
// 2. Resize pod1 down so that pod3 gets room to be scheduled.
|
||||
// 3. Verify that pod3 is scheduled and running.
|
||||
//
|
||||
nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2 := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2 := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("TEST2: Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2)
|
||||
testPod3CPUQuantity := resource.NewMilliQuantity(nodeAvailableMilliCPU2+testPod1CPUQuantity.MilliValue()/4, resource.DecimalSI)
|
||||
@@ -424,7 +424,7 @@ func doPodResizeRetryDeferredTests(f *framework.Framework) {
|
||||
|
||||
ginkgo.By("Find node CPU resources available for allocation!")
|
||||
node := nodes.Items[0]
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU, nodeAvailableMilliCPU)
|
||||
|
||||
@@ -463,7 +463,7 @@ func doPodResizeRetryDeferredTests(f *framework.Framework) {
|
||||
gomega.Expect(testPod2.Status.Phase).To(gomega.Equal(v1.PodRunning))
|
||||
gomega.Expect(testPod2.Generation).To(gomega.BeEquivalentTo(1))
|
||||
|
||||
nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2 := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2 := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU2, nodeAvailableMilliCPU2)
|
||||
|
||||
@@ -554,7 +554,7 @@ func doPodResizeRetryDeferredTests(f *framework.Framework) {
|
||||
ginkgo.By("Find node CPU and memory resources available for allocation!")
|
||||
node := nodes.Items[0]
|
||||
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU, nodeAvailableMilliCPU := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU, nodeAvailableMilliCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
@@ -782,11 +782,11 @@ func doPodResizeRetryDeferredTests(f *framework.Framework) {
|
||||
ginkgo.By("Find node CPU and memory resources available for allocation!")
|
||||
node := nodes.Items[0]
|
||||
|
||||
nodeAllocatableMilliCPU, initNodeAvailableMilliCPU := getNodeAllocatableAndAvailableMilliCPUValues(ctx, f, &node)
|
||||
nodeAllocatableMilliCPU, initNodeAvailableMilliCPU := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceCPU)
|
||||
framework.Logf("Node '%s': NodeAllocatable MilliCPUs = %dm. MilliCPUs currently available to allocate = %dm.",
|
||||
node.Name, nodeAllocatableMilliCPU, initNodeAvailableMilliCPU)
|
||||
|
||||
nodeAllocatableMem, initNodeAvailableMem := getNodeAllocatableAndAvailableMemoryValues(ctx, f, &node)
|
||||
nodeAllocatableMem, initNodeAvailableMem := getNodeAllocatableAndAvailableValues(ctx, f, &node, v1.ResourceMemory)
|
||||
framework.Logf("Node '%s': NodeAllocatable Memory = %d. Memory currently available to allocate = %d.",
|
||||
node.Name, nodeAllocatableMem, initNodeAvailableMem)
|
||||
|
||||
@@ -947,11 +947,21 @@ func waitForResourceQuota(ctx context.Context, c clientset.Interface, ns, quotaN
|
||||
})).WithTimeout(framework.PollShortTimeout).ShouldNot(gomega.BeEmpty())
|
||||
}
|
||||
|
||||
// Calculate available CPU. nodeAvailableCPU = nodeAllocatableCPU - sum(podAllocatedCPU)
|
||||
func getNodeAllocatableAndAvailableMilliCPUValues(ctx context.Context, f *framework.Framework, n *v1.Node) (int64, int64) {
|
||||
nodeAllocatableMilliCPU := n.Status.Allocatable.Cpu().MilliValue()
|
||||
// Calculate available resource. nodeAvailable = nodeAllocatable - sum(podAllocated). If resourceName is "CPU", the values
|
||||
// returned are in MilliValues.
|
||||
func getNodeAllocatableAndAvailableValues(ctx context.Context, f *framework.Framework, n *v1.Node, resourceName v1.ResourceName) (int64, int64) {
|
||||
var nodeAllocatable int64
|
||||
switch resourceName {
|
||||
case v1.ResourceCPU:
|
||||
nodeAllocatable = n.Status.Allocatable.Cpu().MilliValue()
|
||||
case v1.ResourceMemory:
|
||||
nodeAllocatable = n.Status.Allocatable.Memory().Value()
|
||||
default:
|
||||
framework.Failf("unexpected resource type %q; expected either 'CPU' or 'Memory'", resourceName)
|
||||
}
|
||||
|
||||
gomega.Expect(n.Status.Allocatable).ShouldNot(gomega.BeEmpty(), "allocatable")
|
||||
podAllocatedMilliCPU := int64(0)
|
||||
podAllocated := int64(0)
|
||||
|
||||
// Exclude pods that are in the Succeeded or Failed states
|
||||
selector := fmt.Sprintf("spec.nodeName=%s,status.phase!=%v,status.phase!=%v", n.Name, v1.PodSucceeded, v1.PodFailed)
|
||||
@@ -961,32 +971,15 @@ func getNodeAllocatableAndAvailableMilliCPUValues(ctx context.Context, f *framew
|
||||
framework.ExpectNoError(err, "failed to get running pods")
|
||||
framework.Logf("Found %d pods on node '%s'", len(podList.Items), n.Name)
|
||||
for _, pod := range podList.Items {
|
||||
podRequestMilliCPU := resourceapi.GetResourceRequest(&pod, v1.ResourceCPU)
|
||||
podAllocatedMilliCPU += podRequestMilliCPU
|
||||
podRequest := resourceapi.GetResourceRequest(&pod, resourceName)
|
||||
podAllocated += podRequest
|
||||
}
|
||||
nodeAvailableMilliCPU := nodeAllocatableMilliCPU - podAllocatedMilliCPU
|
||||
return nodeAllocatableMilliCPU, nodeAvailableMilliCPU
|
||||
}
|
||||
|
||||
// Calculate available memory. nodeAvailableMemory = nodeAllocatableMemory - sum(podAllocatedMemory)
|
||||
func getNodeAllocatableAndAvailableMemoryValues(ctx context.Context, f *framework.Framework, n *v1.Node) (int64, int64) {
|
||||
nodeAllocatableMem := n.Status.Allocatable.Memory().Value()
|
||||
gomega.Expect(n.Status.Allocatable).ShouldNot(gomega.BeEmpty(), "allocatable")
|
||||
podAllocatedMem := int64(0)
|
||||
|
||||
// Exclude pods that are in the Succeeded or Failed states
|
||||
selector := fmt.Sprintf("spec.nodeName=%s,status.phase!=%v,status.phase!=%v", n.Name, v1.PodSucceeded, v1.PodFailed)
|
||||
listOptions := metav1.ListOptions{FieldSelector: selector}
|
||||
podList, err := f.ClientSet.CoreV1().Pods(metav1.NamespaceAll).List(ctx, listOptions)
|
||||
|
||||
framework.ExpectNoError(err, "failed to get running pods")
|
||||
framework.Logf("Found %d pods on node '%s'", len(podList.Items), n.Name)
|
||||
for _, pod := range podList.Items {
|
||||
podRequestMem := resourceapi.GetResourceRequest(&pod, v1.ResourceMemory)
|
||||
podAllocatedMem += podRequestMem
|
||||
nodeAvailable := nodeAllocatable - podAllocated
|
||||
if nodeAvailable < 0 {
|
||||
framework.Failf("unexpected negative value of nodeAvailable %d", nodeAvailable)
|
||||
}
|
||||
nodeAvailableMem := nodeAllocatableMem - podAllocatedMem
|
||||
return nodeAllocatableMem, nodeAvailableMem
|
||||
|
||||
return nodeAllocatable, nodeAvailable
|
||||
}
|
||||
|
||||
func waitForPodDeferred(ctx context.Context, f *framework.Framework, testPod *v1.Pod) {
|
||||
|
||||
Reference in New Issue
Block a user